Police 객체가 만들어질 때 아직 Gun 객체를 가지고 있지 않습니다(#1). 이후 acquire_gun() 메서드를 통해 Gun 객체를 멤버로 가지게 됩니다(#2). HAS-A 관계입니다. 또한 release_gun() 메서드를 통해 가지고 있던 총을 반납할 수도 있습니다(#3). 이 두 메서드를 이용하면 총을 가진 경찰과 총을 가지고 있지 않은 경찰을 모두 표현할 수 있습니다.
경찰과 총의 관계는 분명 컴퓨터와 CPU의 관계와는 다릅니다. Police 객체가 생성될 때 Gun 객체는 생성되지 않고, Police 객체는 Gun 객체를 언제든지 반납할 수 있습니다. 즉, Police 객체와 Gun 객체는 생명주기를 함께 하지 않는 상대적으로 약한 관계입니다. 이러한 관계를 통합이라고 합니다. 이제 테스트 코드를 작성할 차례입니다.
코드 7-6 oop2/oop2_1/aggregation.py ②
if __name__ = = "__main__": p1 = Police() #4 print('p1 shoots') p1.shoot() print('') # p1은 아직 총을 소유하지 않음. revolver = Gun('Revolver') # p1이 revolver를 획득 p1.acquire_gun(revolver) #5 # 이제 p1이 총을 소유하므로 # revolver는 None이 된다. revolver = None print('p1 shoots again') p1.shoot() print('') # p1이 총을 반납했으므로 # 더 이상 총을 소유하지 않는다. revolver = p1.release_gun() #6 print('p1 shoots again') p1.shoot()