• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

다형성(?)에대해 질문드립니다.

22.05.22 18:25 작성 조회수 83

0

public class Polymorphism {
public static void main(String[] args) {
// 성기사 객체 생성
HolyKnight uther = new HolyKnight("우서", 180);

// 탱커로서의 역할 수행
Tanker t = uther;
t.increaseHp();

// 힐러로서의 역할 수행
Healer h = uther;
h.heal();
uther.increaseHp();
uther.heal();
}
}

 

인터페이스인 Healer와 Tanker를 상속받는 HolyKnight클래스가 있습니다.

HolyKnights가 상속을 받고 그 클래스에서 재정의를 하기에 동작의 실질적 형태는 HolyKnight가 갖고있게 되는건데 굳이 탱크,힐러의 인터페이스 객체 h와 t를 만들어서 그것을 가르켜서 HolyKnights 의 재정의된 메소드를 실행시킬 이유가 있을까요??

원랜 메서드를 재정의한 클래스의 객체하나만 선언해서 그 객체를 참조해 재정의된 interface들을 실행 시킬 수 있었는데 각 인터페이스마다 객체를 만들면 동작은 똑같은데 코드만 늘어나는 경우인게 아닌가 해서 질문드립니다.

(HolyKnights 참조변수는 탱크와 힐러의 인터페이스에 접근가능 하지만

힐러와 탱크인터페이스의 참조변수를 만들어 실행시키면 힐러는 탱크를 탱크는 힐러의 

메서드를 사용할 수 없는 장점?때문일까요??)

 

 

 

답변 1

답변을 작성해보세요.

2

제시된 코드만 보았을 때는
인터페이스를 나누는 것이
낭비로 느껴질 수 있습니다. 👍

인터페이스는
프로젝트의 규모가 커질 수록
효율성이 증가하기 때문인데요.

그래서 지금은,
인터페이스의 개념과 사용법은 이렇다 정도로
정리하시고

앞으로 더 배우게될 고급 스킬들,
(ex: 스프링 프레임워크, 디자인 패턴, 소프트웨어 아키텍처 등)

이를 위한
기초 체력훈련이다 생각하면 좋을 것 같습니다

 

PS.

연극으로 비유하자면,
인터페이스는 연극의 특정 역할과 같습니다.

서로 다른 배우 A, B, C가
해당 역할(interface)을 훈련(implements)했다면

상황에 따라 배우를 다변화 할 수 있는
유연성(flexiablity)을 가지게 됩니다.

 

또 다른 예로 USB를 들수 있는데요.
카메라, 핸드폰, 태플릿 PC 등 다양한 기기(object)들이
공통된 USB(interface)를 채택(implements)하기에
하나의 USB포트로 다양한 기기와 소통할 수 있죠.

인터페이스는
이러한 유연성과 다형성을
가능하게 합니다.