다형성(polymorphism)
다형성(polymorphism)은 하나의 객체가 여러 타입을 가질 수 있음을 의미하지만, 좀 더 정확하게 말씀드리자면
상속받을(부모) 타입 참조변수로 자식 타입 객체를 다루는 것을 의미합니다!
우리는 그동안 Example E = new Example(); 과 같이 클래스 타입과 인스턴스 타입을 일치해서만 사용해왔습니다.
그런데 사실 아래 코드처럼 부모 타입의 참조변수로 자식 타입의 인스턴스를 다루다는 것이 가능합니다.
하지만 그 역인 자식 타입의 참조변수로 부모 타입의 인스턴스를 다루는 것은 불가능합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
class ParentExam {
int a = 1;
int b;
}
class ChildExam extends ParentExam {
int c;
}
public class polymorphismExam {
public static void main(String[] args) {
ParentExam P = new ChildExam();
System.out.println(P.a);
}
}
|
cs |
그 이유를 말씀드리기 전에 타입이 일치됐을 때와 불일치 됐을 때의 차이를 간단한 그림을 통해 보여드리겠습니다.

왼쪽 그림은 참조변수 Child를 통해 즉 ChildExam Child = new ChildExam(); 타입 일치를 시켜준 우리가 사용한 일반적인 경우이고,
오른쪽 그림은 참조변수 P를 통해 즉 ParentExam P = new ChildExam(); 부모 타입 참조 변수로 자식 타입 인스턴스를 다루는
타입 불일치를 시켜준 경우입니다.
이때 타입 일치를 시켜준 경우에는 상속을 받았기 때문에 부모 클래스보다 멤버의 개수가 같거나 많습니다. 따라서 자신의 모든 멤버를
사용할 수 있겠죠? 반대로 타입 불일치 된 경우에는 부모 클래스를 다룰 수 있는 참조변수 P를 통해 자식 인스턴스를 가리키고 있기
때문에 자식 인스턴스에서 선언된 멤버 변수 c를 사용할 수 없습니다. 이해가 어려우시다면 리모컨을 상상하시면 쉽습니다!
우리는 세 가지의 기능을 이용할 수 있는 리모컨(Child)과 그 제품(ChildExam)이 일치하는 경우에 세 가지의 모든 기능을
다룰 수 있는 제품과 그에 맞는 세 가지 버튼을 가진 리모컨이 있으므로 문제없이 모두 사용 가능합니다.
하지만 두 가지의 기능을 이용할 수 있는 리모컨(P)이라면 그 제품에 기능이 세 가지더라도 두 가지 기능만 사용할 수 있는 것입니다.
그렇다면 왜 이렇게 적은 기능을 사용하는데 굳이 다형성이란 개념이 필요한 것일까요? 또 장점은 무엇일까요?
그에 대한 답은 이후 보충 글에서 다루도록하겠습니다!
'java > 객체지향' 카테고리의 다른 글
18-2. 다형성의 의의 및 장점 (1) | 2023.01.20 |
---|---|
18-1. 참조변수 형변환, instanceof 연산자 (2) | 2023.01.20 |
17. 캡슐화(encapsulation) (0) | 2023.01.19 |
16-1. 제어자(modifier) (0) | 2023.01.18 |
16. 접근 제어자(access modifier) (0) | 2023.01.18 |