Computer 클래스는 인스턴스 멤버 cpu를 가집니다. 생성자에서 CPU 객체를 생성하여 멤버 cpu에 할당합니다(#1). 즉, Computer 객체가 생성될 때 CPU 객체도 같이 만들어졌다가 Computer 객체가 사라질 때 CPU 객체도 함께 사라집니다. 현실 세계에서도 마찬가지입니다. 컴퓨터가 만들어지면서 CPU도 함께 만들어지며 컴퓨터가 폐기될 때 CPU도 함께 폐기되지요. Computer 객체와 CPU 객체는 객체의 생명주기가 같고 컴퓨터가 CPU를 소유하고 있는 모양새입니다. 굉장히 강한 관계를 맺고 있는데, 이러한 관계를 합성이라고 합니다.

    컴퓨터와 CPU의 관계를 그림으로 나타내면 그림 7-2와 같습니다.

    132

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