Java/자바 정리

94. 클래스를 찾을 수 없다면? ClassNotFoundException을 잡아보자

코딩하는냥이 2025. 5. 13. 11:08
반응형

이번 글에서는 Class.forName() 메서드를 사용해

클래스의 존재 여부를 동적으로 확인하는 방법과,
존재하지 않는 클래스를 찾으려 할 때 발생하는 예외인

ClassNotFoundException을 처리하는 방법을 배워봅니다.


📌 예제 코드

public class ExceptionHandlingExample {
    public static void main(String[] args) {
        try {
            Class.forName("java.lang.String");
            System.out.println("java.lang.String 클래스가 존재합니다.");
            System.out.println();
            Class.forName("java.lang.String2");
            System.out.println("java.lang.String2 클래스가 존재합니다.");
            
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
//          System.out.println(e.getMessage() + " 클래스가 존재하지 않습니다.");
        }
    }
}

💻 실행 결과

java.lang.String 클래스가 존재합니다.

java.lang.ClassNotFoundException: java.lang.String2
	at java.base/java.lang.Class.forName0(Native Method)
	at java.base/java.lang.Class.forName(Class.java:315)
	at ch11.sec02.exam02.ExceptionHandlingExample.main(ExceptionHandlingExample.java:9)

💬 코드 설명

  • Class.forName("java.lang.String"): 자바에서 기본 제공하는 클래스이므로 정상적으로 존재 확인이 됩니다.
  • "java.lang.String2"는 존재하지 않는 클래스이므로 ClassNotFoundException이 발생합니다.
  • 예외는 catch (ClassNotFoundException e)에서 잡혀 e.printStackTrace()를 통해 예외 정보 전체가 출력됩니다.
  • 주석 처리된 e.getMessage()를 활용하면 예외 메시지만 간단히 출력할 수도 있습니다.

💡 포인트 정리

  • Class.forName(String className)은 문자열로 클래스 이름을 받아 존재 여부를 런타임에 확인합니다.
  • 해당 클래스가 존재하지 않으면 ClassNotFoundException 예외가 발생합니다.
  • printStackTrace()는 예외 발생 위치를 포함한 상세 로그를 보여주며, 디버깅 시 유용합니다.
  • 사용자에게 메시지를 전달할 목적이라면 getMessage()를 사용하는 것이 더 간결합니다.

📌 정리하자면, Class.forName()은 런타임에 클래스를 동적으로 불러올 때 사용되며,

존재하지 않을 경우 ClassNotFoundException을 발생시킵니다.
이때 적절한 try-catch 처리로 프로그램의 흐름을 유지하고, 에러 원인을 확인할 수 있게 됩니다.