Java/자바 정리

79. instanceof와 패턴 매칭 – 안전한 형변환과 실행 흐름 제어

코딩하는냥이 2025. 5. 9. 14:29
반응형

이번 글에서는 인터페이스 타입으로 참조된 객체가
어떤 구현체인지 판별하여 형변환(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 이상에서는 더 간결하게 쓸 수 있으니 기억해두면 좋습니다.