Programming/Java, Spring

[JAVA] 다형성(polymorphism)이란??

Juun 2022. 6. 1. 14:10
반응형

다형성

다형성은 상속과 함께 객체지향의 핵심 개념 중 하나이다.

상속과도 깊은 관계가 있으므로 상속에 대해서도 잘 알고 있어야 한다!!

2022.05.28 - [Programming/Java] - [JAVA] 상속(inheritance)이란? / 상속의 특징 / 상속의 장점 / 예시

 

[JAVA] 상속(inheritance)이란? / 상속의 특징 / 상속의 장점 / 예시

상속이란?? 상속은 객체지향의 핵심 개념 중 하나!! 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다. 두 클래스를 조상과 자손으로 관계를 맺어주는 것 상속의 특징 자손은 조상

puenti.tistory.com


다형성(Polymorphism)이란??

다형성이란, 여러가지 형태를 가질 수 있는 능력이다!

객체지향적인 관점에서 보면 하나의 참조변수로 여러 타입의 객체를 참조하는 것이다!!

→ 조상타입의 참조변수로 자손타입의 객체를 다룰 수 있는 것이다!!

 

이해를 돕기 위해 아래의 예제를 보자

조상클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있도록 했다.

예제1

class TV {
	boolean power;
    int channel;
    
    void power(){ power = !power; }
    void channelUp() { ++channel; }
    void channelDown() { --channel; }
}

class CaptionTv extends Tv {
	String text; // 캡션을 보여주기 위한 문자열
    void caption() { /*생략*/ }
}

위 클래스의 관계를 살펴보자

클래스 Tv와 CaptionTv는 서로 상속 관계이다.

 

Tv t = new Tv();
CaptionTv c = new CaptionTv();
Tv t = new CaptionTv();

인스턴스 타입과 참조변수의 타입이 일치하는 것이 보통이지만, 서로 상속관계에 있는 클래스일 경우

조상 클래스 타입의 참조변수로 자손 클래스의 인스턴스를 참조하도록 하는 것도 가능하다.


예제2

CaptionTv c = new CaptionTv();
Tv t = new CaptionTv();

참조변수는 다르지만 같은 인스턴스를 참조할땐 어떨까?

 

이 경우는 실제 인스턴스가 CaptionTv라 할지라도, 참조변수 t로는 CaptionTv의 모든 멤버를 사용할 수 없다.

→ Tv타입의 참조변수로는 CaptionTv인스턴스 중에서 Tv 클래스의 멤버들만 사용 할 수 있다. 

→ 생성된 CaptionTv 인스턴스의 멤버 중에 Tv 클래스에 정의 되지 않은 멤버인 text와 caption()은 사용이 불가능하다!

 

※ 둘 다 같은 타입의 인스턴스지만 참조변수의 타입에 따라 사용할 수 있는 멤버의 개수가 달라진다!!!

 


예제3

CaptionTv c = new Tv();

자손타입 참조변수로 조상타입의 인스턴스를 참조하는 경우

 에러 발생, 불가능!

 실제 인스턴스인 Tv의 멤버 개수보다 참조변수 c가 사용할 수 있는 멤버 개수가 더 많기 때문.

 

※ 참조변수가 사용할 수 있는 멤버의 개수는 인스턴스의 멤버 개수보다 같거나 적어야 한다!!

 

 

 

 

 

반응형