다형성이란 한 타입의
참조변수를 통해여러 타입의 객체를 참조할 수 있도록 만든 것.
객체를 어느참조변수에 담을지가 목적에 따라 달라질 수 있다.
따라서 객체를 목적에 맞게 다르게 쓸 수 있다.
* 예시) 계층구조
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 에 재정의된 메서드가 있다면 그것을 인지하고 반영해준다.
당연히 부하가 걸리고 실행속도는 느려지겠지만, 객체지향 다형성의 꽃이라고 볼 수 있다.
정말 유익한 글이었습니다.