다형성_다형적 참조
이번엔 OOP(객체 지향 프로그래밍)의 특징
캡슐화
상속
추상화
다형성
중, 다형성에 대해 알아보자.
다형성(Polymorphism)이란?
다양한 형태. 여러 형태. 프로그래밍에서 다형성이라 함은, 한 객체가 여러 타입의 객체로 취급될 수 있는 성질을 뜻한다.
보통 하나의 객체는 하나의 형태로 고정 돼 있다. 그러나 여기에 다형성이란 성질이 접목되면, 하나의 객체가 다양한 타입으로 사용될 수 있게 된다.
다형적 참조
클래스 간에 상속 관계가 존재한다면, 상위(Super)는 하위(Sub) 타입을 참조할 수 있게 된다.
여기서 상속 관계라 함은,
- 클래스 & 클래스 상속(extends)
- 클래스 & 인터페이스(implements)
- 인터페이스 & 인터페이스 (implements) 등이다.
아래는 내가 현재 이해하고 있는 참조형 변수에 주소값이 저장되는 원리이다.
1. new 생성자() 를 통해 힙 메모리 영역에 인스턴스가 생성되고, 그 메모리 주소값을 변수에 대입한다.
2. 이 때, 인스턴스의 타입은 참조형 변수의 타입과 일치해야 한다.
여기까지가 참조형 변수에 인스턴스의 주소값이 담기는 기본 원리이다.
앞서 말했듯 상속 관계에 있는 객체라면,
상위타입 참조변수에 하위타입 인스턴스의 주소값을 담을 수 있다.
= 상위타입은 하위 타입을 (주소값을 통해) 참조할 수 있다.
사각형 사각형1 = new 직사각형();
사각형 사각형2 = new 정사각형();
직사각형 사각형3 = new 정사각형();
많은 사람들에게
'직사각형은 사각형인가?', '정사각형은 사각형인가?' 하고 질문하면
'그렇다' 고 할 것이다.
그렇다. 직사각형도, 정사각형도 사각형이다.
다만, 직사각형, 정사각형은 사각형이 같는 특징을 가지면서, 서로 다른 형태를 띈다.
| 사각형 | 직사각형 | 정사각형 | |
| 변의 수 | 4 | 4 | 4 |
| 변의 길이 | 무관 | 마주보는 두 변의 길이가 같아야 함. | 마주보는 두 변의 길이가 같아야 함. 4 변의 길이가 같아야 함. |
| 각의 개수 | 4 | 4 | 4 |
| 각도 | 내각의 합 = 360 | 내각의 합 = 360 한 내각의 각도 = 90 |
내각의 합 = 360 한 내각의 각도 = 90 |
직사각형, 정사각형을 사각형이라 한들, 아무도 뭐라 하지 않을 것이고,
각이 4개, 변의 수가 4개
내각의 합이 360 임을 부정하지 않을 것이다.
선배 - 사각형 하나만 가져다 주세요.
눕이 - 예. (헐레벌떡 정사각형 하나를 찾아왔다)
선배 - 아 미안한데, 정사각형으로 좀 부탁해요.
눕이 - 이 사각형 (정사각형) 입니다.
선배 - 오? 고마워요. 직사각형도 있음 좋을 것 같은데?
눕이 - 정사각형이 직사각형이기도 합니다.
선배 - 아 그러네. 그럼 됐어요. 고마워요.
(대체 사각형이 어디 필요한지는 모르겠지만, 논리적 모순은 없다. .. 없다!ㅎㅎ)
이렇게 하나의 타입(사각형)으로 다양한 연출?과 사용이 가능하도록 하는 성질을 다형성 이라 한다.