더북(TheBook)

HeroMonster 클래스의 constructor() 메서드를 봅시다. 둘 다 super()라는 함수를 호출하고 있습니다. super() 함수는 부모 클래스(Unit)를 의미합니다. 즉, 부모 클래스의 constructor() 메서드에 인수를 전달하는 함수입니다. super() 함수가 호출되면 부모 클래스에서 자식 클래스 대신 name, hp, att 속성을 this에 입력합니다. 이때 Hero 클래스의 maxHp 속성은 부모 클래스에는 존재하지 않는 속성이므로 super() 함수 아래에 따로 적습니다. 간단히 말해 공통 속성을 super() 함수로 처리한다고 보면 됩니다.

Hero 클래스의 attack() 메서드도 살펴봅시다. super.attack()으로 호출하는데, 이것은 부모 클래스의 attack() 메서드를 호출하는 것과 같습니다. attack() 메서드 내부에서 super.attack()으로 호출한 뒤 다른 코드를 작성하면 부모 클래스의 메서드를 호출한 후 자신만의 작업을 할 수 있습니다. super.attack()을 호출하지 않고 다른 코드를 작성하면 부모 클래스와는 전혀 다른 작업을 할 수 있습니다.

Monster 클래스는 Unit 클래스를 상속하지만 Unit 클래스와 차이가 전혀 없습니다. constructor() 메서드도 부모 클래스의 메서드를 그대로 사용하고, attack() 메서드도 부모 클래스의 attack() 메서드를 그대로 호출합니다. 이처럼 부모와 하는 일이 같은 경우에는 메서드를 생략할 수 있습니다.

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