-
CHAPTER 7. (6) 다형성이란? (참조변수 형변환, 매개변수 다형성, instanceof연산자 포함) ★★java/ㄴ CHAPTER 7. 객체지향 프로그래밍 2 2020. 4. 2. 11:14
★
- 여러 가지 형태를 가질 수 있는 능력
1. 부모 (클래스) 타입의 참조변수로 자식 (클래스) 타입 인스턴스를 참조 가능
2. 실행하는 메서드는 동일하지만, 부모 타입의 참조 변수에 따라 실제로 조립된 객체의 재정의(오버라이딩)된 내용 실행
: ★ 실행하는 메서드 동일, 실제 조립된 객체에 따라 다른 실행결과 발현됨
- 필수적으로 재정의 필요
- 재정의 관계일 때 가장 바깥의 것이 실행됨
즉, 지금까지는 인스턴스 타입과 일치하는 타입의 참조변수만 사용
ex.
Tv t = new Tv();
CaptionTv c = new CaptionTv();
but 서로 상속 관계일 경우, 부모 클래스 타입의 참조변수로 자식 클래스의 인스턴스 참조 가능
ex.
Tv t = new CaptionTv();
실제 인스턴스가 CaptionTv 타입이라도 참조변수 t로는 CaptionTv의 모든 멤버 사용 불가 (t.text, t.caption() 사용 불가)
=> 같은 타입의 인스턴스라도 참조변수 타입에 따라 사용할 수 있는 멤버 개수가 다름
ex.
/*
Iphone 객체 생성 후 해당 객체의 모든 멤버 사용
Iphone p1 = new Iphone();
Galaxy p2 = new Galaxy();
인터넷 기능이 지원되는 SmartPhone류 객체 생성, SmartPhone 타입 변수에 저장
SmartPhone 류들이 지원하는 멤버 사용
SmartPhone p1 = new SmartPhone(); p1.internet();
p1 = new Iphone(); p1.internet();
p1 = new Galaxy(); p1.internet();
사진 촬영이 지원되는 폰류를 객체 생성해서 사진촬영 해보고, 성능 테스트
FeaturePhone p1 = new FeaturePhone(); p1.photo();
p1 = new SmartPhone(); p1.photo();
p1 = new Iphone(); p1.photo();
p1 = new Galaxy(); p1.photo();
// 애플뮤직기능 사용, Iphone류 객체 생성 Iphone, Iphone8, IphoneX, Iphone11
// 지문인식기능 사용, Iphone8류 객체 생성 Iphone8
// 얼굴인식기능 사용, IphoneX류 객체 생성 IphoneX, Iphone11
*/
★
참조변수의 형변환
- 기본형 변수처럼 형변환 가능 (단, 서로 상속관계인 클래스 사이에서만 가능)
= 자식(부모) 타입의 참조변수를 부모(자식) 타입 참조변수로 형변환이 가능하다
ex.
FireEngine f = new FireEngine();
Car c = (FireEngine) f; // 괄호 생략 가능
FireEngine f2 = (FireEngine) c; // 괄호 생략 불가
참조변수 형변환은 그저 리모컨(참조변수)를 다른 종류로 바꾸는 것
이유? 사용 할 수 있는 멤버 개수를 조절하기 위해서
instanceof 연산자
- 주로 조건문에서 사용
- 왼쪽에는 참조변수, 오른쪽에는 타입
- 반환값은 true / false
=> 참조변수가 타입으로 형변환이 가능한가?
/*
instanceof 연산자
참조변수가 참조하는 객체의 실제 타입을 확인하는 연산자
사용법 : 참조변수 instanceof 연산자
연산결과
true : 검사에 사용했던 타입으로 형변환이 가능함
false : 검사에 사용했던 타입으로 형변환 불가능
Iphone p = new Iphone();
// p가 참조하는 객체가 Iphone 타입 객체인가?
p instanceof Iphone --------> true
p instanceof Galaxy --------> false
p instanceof SmartPhone ----> true
p instanceof Phone ---------> true
Iphone p = new Iphone8();
p instanceof Iphone8 -------> true
p instanceof IphoneX -------> false
p instanceof Iphone11 ------> false
p instanceof Galaxy --------> false
p instanceof Iphone --------> true
p instanceof SmartPhone ----> true
*/
★
매개변수의 다형성
void buy (Tv t) 로는 Tv밖에 살 수 없음
Computer 살대는 또 void buy (Computer c) 만들고 ....
제품 수 늘어날 때마다 새로운 buy메서드 추가 필요 (매우 번거로움)
void buy(Product p) 로 다형성 적용
매개변수가 Product 타입 참조변수
=> Product 클래스의 자식 타입 참조변수면 어느 것이나 매개변수로 받을 수 있다조상타입 참조변수 배열 사용 시, 공통의 조상을 가진 서로 다른 종류 객체를 배열로 묶어서 다룰 수 있음
'java > ㄴ CHAPTER 7. 객체지향 프로그래밍 2' 카테고리의 다른 글
CHAPTER 7. (8) 인터페이스란? ★ (0) 2020.04.02 CHAPTER 7. (7) 추상 클래스란? (추상 메서드 포함) (0) 2020.04.02 CHAPTER 7. (5) abstract란? (get, set 포함) (0) 2020.04.02 CHAPTER 7. (4) 제어자란? (static, final 포함) (0) 2020.04.02 CHAPTER 7. (3) 패키지란? (import문 포함) (0) 2020.04.02