본문 바로가기
E | ngineering

Mixin 으로 객체로운 생활

by 덞웖이 2025. 3. 11.
의식의 르흠: Django에서 Mixin클래스를 사용했던게 생각남... 😁

 

🐍 파이썬...

파이썬은 다중상속이 가능해서 매우 편하다. 하지만 계층이 이리저리 꼬여서 양날의 검이 될 수도 있다.

다른 베이스 클래스를 섞지 않고 깔끔하게 기능을 추가할 수 잇다면...

💿 믹스인

믹스인 패턴이라고도 하는 믹스인 클래스를 여기에 쓸 수 있음. 인스턴스로 만들어서 쓰지 않고, 상속만 받아서 사용한다. 자바의 인터페이스와도 유사하다.

🎲 Ex...

필드를 졔이쓴으로 변환하는 믹스인과 로그를 찍는 믹스인을 섞어보쟈

import json

class JsonSerialKillerMixin:
    def to_json(self):
        return json.dumps(self.__dict__)

class LoggingMixin:
    def log(self, text):
        print(text)

class TestModel(JsonSerialKillerMixin, LoggingMixin):
    def __init__(self, name, value):
        self.name = name
        self.value = value
        self.log("Instantiated!")

instance = TestModel("Babo", 50)
print(instance.to_json())

 

원칙

  • 코드의 재사용성 고려
  • 관심사를 분리한다
  • 단독으로 인스턴스로 사용하지 않음
  • 상속 뎁스가 깊어지지 않도록 (본래 목적 전도...🙄)

🤔...자바 인터페이스랑 비교한다면?

파이떤 믹스인 잡바 인터페이스
기능을 추가해주는 클래스 사용자(클래스)가 구현해야하는 메소드 시그니처 정의
클래스 상속과 사용법이 같음 extend가 아닌 interface 키워드 사용
다중상속 지원 extend로는 안댐 (메소드 시그니처만)
Stateful 가능 (필드, 메서드 가질 수 있음) 안되 stateless
유연함 명확한 contract를 정의

🤼베프 b e s t  p r a c t i c e

1. 상태를 가질수 있긴 하지만 최소화하는게 조타 😥

2. 하나의 기능을 잘 수행하는게 베스토 👍

3. 이름 깔꿈하게 "역할Mixin" 같은 형식으로

4. 남발하지 말자... 클래스를 처음부터 잘 설계하자? 😗

 

구럼 오늘도 객체로운 생활을 영유합싀다 

'E | ngineering' 카테고리의 다른 글

Airflow Design Patterns  (0) 2025.03.25
위상 정렬과 DAG  (0) 2025.03.12
B쁠러쓰마이나쓰Tree  (0) 2025.03.05
데이터베이스 커서와 컬럼형 데이터베이스  (0) 2025.02.26
파이똔 asyncio  (0) 2025.02.24