다형성이란 한 타입의
참조변수
를 통해여러 타입의 객체를 참조
할 수 있도록 만든 것.
객체
를 어느참조변수
에 담을지가 목적에 따라 달라질 수 있다.
따라서 객체를 목적에 맞게 다르게 쓸 수 있다.
* 예시) 계층구조
Object(a)
|
Employee(b)
| |
Engineer(c) Manager(d)
ㅁ e = new Engineer();
ㅁ 에 들어갈 수 있는 타입은 Engineer
, Employee
, Object
세 가지.
사용할 수 있는 메서드는,
Engineer -> e.a, e.b, e.c
Employee -> e.a, e.b
Object -> e.a
즉, 담을 참조변수의 타입에 따라
메서드 사용범위가 달라진다.
위의 계층구조에서,
Employee e = new Engineer();
로 선언하면 e의 타입은 무엇이고, 사용할 수 있는 메서드는 무엇일까?
우선 e의 타입은 Engineer
이다. Employee
라는 그릇에 담았을 뿐이고, 따라서 참조변수 e
가 사용할 수 있는 메서드는 Employee
가 가진 메서드이다.
하지만 예외적으로 자바는 재정의된 메서드(Override)
에 대해서는 하위 메서드의 메서드를 적용해준다. 이것을 동적 바인딩
이라고 한다.
런타임에 자바는 Engineer
와 Employee
의 관계에 대해 알고 있고, Engineer
에 재정의된 메서드가 있다면 그것을 인지하고 반영해준다.
당연히 부하가 걸리고 실행속도는 느려지겠지만, 객체지향 다형성의 꽃
이라고 볼 수 있다.
정말 유익한 글이었습니다.