반응형

지금까지는 다형성이 뭔지를 공부했다면, 이번시간에는 다형성의 장점에 대해서 공부할 것이다. 

우선, 다형성에 대해서 먼저 다시 정리를 해보자.

1. 조상타입의 참조변수로 자손 객체를 다루는 것.

2. 참조변수의 형변환 - 리모컨 바꾸기

3. instanceof 연산자 - 형변환 가능 여부 체크

앞서배운 이것들을 기억하고 있어야, 다음 설명들이 이해된다.

 


 

[다형성의 장점]

  • 다형적 매개변수
  • 하나의 배열로 여러종류 객체 다루기

먼저, 다형성의 첫번째 장점인 다형적 매개변수에 대해서 알아보자.

 

매개변수의 다형성

  • 참조형 매개변수는 메서드 호출시, 자신과 같은 타입 또는 자손타입의 인스턴스를 넘겨줄 수 있다.


매개변수가 참조형이면, 메서드 호출할 때, 이 매개변수로 자신과 같은 타입 또는 자손타입을 매개변수로 넘겨줄 수 있다.
이것이 어떤 장점이 되는지 알아보자.

 

예를 들어서 위의 코드처럼 Product클래스가 있다고 가정해보자.
price는 제품 가격, bonusPoint는 이 물건을 구매했을 떄 주는 보너스 점수를 의미한다.

그리고 Product의 자손으로 Tv, Computer, Audio등이 있다.

그리고 Buyer클래스가 있는데, 이것은 물건사는 사람을 표현한 것이다.
이 사람이 소유한 돈을 money, 물건산것에 대한 보너스점수를  bonusPoint라고 했다.

이렇게 되어 있을 때, 이사람이 물건을 살 수 있게,
buy라는 메서드를 추가하려고 한다.

근데, 이 buy메서드의 매개변수 타입을 Tv로 했다. 그러면, 매개변수로 들어올 수 있는 것은 new Tv(); 객체이다.
즉, Tv만 살 수있다.

다른물건을 사려면?
 이런식으로 매개변수 타입이 Computer인 것과, Audio인 것 등의 메서드가 있어야 한다.

메서드 이름이 같고, 매개변수 타입만 다르므로, "오버로딩"이다.

근데, 물건 종류가 굉장히 많다.
새로운물건이 계속나올때 마다 buy메서드를 생성해서 Buyer클래스에 계속 추가해 줄 수 없다. 너무 불편할 것이다.
이 많은 메서드를 오버로딩해야하면, 관리도 힘들고, 코드 중복도 발생한다.

그래서 이 코드를 어떻게 바꿀 것이냐면,

이런식으로 바꿔 줄 것이다. 

매개변수에 Tv타입을 쓰는게 아니라, 조상타입인 Product타입을 쓸 것이다.

그러면, 어떤 일이 벌어지냐면, 이 메서드 하나로 여러 물건을 살 수 있다.

다형성에 의해서 조상타입의 참조변수로 자손객체를 가리킬 수 있다.
그래서Tv객체도 매개변수 Product에 들어올 수 있고, Computer도 들어올 수 있고, Audio도 들어올 수 있는 것이다. 

그러면, 아까처럼 메서드를 여러개 만들 필요없이, 
매개변수 타입이 Product인 buy메서드 하나로 모든 물건들을 살 수 있다.

이것이 바로 다형성의 첫번째 장점이다.
이게 바로

  • 다형적 매개변수

장점이다.

 

[Ex7_8]

반응형

'JAVA' 카테고리의 다른 글

추상 클래스, 추상 메서드  (0) 2022.04.05
여러 종류의 객체를 배열로 다루기  (0) 2022.04.04
instanceof 연산자  (0) 2022.04.03
참조변수의 형변환  (0) 2022.04.03
다형성  (0) 2022.04.02