본문 바로가기
프로그래밍 언어/자바의 정석 기초편

자바의 정석 기초편 ch7-23 다형성

by life grow 2022. 9. 2.

다형성(많을 다, 형태 형)

- 여러 가지 형태를 가질 수 있는 능력(사전적 정의)

- 조상 타입 참조 변수로 자손 타입 객체를 다루는 것(실제)

 

다형성을 꼭 이해해야 한다.

6~7장 다형성까지 꼭 여러 번 반복을 하자.

다형성을 이해 못 하면 뒤에 다른 진도를 이해할 수 없다.

 

원래 Tv t = new Tv(); 

참조변수 타입 Tv와 객체 Tv();가 일치해야 했다.

 

그러나 다형성으로 이제 Tv t = new SmartTv(); 타입 불일치가 가능하다.

Tv리모컨으로 SmartTv제품을 다루는 게 가능해진다.

조상 타입 참조변수 Tv t로 자손 타입 객체 SmartTv();를 다룰 수 있다.

단, 조상, 자손인 관계에서만 가능하다.

 

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

 

SmartTv s  = new SmartTv();

SmartTv리모컨으로 SmartTv객체를 다룬다.

SmartTv 타입 리모컨에는 버튼이 7개이다.

SmartTv 인스턴스는 Tv멤버 5개 + SmartTv 멤버 2개 총 7개의 멤버를 가지고 있다.

SmartTv 리모컨으로는 기능 7개를 다룰 수 있다. 모든 기능 사용 가능

 

Tv t = new SmartTv();

Tv리모컨에는 버튼이 5개밖에 없다.

그래서 실제 SmartTv()가 7개의 멤버를 갖고 있지만

Tv리모컨이 쓸 수 있는 건 5개밖에 못쓴다.

아무리 멤버 7개를 갖고 있어도 리모컨의 버튼 개수만큼만 기능을

사용할 수 있다.

 

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

 

Tv t = new SmartTv(); //ok

조상 5개 < 자손 7개 //ok

버튼 5개, 기능 7개인 경우는 가능하다.

있는 기능을 안 쓰는 건 괜찮다.

 

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

자손 7개 > 조상 5개 //에러

버튼은 7개, 기능은 5개인 경우는 안된다.

실제 가지고 있는 멤버 개수보다 리모컨 버튼이 많으면 안 된다.

왜냐하면 없는 멤버를 호출해서 에러가 나기 때문이다.