더북(TheBook)

실행해 보니 두 유닛 모두 올바르게 이동합니다. 지상 유닛인 호버 바이크는 이동한다고 표현하고, 공중 유닛인 우주 순양함은 날아간다고 표현하고요.

다음 그림을 보면 상속 관계는 변함이 없지만 Unit 클래스에 move() 메서드를 정의함으로써 Unit 클래스로 생성한 객체들은 모두 move() 메서드를 사용해 지상에서 이동할 수 있습니다. 하지만 공중 공격 유닛인 FlyableAttackUnit 클래스로 생성한 객체들은 지상 이동이 아닌 공중에서 비행합니다. 따라서 Flyable 클래스의 fly() 메서드를 사용해야 합니다. 그런데 유닛이 많아지면 개별적으로 관리하기가 어려우므로 move() 메서드를 오버라이딩해서 재정의한 메서드에서 fly()를 호출하도록 바꿨습니다. 이렇게 하면 같은 move() 메서드를 호출하더라도 AttackUnit 클래스로 만들어진 유닛은 부모 클래스인 Unit 클래스의 move() 메서드를, FlyableAttackUnit 클래스로 만들어진 유닛은 오버라이딩한 FlyableAttackUnit 클래스의 move() 메서드를 호출하게 됩니다.

그림 9-4 메서드 오버라이딩

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.