믹스인과 컴포지션: 유연한 객체 설계 기법
믹스인과 컴포지션: 유연한 객체 설계 기법 객체 지향 프로그래밍에서 상속은 강력한 도구이지만, 때로는 과도한 상속 계층 구조나 코드 중복 문제로 인해 유지보수가 어려워질 수 있습니다. 이때, 믹스인(Mixin)과 컴포지션(Composition) 기법을 활용하면 보다 유연하고 확장 가능한 설계를 구현할 수 있습니다. 이번 포스팅에서는 믹스인과 컴포지션의 개념, 상속과의 차이점, 그리고 실제 사례를 통해 적용 방법을 자세히 설명드리겠습니다. 믹스인이란? 믹스인은 클래스 간에 공통 기능을 재사용할 때 사용하는 기법입니다. 믹스인 클래스는 독립적인 객체로 사용되기보다는 다른 클래스에 기능을 '섞어 넣는' 용도로 사용됩니다. 즉, 믹스인 클래스는 특정 기능만을 제공하며, 여러 클래스에 걸쳐 공통적으로 사용될 수 있습니다. 믹스인의 주요 특징 단일 책임 원칙 준수: 믹스인은 특정 기능(예: 로깅, 데이터 직렬화 등)을 독립적으로 제공하여, 각 클래스가 여러 책임을 갖지 않도록 합니다. 코드 중복 제거: 여러 클래스에 동일한 기능이 필요할 때, 믹스인 클래스를 상속받아 중복 코드를 제거할 수 있습니다. 다중 상속과의 결합: 믹스인은 주 클래스와 함께 다중 상속을 통해 쉽게 통합할 수 있으므로, 복잡한 기능을 분리하여 관리할 수 있습니다. 믹스인 활용 예제 다음은 로깅 기능을 제공하는 믹스인 클래스를 정의하고, 이를 다른 클래스에 결합하는 예제입니다. class LoggingMixin: def log(self, message): print(f"[LOG] {message}") class DataProcessor(LoggingMixin): def process(self, data): self.log("데이터 처리를 시작합니다.") # 데이터 처리 로직 수행 processed = [d * 2 for d in data] ...