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