#04 - Connecting Objects: Understanding Object Relationships in Python
개요
파이썬에서 독립적인 객체들이 메모리 내에서 어떻게 상호작용하고 관계를 맺는지 설명하며, 네 가지 핵심 객체 관계(Dependency, Association, Aggregation, Composition)를 통해 복잡한 실제 세계를 모델링하는 방법을 제시합니다.
주요 내용
- 객체 관계 스펙트럼: 객체 관계는 주로 결합 강도(coupling strength)와 생명주기 의존성(lifecycle dependency)에 따라 구분됩니다.
- Dependency (Uses-a): 가장 약한 관계로, 한 객체(A)가 다른 객체(B)를 메서드 인자 등으로 일시적으로 사용할 때 발생합니다. 객체 A는 객체 B에 대한 영구적인 참조를 저장하지 않습니다.
- Association (Knows-a): 두 객체가 서로 통신하지만, 어느 쪽도 다른 쪽을 소유하지 않는 구조적 연결입니다. 두 객체 모두 독립적인 생명주기를 가집니다.
- Aggregation (Has-a, Weak Ownership): 전체-부분 관계를 나타내는 연관 관계의 특수한 형태로, 컨테이너 객체가 구성 객체들의 참조를 가지지만, 컨테이너가 파괴되어도 구성 객체들은 독립적으로 존재합니다.
- Composition (Has-a, Strong Ownership): 가장 강한 관계로, 부모 객체가 자식 객체의 생명주기를 소유하고 관리합니다. 자식 객체는 부모 객체 내에서 인스턴스화되며, 부모 없이는 존재할 수 없습니다.
- Python 예시: 각 관계 유형에 대한 Python 코드 예시를 통해 Dependency (Printer와 Report), Association (Student와 Teacher), Aggregation (Book과 Library), Composition (BuildingRoom과 Building)을 구체적으로 보여줍니다.
- University Management System 예제: 실제적인 University Management System 아키텍처를 통해 네 가지 객체 관계를 통합하여 구현하는 과정을 단계별로 설명하고, 코드를 제공하며 실행 결과를 보여줍니다. 이 예제에서는 University가 Department를 Composition하고, Department가 Professor를 Aggregation하며, Student가 Professor를 Association하고, TranscriptPrinter가 Student를 Dependency로 사용하는 관계를 보여줍니다.
- 라이프사이클 확인: Composition의 경우 부모 객체(University)가 삭제되어도 Aggregation된 객체(Professor)는 독립적으로 메모리에 남아 있음을 확인합니다.
시사점
이 네 가지 객체 관계를 이해하고 활용하면, 모든 것을 상속 계층 구조에 억지로 맞추지 않고도 복잡한 실제 세계 도메인을 효과적으로 모델링할 수 있으며, 파이썬에서의 객체 지향 설계 능력을 향상시킬 수 있습니다.
원문을 불러오는 중...
댓글
GitHub Discussions