티스토리 뷰

다형성 (Polymorphism)

 

다형성?

다형성은 “형태가 다양하다” 라고 해석할 수 있는데, 예로 나는 남자이고 누군가에게는 친구이며 직원이다. 다양한 역할로 불리고 있다. 또한 나는 인간이며 영장류 이면서 포유류이다. 말 그대로 여러가지 형태로 불려질 수 있다.

이와 같이 다형성은 어떤 객체가 여러가지 형태로 불려질 수 있는 것이다.

 

 

예시

냉방기기(인터페이스)

 

선풍기( 구현체 )

 

main_01()

 

 

예제를 통해 확인 할 수 있는 것은 main 01, 02의 똑같은 타입의 두 객체는 같은 시그니처를 가진 메서드를 호출 했지만 서로 다른 결과를 가져온다. 타입과 상관 없이 그 결과는 new 키워드를 통해 생성된 실제 그 객체의 메서드가 호출되었다.

실제 생성한 인스턴스와 다른 타입으로 메서드를 호출 하더라도, 실제 생성한 인스턴스에 구현된 메서드를 호출하는 것이 다형성이다.

 

 

다형성의 목적

 

 

위 코드를 다시보면 main() 은 컴파일 시점에는 냉방기기의 실제 객체가 에어컨인지, 선풍기인지 알 수는 없었던 상황이다. 실제로 ‘냉방이’가 호출한 ‘냉방()’ 메서드가 결정된 것은 런타임 단계에서다. 이와 같이 실제 인스턴스가 런타임 단계에서 결정되는 것을 동적 바인딩 이라고 하고, 메서드의 경우 동적 디스패치 라고 한다.

결국 다형성은 정적 타입 언어인 자바가 동적 타입 언어처럼 런타임 까지 타입 선택을 미뤄 유연한 코드 작성을 가능하게 한다.

 

댓글