본문 바로가기
back-end/JAVA

31) 다형성(polymorphism)

by 모두의 향연 2021. 6. 9.
728x90
반응형

31) 다형성(polymorphism)

 

1. 다형성(많을 다/형태 형)

-여러 가지 형태를 가질 수 있는 능력

-'조상타입'의 참조변수로' 자손타입' 객체를 다루는 것★

기존 조상과 자손

이 클래스를 가지고 객체를 만들면

Tv t = new Tv(); //Tv객체

SmartTv s = new SmarTv();//SmartTv객체

객체와 타입이 일치되었다.

 

하지만, 다형성은

Tv t = new SmartTV(); //타입불일치

객체와 타입이 불일치가 된다. 

조상의 타입변수로 자손 타입 객체를 다루는 것이 '다형성'이다.

 

 

 

2. 객체와 참조변수의 타입이 일치할 대와 일치하지 않을 때의 차이

smartTv의 리모콘과 객체

smartTv의 리모콘은 7개의 버튼을 가지고 있다.

Tv로부터 상속받은 5개의 버튼과 smartTv의 버튼 2개 총 7개의 버튼이다.

리모콘도 smartTv리모콘이고, 객체도 smartTv니까 리모콘의 7개의 버튼을 모두 사용 가능하다.

 

Tv리모콘과 smartTv객체

Tv리모콘은 5개의 버튼을 가지고 있다. 

하지만 smarTv는 7개의 기능을 가지고 있다. 그럼 Tv리모콘으로는 5개의 기능밖에 접하지 못하게 된다.

아무리 기능이 7개를 가지고 있어도 5개밖에 사용을 못하게 된다.

그럼 2가지 기능이 있는데도 뻔히 사용하지 못하는데, 어떤 장점이 있는 걸까?

실제로 장점이 있다.

 

 

3. 자손타입의 참조변수로 조상타입의 객체를 가리킬 수 없다.

Tv t = new smartTv(); //허용

SmartTv s = new Tv();//에러

도식화

왼쪽 그림처럼 Tv리모콘으로는 5개의 버튼으로 smarTv객체에서 5개의 기능만 다루면 된다.

하지만, 오른쪽 그림처럼 smartTv리모콘의 7개의 버튼으로 Tv객체의 5개의 기능만 다루면 되지 않냐고 할 수 있는데, 

괜히 기능도 없는 버튼 클릭해서 에러가 나는 경우가 있다. 

소비자들이 smarTv리모콘을 사용하다가 버튼을 눌렀는데 Tv가 에러가 나면 얼마나 열 받겠나.

서비스센터에 기능도 없는 리모컨 버튼 만들어서 에러 나게 하냐고 전화 오고 난리 난다.

아예 버튼이 없어서 기능을 안 쓰면 괜찮은데, 기능도 없으면서 버튼 만들어놓으면 안 된다.

 

 

 

4. 정리

리모콘버튼개수<객체의 기능 //OK

리모콘버튼개수>객체의 기능 //에러

부등호만 외우세요.

 

 

 

<정리 퀴즈>

1. 참조변수의 타입은 인스턴스 타입과 반드시 일치해야 하나요?

   :아니요. 보통 일치하지만 일치하지 않을 수도 있습니다. 그게 다형성입니다.

2. 참조변수가 조상타입일 때와 자손타입일 때의 차이는?

   :참조변수로 사용할 수 있는 멤버의 개수가 다릅니다. 객체가 SmartTv일 경우-조상타입일땐 5개 사용 가능하고, 자손타입일 땐 7개 사용 가능합니다. 

3. 자손타입의 참조변수로 조상타입의 객체를 가리킬 수 있나요?

   :아니요. 허용되지 않습니다.

Tv t = new smartTv(); //허용

SmartTv s = new Tv();//에러

 

 

 

 

*유튜브 남궁성 선생님의 `자바의 정석`을 참고하여 만들었습니다*
*자세히 보고 싶은 분들은 유튜브 가서 보시면 됩니다*

728x90
반응형