더북(TheBook)

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()
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.