반응형
Java에서 Object
가 특정 타입인지 확인하려면 instanceof
연산자를 사용할 수 있습니다. 이 연산자는 객체가 특정 클래스나 인터페이스의 인스턴스인지 확인합니다.
방법 1: instanceof
를 사용하여 타입 확인
Object obj = getObject(); // obj는 File, InputStream, byte[] 등이 될 수 있음
if (obj instanceof File) {
System.out.println("Object is a File");
} else if (obj instanceof InputStream) {
System.out.println("Object is an InputStream");
} else if (obj instanceof byte[]) {
System.out.println("Object is a byte array");
} else {
System.out.println("Unknown type: " + obj.getClass().getName());
}
방법 2: getClass()
를 사용하여 정확한 타입 확인
객체의 정확한 타입을 확인하려면 getClass()
메서드를 사용할 수 있습니다.
Object obj = getObject();
System.out.println("The type of obj is: " + obj.getClass().getName());
방법 3: 스위치문 (Java 17 이상)
Java 17부터는 패턴 매칭 스위치문을 사용할 수 있습니다. 이를 통해 더 간결하게 타입을 검사하고 처리할 수 있습니다.
Object obj = getObject();
switch (obj) {
case File file -> System.out.println("Object is a File: " + file.getName());
case InputStream inputStream -> System.out.println("Object is an InputStream");
case byte[] byteArray -> System.out.println("Object is a byte array of size: " + byteArray.length);
default -> System.out.println("Unknown type: " + obj.getClass().getName());
}
예제: 객체 타입 판별 함수
유틸리티 메서드를 만들어 다양한 타입을 처리할 수도 있습니다.
public void processObject(Object obj) {
if (obj instanceof File) {
File file = (File) obj;
System.out.println("Processing File: " + file.getAbsolutePath());
} else if (obj instanceof InputStream) {
System.out.println("Processing InputStream");
// Handle InputStream logic here
} else if (obj instanceof byte[]) {
byte[] byteArray = (byte[]) obj;
System.out.println("Processing byte array of length: " + byteArray.length);
} else {
System.out.println("Unknown object type: " + obj.getClass().getName());
}
}
주의사항
instanceof
와 상속- 부모 클래스나 인터페이스를 기준으로
instanceof
를 사용할 경우, 상속 계층을 따라가며 타입을 확인합니다. - 예:
InputStream
은Object
와Closeable
인터페이스의 인스턴스이기도 합니다.InputStream inputStream = new FileInputStream("example.txt"); System.out.println(inputStream instanceof Object); // true System.out.println(inputStream instanceof Closeable); // true
- 부모 클래스나 인터페이스를 기준으로
- 성능 고려
instanceof
나getClass()
는 비교적 경량 연산이지만, 너무 자주 호출하면 성능에 영향을 줄 수 있습니다. 가능한 경우 다형성을 활용해 타입에 따른 로직을 분리하세요.
이 방법들을 활용하면 Object
의 정확한 타입을 확인하고 필요한 작업을 수행할 수 있습니다.
반응형
'개발 > JAVA' 카테고리의 다른 글
Java 예외 처리 완벽 가이드: `try-catch`로 안정적인 프로그램 만들기 (0) | 2025.01.24 |
---|---|
Java에서 여러 타입의 파라미터 받기 (0) | 2025.01.16 |
Java로 파일들을 압축하여 다운로드 받을 수 있는 예제 (0) | 2025.01.14 |
특정 웹사이트를 내 웹사이트에 표시하기 (0) | 2025.01.06 |
프로젝트 web.xml 설정을 java로 설정하기 (0) | 2022.02.15 |