Java에서 스택 트레이스(Stack Trace)는 프로그램 실행 중 예외(Exception)가 발생했을 때, 해당 예외가 발생한 위치와 호출된 메서드의 순서를 보여주는 디버깅 정보이다.
스택 트레이스는 예외가 발생한 이유를 파악하고 해결하는 데 도움이 되는 도구이다.
public class StackTracePractice {
public static void main(String[] args) {
Generation g = new Generation();
try {
g.checkStringLength();
} catch (NullPointerException npe) {
npe.printStackTrace();
}
}
}
class Generation {
private String str;
void checkStringLength() {
System.out.println(str.length());
}
}
임의의 코드가 있다. 해당 코드는 Generation class의 멤버 변수 str의 길이를 출력하는 목적을 지니고 있다.
일부러 str를 초기값 null을 유지한채 length method를 호출해 NullPointerException을 발생시킨다.
main method에서 Exception을 catch한다.
코드 실행하면 NullPointerException이 발생한다.
이 예외 발생 정보에 대해 자세히 알아보자
스택 트레이스의 구성
1. 맨 위에 예외의 타입과 메시지
맨 위 예외의 타입과 추가적인 메시지를 나타낸다.
java.lang.NullPointerException : Cannot invoke "String.length()" because "this.str" is null.
예외의 종류: 예외가 발생한 원인
2. 예외가 발생한 메스드와 위치
호출 스택에 따라 각 메서드가 실행된 순서와 발생 위치를 나타낸다.
at 뒤에 발생한 클래스, 메서드, 파일명, 그리고 줄 번호가 표시된다.
at Generation.checkStringLength(StackTracePractice.java:13)
- Generation: 클래스 이름
- checkStringLength: 메서드이름
- StackTracePractice.java:13: 파일 이름과 예외가 발생한 줄번호(13번 줄)
프로그램이 실행되면서 메서드 호출이 스택에 쌓인다.
보통 StackTrace at부분은 밑에서부터 위로 해석한다. main method가 첫 시작이니.
'Java' 카테고리의 다른 글
[Java] 얕은 복사와 깊은 복사 (2) | 2024.12.27 |
---|---|
[Java] Method Signature (0) | 2024.12.01 |
[Java] Argument와 Parameter의 차이점 (4) | 2024.11.09 |
[Java] 배열을 쉽게 출력하기! (1) | 2024.09.16 |
[Java의 정석] Chapter4 연습문제 (3) | 2024.09.13 |