의식의 르흠: 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 |