객체지향 프로그래밍(OOP)에서는 클래스를 재사용하는 대표적인 방법이 두 가지 있습니다.
바로 상속(Inheritance) 과 **구성(Composition)**입니다.
1. 상속 (Inheritance)
상속은 부모 클래스의 모든 속성과 메서드를 자식 클래스가 물려받는 방식입니다.
- 장점: 코드 재사용이 쉽고, 공통 기능을 공유 가능
- 단점: 원하지 않는 기능까지 모두 따라옴
관계: “is-a 관계”
- 예: Dog는 Animal이다
예시
class Robot:
def cal_add(self, a, b):
return a + b
class BixbyCal(Robot): # 상속
pass
b = BixbyCal()
print(b.cal_add(1, 2)) # 3
2. 구성 (Composition)
구성은 클래스 안에 다른 클래스의 인스턴스를 포함해 필요한 기능만 가져오는 방식입니다.
- 장점: 불필요한 기능은 제외하고, 필요한 것만 선택 가능
- 단점: 위임(delegate) 코드가 조금 늘어날 수 있음
관계: “has-a 관계”
- 예: BixbyCal은 Robot을 가진다
예시
class Robot:
def __init__(self, name, age):
self.name = name
self.age = age
def cal_add(self, a, b):
return a + b
class BixbyCal:
def __init__(self, name, age):
self.Robot = Robot(name, age) # Robot을 포함 (has-a)
def cal_add(self, a, b):
return self.Robot.cal_add(a, b) # 필요한 기능만 위임
b = BixbyCal("Bixby", 2)
print(b.cal_add(1, 2)) # 3
3. 언제 상속? 언제 구성?
- 상속: 부모와 자식이 “진짜로 is-a 관계”일 때
- 예: Dog는 Animal이다
- 구성: 단순히 기능을 재사용하고 싶을 때
- 예: BixbyCal은 Robot의 기능을 가지고 있다
정리하면
- 상속은 전체를 물려받는 강한 결합
- 구성은 필요한 것만 가져오는 느슨한 결합
따라서, 불필요한 기능까지 가져오고 싶지 않다면 **구성(Composition)**을 쓰는 게 더 깔끔합니다.
'파이썬 > 클래스와 객체 지향' 카테고리의 다른 글
| 파이썬 네임스페이스(namespace) 쉽게 이해하기 (0) | 2025.09.10 |
|---|---|
| 파이썬에서 __add__와 연산자 재정의 (1) | 2025.09.06 |
| 파이썬에서 @property와 setter의 올바른 사용법 (0) | 2025.09.06 |
| 추상 클래스 제대로 쓰기: 변수·일반 메서드·super() 재사용 (1) | 2025.09.01 |
| 추상화란 무엇인가?? (0) | 2025.09.01 |