다형성(polymorphism) 이란?
- 하나의 코드가 여러 자료형으로 구현되어 실행되는 것
- 같은 코드에서 여러 다른 실행 결과가 나옴 - 코드는 1개인데 결과 값이 여러 다른 값으로
- 정보은닉, 상속과 더불어 객체지향 프로그래밍의 가장 큰 특징 중 하나임
- 다형성을 잘 활용하면 유연하고 확장성 있고, 유지보수가 편리한 프로그램을 만들 수 있음
타입형이 아닌 인스턴스형의 메서드 적용됨을 확인!
상속을 하게 되면 여러 클래스를 하나의 타입(상위 클래스)으로 핸들링할 수 있음
다형성을 사용하는 이유?
- 다른 동물을 추가하는 경우
- 상속과 메서드 재정의를 활용하여 확장성 있는 프로그램을 만들 수 있음
- 그렇지 않은 경우 많은 if-else if문이 구현되고 코드의 유지보수가 어려워짐
- 위 클래스에서는 공통적인 부분을 제공하고 하위 클래스에서는 각 클래스에 맞는 기능 구현
- 여러 클래스를 하나의 타입(상위 클래스)으로 핸들링할 수 있음
다형성을 활용한 멤버십 프로그램 확장
- 일반 고객과 VIP 고객 중간 멤버십 만들기 GOLD 고객 등급을 만들고 혜택은 다음과 같다
- 제품을 살 때는 10프로를 할인해준다
- 보너스 포인트는 2%를 적립해준다
- 고객이 늘어 일반 고객보다는 많이 구매하고 VIP보다는 적게 구매하는 고객에게도 혜택을 주기로 했다.
1. Customer class - extends 해서 - GoldCustomer 클래스 구현
2. 핸들링 / 등급 적용 잘되었는지 테스트
3. 등급별 지불 금액과 보너스 포인트 확인
조건이었던 GOLD 등급 부여와 10% 할인, 보너스 포인트 2% 적용되었음을 확인 GOOD :)
상속은 언제 사용할까?
IS-A 관계(is a relationship : inheritance)
- 일반적인(general) 개념과 구체적인(specific) 개념과의 관계
- 상위 클래스 : 하위 클래스보다 일반적인 개념 ( 예: Employee )
- 하위 클래스 : 상위 클래스보다 구체적인 개념들이 더해짐 ( 예: Engineer, Manager...)
- 상속은 클래스 간의 결합도가 높은 설계
- 상위 클래스의 수정이 많은 하위 클래스에 영향을 미칠 수 있음
- 계층구조가 복잡하거나 hierarchy가 높으면 좋지 않음
HAS-A 관계(composition)
- 클래스가 다른 클래스를 포함하는 관계 ( 변수로 선언 )
- 코드 재사용의 가장 일반적인 방법
- Student가 Subject를 포함하는 Library를 구현할 때
- ArrayList 생성하여 사용 - 상속하지 않음 -
- 다른 클래스의 기능을 가져다 쓰는. 상속 관계가 아니다.
review
다형성 - Polymorphism
같은 코드에서 여러 다른 실행 결과가 나옴
다형성을 활용하면
유연하고 확장성 있고, 유지보수가 편리한 프로그램을 만들 수 있음
같은 코드 하나에서
다른 여러 가지의 값들이 나오는 것이 신기하였다.
타입은 같지만 속한 인스턴스의 메서드는 다른 것이 핵심인 것 같다.
가상 메서드는 인스턴스의 메서드로 적용되므로!
GOLD 등급을 추가하는 것을 해보았는데
상속, 재정의를 활용한 다형성!
없었다면 직접 조건마다 등급마다 else if 문을 추가해서? 어우..
개발자가 되어서 업무를 맡게 된다면 처음에는
이러한 이미 짜여있는 기능들에 기능을 추가하거나
유지-보수하는 작업들을 할거 같은데
개념과 사용 법을 더 신경 써서 알아둬야겠다.
ㅎㅎㅎㅎ
'JAVA 웹 개발 패키지 - 패스트캠퍼스 > Chapter3' 카테고리의 다른 글
인터페이스(interface) (0) | 2022.01.04 |
---|---|
추상 클래스(abstract class) 와 템플릿 메서드 패턴 (0) | 2022.01.04 |
다운 캐스팅과 instanceof (0) | 2022.01.04 |
메서드 재정의 하기 (overring) (0) | 2022.01.03 |
상속 ( inheritance ) (0) | 2022.01.03 |