-
자바의 다형성 이란?JAVA/Java 2020. 3. 30. 23:49
다형성에 대해서 알아보자. 다형성이란 하나의 메서드나 클래스가 있을 때 이것들이 다양한 방법으로 동작하는 것을 말한다.
키보드를 예로 비유를 해보자면 'ESC' 키도 'ENTER'키도 누른다는 push는 같지만 'ESC'는 취소를 'ENTER'키는 실행의 목적을 가지고 있는 것처럼 말이다.
자바를 예로 다형성을 설명하기 가장 쉬운 예는 오버로딩이 아닌가 싶다.
1. 오버로딩
오버 로딩은 같은 이름이지만 어떤 파라미터를 가지고 어떤 리턴 타입을 가지냐에 따라서 다른 메서드가 호출되는 방식이다. 역시 앞의 예와 같이 같은 이름 다른 동작이기에 다형성의 측면에서 볼 수 있는 것이다.
2. 오버 라이딩
클래스 B로 객체를 만드는데 데이터 타입이 A인 경우를 보자.
( 클래스 B를 인스턴스화 시킨 인스턴스를 obj 변수에 담고 obj 변수의 데이터 타입은 A라는 것을 뜻한다. )
실질적으로 클래스 B를 인스턴스화 하고 있지만 A의 행세를 하고 있는 셈이다. A에는 x() 메서드가 있기에 정상 실행이
되지만 y()는 실행되지 않는다. 실제 행세는 A이고 A 클래스에는 y 메소드가 없기 때문이다.
다음을 봐보자. 콘솔에는 클래스 B에 정의된 x가 찍히게 된다.
그리고 행세는 A 클래스에 행세를 하기 때문에 A에 정의돼있지 않은 y를 실행하면 에러를 발생한다. 클래스 B가 A 행세를 한다는 건 A에 메서드만을 실행할 수 있다는 것이고 B에 메서드는 실행할 수 없다.
하지만 B가 상위 클래스에 메서드를 방금과 같이 오버라이딩 했다면 인스턴스화 된 B에 메소드를 실행한다는 것
다음 그림을 봐보자. 슈퍼 클래스를 상속받은 서브 클래스들은 A 클래스의 x 메소드를 재정의 함으로써
각각 B.x 와 B2.x를 출력하게 된다.
즉 두 개의 다른 객체가 동일한 타입으로 존재하면서 메서드를 호출할때는 인스턴스화된 메소드에 있는 것을 호출한다는
점이 다형성이라고 할 수 있겠다.
즉 슈퍼클래스를 상속받은 서브클래스에서 슈퍼클래스의 메소드 안 로직들을 새롭게 정의하고 따라서 상속받은 여러 서브 클래스들이 같은 이름에 다른 기능을 하는 메소드를 정의하고 사용할 수 있으므로 다형성이다.
https://opentutorials.org/module/516/6127
'JAVA > Java' 카테고리의 다른 글
객체의 해시코드(hashCode())란 (0) 2020.05.19 JAVA의 Comparable, Comparator를 알아보자 (0) 2020.04.13 자바의 리플렉션 (0) 2020.03.28 자바의 추상 클래스와 인터페이스 (0) 2020.03.28 JVM (Java Virtual Machine) 의 구조 (0) 2020.02.22