반응형
이번 글에서는 인터페이스 타입으로 참조된 객체가
어떤 구현체인지 판별하여 형변환(Casting) 후 특정 기능을 실행하는 방법을 학습합니다.
instanceof를 사용해 안전하게 검사한 뒤 형변환하며,
자바 16부터는 더 간결한 패턴 매칭 방식도 사용할 수 있습니다.
📦 인터페이스 (Vehicle.java)
package ch08.sec12;
public interface Vehicle {
void run();
}
📦 구현 클래스 – 버스 (Bus.java)
package ch08.sec12;
public class Bus implements Vehicle {
public void run() {
System.out.println("버스가 달립니다.");
}
public void checkFare() {
System.out.println("승차 요금을 체크합니다.");
}
}
📦 구현 클래스 – 택시 (Texi.java)
package ch08.sec12;
public class Texi implements Vehicle {
public void run() {
System.out.println("택시가 달립니다.");
}
}
📌 실행 클래스 (InstanceofExample.java)
package ch08.sec12;
public class InstanceofExample {
public static void main(String[] args) {
Texi texi = new Texi();
Bus bus = new Bus();
ride(texi);
System.out.println();
ride(bus);
}
private static void ride(Vehicle vehicle) {
// 자바 16 미만 문법
if (vehicle instanceof Bus){
Bus bus = (Bus) vehicle;
bus.checkFare();
}
// 자바 16 이상 문법 (패턴 매칭)
if (vehicle instanceof Bus bus)
bus.checkFare();
vehicle.run();
}
}
💻 실행 결과
택시가 달립니다.
승차 요금을 체크합니다.
버스가 달립니다.
💬 코드 설명
- ride() 메서드는 Vehicle 타입을 매개변수로 받음
- 내부에서 vehicle instanceof Bus 조건을 검사하여
Bus 타입일 때만 checkFare() 호출 - instanceof Bus bus 문법은
자바 16부터 사용 가능한 패턴 매칭 방식으로,
조건 검사와 형변환을 한 줄로 처리 가능
📌 간단 정리
검사 대상 | 조건 판별 결과 | 추가 동작 |
Texi | ❌ | 그냥 run()만 실행 |
Bus | ✅ | checkFare() + run() 실행 |
💡 포인트 정리
- instanceof는 객체의 실제 타입을 확인하는 키워드
- 자바 16부터는 instanceof Class obj 방식으로
형변환 없이 바로 사용할 수 있는 패턴 매칭 문법 도입 - 안전하게 형변환하여 구현 클래스 고유 기능 사용 가능
- 인터페이스 기반의 다형성과 타입 체크를 조화롭게 활용
📌 정리하자면,
instanceof는 실제 타입을 구분하고 필요한 기능을 안전하게 호출할 수 있도록 도와주는 도구입니다.
자바 16 이상에서는 더 간결하게 쓸 수 있으니 기억해두면 좋습니다.
'Java > 자바 정리' 카테고리의 다른 글
82. 정적(static) 멤버 클래스 – 외부 객체 없이도 작동하는 중첩 클래스 (0) | 2025.05.12 |
---|---|
81. 인스턴스 멤버 클래스 – 클래스 안에 클래스가 있다고요? (0) | 2025.05.12 |
80. 인터페이스와 람다식 – 익명 객체 대신 사용하는 간결한 표현 (2) | 2025.05.12 |
78. 인터페이스 매개변수 활용 – 다양한 객체를 받아들이는 구조 (0) | 2025.05.09 |
77. 인터페이스 교체 – 유연한 구조 설계의 핵심 (2) | 2025.05.09 |
76. 강제 타입 변환(Casting) – 인터페이스로 묶고 다시 풀기 (0) | 2025.05.09 |