일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 백엔드
- 문자 단위 스트림
- 배열
- exception
- 졸리다
- try-catch
- node.js
- 초보개발자
- MPA
- 새벽공부
- 메서드
- 코린이
- ArrayList
- 상속
- 코딩
- 변수
- 바이트 단위 스트림
- 다형성
- 인스턴스
- 파이팅
- 인터페이스
- FileInputStream
- throws
- 개발자
- 예외 처리
- 자바
- 보조 스트림
- Java
- SSR
- 자료형
- Today
- Total
SHUSTORY
08-4 다형성 본문
다형성
다형성이란 하나의 코드가 여러 자료형으로 구현되어 실현되는 것을 의미한다.
쉽게 말해 같은 코드에서 여러 실행 결과가 나오는 것이다.
Animal 클래스를 상속받는 Human 클래스 / Tiger 클래스 / Eagle 클래스가 있고,
Animal 클래스의 메서드를 하나 정의하고 상속받은 클래스에서 재정의해보자.
AnimalTest 클래스를 통해 어떤 인스턴스가 매개변수로 넘어와도 모두 Animal 형으로 변환하도록 한다.
예를 들어 매개변수가 전달되는 부분에 Human 인스턴스가 전달되었다면 다음 코드와 같이 형 변환된다.
가상 메서드의 원리에 따라 animal.move( ) 메서드가 호출하는 메서드는 Animal의 move가 아닌 매개변수로 넘어온
실제 인스턴스의 메서드이다.
animal.move( ) 메서드의 코드는 변함이 없지만 어떤 매개변수가 넘어왔냐에 따라 출력문이 달라지는데,
이것이 바로 '다형성'이다.
다형성의 장점
상위 클래스에서 공통 부분의 메서드를 제공하고, 하위 클래스에서는 그에 기반한 추가 요소를 덧붙여 구현하면
코드 양도 줄고 유지보수도 편리해진다.
또한 필요에 따라 상속받은 모든 클래스를 하나의 상위 클래스로 처리할 수 있고
다형성에 의해 각 클래스의 여러 가지 구현을 실현할 수 있으므로 프로그램을 쉽게 확장할 수 있다.
즉 다형성의 활용을 통해 유연하면서도 구조화된 코드를 구현하여 확장성 있고 유지보수 하기 좋은 프로그램을 개발한다.
다형성을 활용해 VIP 고객 클래스 완성하기
앞 예제의 VIP 고객의 혜택을 다형성을 통해 구현해보자.
- initCustomer( ) 메서드를 통해 클래스의 멤버 변수를 초기화하며, Customer 클래스를 생성하는 두 생성자에서 공통으로 사용하는 코드이므로 메서드로 분리하여 호출했다.
10행에서 VIPCustomer를 Customer 형으로 선언하였다.
11행에서 7행과 같은 메서드를 작성하였지만 11행은 클래스형은 7행과 같이 Customer형이지만
인스턴스는 VIPCustomer이므로 VIPCustomer의 메서드가 호출되었기 때문에 7행과 다른 값이 출력된 것이다.
마찬가지로 동일한 가격의 상품을 구매하여 같은 메서드를 작성해 계산을 처리한 결괏값이 다른 것을 볼 수 있다.
이는 모두 각 인스턴스의 메서드에 맞게 계산된 것으로 다형성을 볼 수 있다.
상속 관계에 있는 상위 클래스와 하위 클래스는 같은 상위 클래스 자료형으로 선언되어 생성할 수 있지만
재정의된 메서드는 각각 호출될 뿐만 아니라 이름이 같은 메서드가 서로 다른 역할을 구현한다.
'프로그래밍 > JAVA' 카테고리의 다른 글
08-6 다운 캐스팅과 instanceof (0) | 2023.03.02 |
---|---|
08-5 다형성 활용하기 (0) | 2023.02.25 |
08-3 메서드 오버라이딩 (0) | 2023.02.25 |
08-2 상속에서 클래스 생성과 형 변환 (0) | 2023.02.25 |
08-1 상속 (0) | 2023.02.25 |