#04 - 객체 연결하기: Python에서 객체 관계 이해하기
요약
Python에서 객체 간의 상호작용을 정의하는 네 가지 핵심 관계인 의존, 연관, 집합, 합성 관계를 설명합니다. 결합 강도와 생명주기 의존성에 따른 차이를 이해하여 복잡한 시스템 아키텍처를 설계하는 방법을 다룹니다.
핵심 포인트
- 의존 관계(Dependency): 메서드 매개변수 등으로 일시적으로 사용하는 가장 약한 관계
- 연관 관계(Association): 두 객체가 독립적인 생명주기를 가지며 통신하는 구조적 연결
- 집합 관계(Aggregation): 전체-부분 관계이나 구성 요소가 독립적으로 생존하는 약한 소유권
- 합성 관계(Composition): 부모가 자식의 생명주기를 관리하는 강한 소유권 관계
4일 차에 오신 것을 환영합니다! 지금까지 우리는 개별 클래스, 캡슐화 (Encapsulation), 그리고 상속 계층 (Inheritance hierarchies)에 집중해 왔습니다. 오늘은 독립적인 객체들이 메모리 내에서 어떻게 상호작용하고 서로 관계를 맺는지 탐구함으로써 **시스템 아키텍처 (System architecture)**의 세계로 들어갑니다.
이 네 가지 핵심 관계를 이해하면 모든 것을 경직된 상속 트리 (Inheritance trees)에 강제로 끼워 맞추지 않고도 복잡한 현실 세계의 도메인을 모델링할 수 있습니다.
1. 관계의 스펙트럼 📊
객체 관계는 주로 **결합 강도 (Coupling strength)**와 생명주기 의존성 (Lifecycle dependency) (한 객체가 다른 객체의 생성과 소멸을 제어하는지 여부)에 따라 달라집니다.
┌─────────────────────────────────────────────────────────────────────────────┐
│ 객체 관계 (OBJECT RELATIONSHIPS) │
├─────────────┬─────────────┬──────────────────────┬──────────────────────────┤
...
2. 4가지 관계 분석 🛠️
1. 의존 관계 (Dependency, "Uses-a")
가장 약한 관계입니다. 객체 A가 특정 작업을 완료하기 위해 객체 B를 일시적으로 사용합니다 (예: 메서드의 매개변수로 사용). 객체 A는 객체 B에 대한 지속적인 참조를 저장하지 않습니다.
class Printer:
def print_document(self, content: str) -> None:
print(f"🖨️ Printing: {content}")
...
2. 연관 관계 (Association, "Knows-a")
두 객체가 서로 통신하지만, 어느 쪽도 상대방을 소유하지 않는 구조적 연결입니다. 두 객체 모두 독립적인 생명주기를 가집니다.
class Student:
def __init__(self, name: str):
self.name = name
...
3. 집합 관계 (Aggregation, "Has-a" — 약한 소유권)
전체-부분 (Whole-to-part) 관계를 나타내는 연관 관계의 특수한 형태입니다. 컨테이너 객체가 구성 요소 객체에 대한 참조를 보유하지만, 컨테이너가 파괴되더라도 구성 요소들은 독립적으로 계속 존재합니다.
class Book:
def __init__(self, title: str):
self.title = title
...
4. 합성 관계 (Composition, "Has-a" — 강한 소유권)
가장 강력한 관계입니다. 부모 객체가 자식 객체의 생명주기(lifecycle)를 소유하고 관리합니다. 자식 객체는 부모 객체
내부에서 인스턴스화되며, 부모 객체 없이는 존재할 수 없습니다. 부모 객체가 파괴되면 모든 자식 컴포넌트도 함께 파괴됩니다.
class BuildingRoom:
def __init__(self, room_number: str):
self.room_number = room_number
...
3. 실습 과제: 대학교 관리 시스템 (University Management System) 🎓
네 가지 객체 관계를 하나의 응집력 있는 아키텍처로 결합한 완전한 **대학교 관리 시스템 (University Management System)**을 함께 살펴보겠습니다.
┌─────────────────────────────────────────────────────────────────────────────┐
│ UNIVERSITY SYSTEM ARCHITECTURE │
└─────────────────────────────────────────────────────────────────────────────┘
...
1단계: 작업 공간 초기화
uv init oop_day4 && cd oop_day4
touch university_system.py
2단계: university_system.py 구현
# university_system.py
from typing import List, Optional
...
3단계: 실행 및 검증
uv run university_system.py
출력 요약
📚 [Aggregation] Donald Knuth joined the Computer Science Department
📚 [Aggregation] Leonhard Euler joined the Mathematics Department
...
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기