자바(Java)에서 발생한 예외(Exception)의 상세 정보를 확인하는 방법은 대표적으로 두 가지가 있습니다. 하나는 printStackTrace() 메소드이고, 다른 하나는 getMessage() 메소드입니다. 두 메소드 모두 java.lang.Throwable 클래스에 정의되어 있으며, java.lang.Error 클래스와 java.lang.Exception 클래스로 상속됩니다.
printStackTrace() 메소드란?
java.lang.Throwable클래스에 정의된 메소드로,Error와Exception클래스에 상속됩니다.- 발생한 예외의 이름, 메시지의 성격, 그리고 예외가 발생한 줄 번호(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클래스에 정의되어 있으며,Error와Exception클래스에 상속됩니다. - 오직 예외 메시지 문자열만 반환하며, 스택 트레이스나 발생 위치 정보는 포함하지 않습니다.
- 간결한 오류 안내가 필요할 때 적합합니다.
사용 예제
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()가 더 적합합니다. 상황에 맞게 두 메소드를 활용하면 더욱 효율적인 예외 처리가 가능합니다.