이번 시간에는 다형성(Polymorphism)이라는 주제에 대해서 알아보자. 다형성이란 하나의 메소드나 클래스가 있을 때 이것들이 다양한 방법으로 동작하는 것을 의미한다. 키보드의 키를 통해서 비유를 들어보겠다. 키보드의 키를 사용하는 방법은 '누른다'이다. 하지만 똑같은 동작 방법의 키라고 하더라도 ESC는 취소를 ENTER는 실행의 목적을 가지고 있다. 다형성이란 동일한 조작방법으로 동작시키지만 동작방법은 다른 것을 의미한다.
다형성은 객체나 인터페이스 또는 추상과 같이 철학적인 느낌을 자아내는 용어이다. 그래서 이 주제 또한 철학적이고 현학적인 느낌으로 여러분을 혼란스럽게 할 수 있으나 그것은 학습에 도움이 되지 않는다. 다형성이라는 것이 코드 상에서는 구체적으로 어떤 모습으로 드러나는지에 집중하자. 우선 코드를 보자.
overloading과 다형성
참고로 overloading이 다형성인지 아닌지에 대해서는 이견이 존재하는 것으로 보인다.
오버로딩은 가장 이해하기 쉬운 다형성의 예라고 할 수 있다. 아래의 코드를 보자.
package org.opentutorials.javatutorials.polymorphism;
class O{
public void a(int param){
System.out.println("숫자출력");
System.out.println(param);
}
public void a(String param){
System.out.println("문자출력");
System.out.println(param);
}
}
public class PolymorphismOverloadingDemo {
public static void main(String[] args) {
O o = new O();
o.a(1);;
o.a("one");
}
}
클래스 O의 메소드 a는 두개의 본체를 가지고 있다. 동시에 두개의 본체는 하나의 이름인 a를 공유하고 있다. 같은 이름이지만 서로 다른 동작 방법을 가지고 있기 때문에 오버로딩은 다형성의 한 예라고 할 수 있다.