Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java printStackTrace() vs getMessage(): 예외 정보 확인 메소드의 차이점

자바(Java)에서 발생한 예외(Exception)의 상세 정보를 확인하는 방법은 대표적으로 두 가지가 있습니다. 하나는 printStackTrace() 메소드이고, 다른 하나는 getMessage() 메소드입니다. 두 메소드 모두 java.lang.Throwable 클래스에 정의되어 있으며, java.lang.Error 클래스와 java.lang.Exception 클래스로 상속됩니다.

printStackTrace() 메소드란?

  • java.lang.Throwable 클래스에 정의된 메소드로, ErrorException 클래스에 상속됩니다.
  • 발생한 예외의 이름, 메시지의 성격, 그리고 예외가 발생한 줄 번호(line number)까지 자세하게 출력합니다.
  • 디버깅 시 예외의 발생 지점과 호출 스택 전체를 추적할 수 있어 매우 유용합니다.

사용 예제

public class PrintStackTraceMethod {
    public static void main(String[] args) {
        try {
            int a[] = new int[5];
            a[5] = 20;
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

실행 결과

java.lang.ArrayIndexOutOfBoundsException: 5
        at PrintStackTraceMethod.main(PrintStackTraceMethod.java:5)

위 결과를 보면 예외 클래스 이름(ArrayIndexOutOfBoundsException), 인덱스 값(5), 그리고 예외가 발생한 파일명과 줄 번호까지 함께 출력되는 것을 확인할 수 있습니다.

getMessage() 메소드란?

  • 마찬가지로 java.lang.Throwable 클래스에 정의되어 있으며, ErrorException 클래스에 상속됩니다.
  • 오직 예외 메시지 문자열만 반환하며, 스택 트레이스나 발생 위치 정보는 포함하지 않습니다.
  • 간결한 오류 안내가 필요할 때 적합합니다.

사용 예제

public class GetMessageMethod {
    public static void main(String[] args) {
        try {
            int x = 1 / 0;
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

실행 결과

/ by zero

getMessage()는 예외가 발생한 위치나 스택 정보 없이 / by zero라는 핵심 메시지만 출력합니다.

두 메소드의 차이점 요약

구분printStackTrace()getMessage()
출력 내용예외 이름 + 메시지 + 발생 위치 및 스택 트레이스예외 메시지 문자열만
반환값없음(void), 콘솔에 직접 출력String 타입으로 반환
주요 용도정밀한 디버깅 및 로그 분석사용자에게 간단한 오류 안내

정리하면, 예외의 근본 원인과 발생 지점을 추적해야 하는 개발·디버깅 단계에서는 printStackTrace()가, 사용자에게 보여줄 간단한 오류 메시지가 필요할 때는 getMessage()가 더 적합합니다. 상황에 맞게 두 메소드를 활용하면 더욱 효율적인 예외 처리가 가능합니다.