Computer 클래스는 인스턴스 멤버 cpu를 가집니다. 생성자에서 CPU 객체를 생성하여 멤버 cpu에 할당합니다(#1). 즉, Computer 객체가 생성될 때 CPU 객체도 같이 만들어졌다가 Computer 객체가 사라질 때 CPU 객체도 함께 사라집니다. 현실 세계에서도 마찬가지입니다. 컴퓨터가 만들어지면서 CPU도 함께 만들어지며 컴퓨터가 폐기될 때 CPU도 함께 폐기되지요. Computer 객체와 CPU 객체는 객체의 생명주기가 같고 컴퓨터가 CPU를 소유하고 있는 모양새입니다. 굉장히 강한 관계를 맺고 있는데, 이러한 관계를 합성이라고 합니다.
컴퓨터와 CPU의 관계를 그림으로 나타내면 그림 7-2와 같습니다.
그림 7-2 컴퓨터와 CPU는 합성 관계
그림 7-2의 Computer 클래스와 CPU 클래스는 HAS-A 관계고 채워진 다이아몬드 모양은 합성을 나타냅니다. 이제 경찰과 총의 관계를 볼까요?
코드 7-5 oop2/oop2_1/aggregation.py ①
class Gun: def _ _init__(self, kind): self.kind = kind def bang(self): print('bang bang!') class Police: def _ _init__(self): self.gun = None #1 def acquire_gun(self, gun): #2 self.gun = gun def release_gun(self): #3 gun = self.gun self.gun = None return gun def shoot(self): if self.gun: self.gun.bang() else: print("Unable to shoot")