더북(TheBook)

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