☕ JAVA
[Java] 참조 변수의 형 변환과 instanceof
별이⭐
2024. 5. 28. 20:51
참조 변수의 형 변환
- 참조 변수의 형 변환? 사용할 수 있는 멤버의 갯수를 조절하는 것
- 리모콘을 바꾸는 것! 주소값, 객체가 바뀌는 것이 아니다.
- 조상, 자손 관계의 참조 변수는 서로 형 변환이 가능하다.
- 멤버 갯수 감소 → 안전 (형 변환 생략 가능)
- 멤버 갯수 증가 → 안전X (형 변환 생략 불가능)
예시 1
class Car {
String color;
int door;
void drive() {..}
void stop() {..}
}
class FireEngine extends Car {
void water() {..}
}
예시 2
instanceof 연산자
- 참조 변수의 형 변환 가능 여부 확인에 사용. 가능하면 true를 반환
- 반드시 instanceof로 확인 먼저한 뒤, 형 변환 필요
void doWork(Car c) { // Car 또는 Car의 모든 자손들이 매개변수로 들어갈 수 있다.
if (c instanceof FireEngine) { // 1. 형 변환 가능 여부 확인 (c가 가리키는 객체가 FireEngine이냐?)
FireEngine fe = (FireEngine) c; // 2. 형 변환
fe.water();
} else if (c instanceof Ambulance) {
...
}
}
- instanceof가 필요한 이유
- 만약 위 예시에서 확인을 하지 않고
(FireEngine) c;
를 했는데 들어온 매개변수가 Ambulance면 형제 관계(?)끼리는 형 변환 불가능해서 에러 발생! - -> 에러 방지하기 위해 형 변환 필요
- 만약 위 예시에서 확인을 하지 않고
- 조상들은 instanceof 결과로 true가 나온다.
- true -> 그 타입으로 형 변환이 가능 -> 조상들로 형 변환 OK
- Object obj = (Object) fe; 가능