JAVA

다형성_다형적 참조

고민말고생각하는사람 2024. 2. 6. 02:15

이번엔 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 임을 부정하지 않을 것이다.

 

선배 - 사각형 하나만 가져다 주세요.

눕이 - 예. (헐레벌떡 정사각형 하나를 찾아왔다)

선배 - 아 미안한데, 정사각형으로 좀 부탁해요.

눕이 - 이 사각형 (정사각형) 입니다.

선배 - 오? 고마워요. 직사각형도 있음 좋을 것 같은데?

눕이 - 정사각형이 직사각형이기도 합니다.

선배 - 아 그러네. 그럼 됐어요. 고마워요.

 

(대체 사각형이 어디 필요한지는 모르겠지만, 논리적 모순은 없다. .. 없다!ㅎㅎ)

 

이렇게 하나의 타입(사각형)으로 다양한 연출?과 사용이 가능하도록 하는 성질을 다형성 이라 한다.