728x90
호출 스택(Call Stack)이란❓
콜 스택(Call Stack)은 프로그램에서 메서드(함수) 호출을 추적하는 메모리 영역입니다.
LIFO(Last In, First Out) 구조를 가지며, 가장 마지막에 호출된 함수가 먼저 실행 완료되어 제거됩니다.
콜 스택의 기본 특징
- LIFO(Last In First Out) 방식으로 동작
- 각 스레드마다 독립적인 콜스택 보유
- 메소드 호출 시 스택 프레임(Stack Frame) 생성
- 메소드 실행 완료 시 해당 프레임 제거
콜 스택의 동작 원리
- 함수 호출 시 스택 프레임(Stack Frame) 추가
- 함수가 호출될 때, 해당 함수의 매개변수, 지역 변수, 반환 주소 등의 정보가 담긴 스택 프레임이 스택에 쌓입니다.
- 함수 실행 완료 시 스택 프레임 제거
- 함수 실행이 끝나면, 해당 스택 프레임이 제거(Pop) 되며, 이전 함수로 돌아갑니다.
- 메인 함수 종료 시 스택 비움
- 프로그램의 main() 함수까지 종료되면, 스택이 완전히 비워집니다.
호출 스택(Call Stack) 동작 과정
public class CallStack {
public static void main(String[] args) {
System.out.println("main() 호출");
first();
System.out.println("main() 종료");
}
public static void first() {
System.out.println("first() 호출");
second();
System.out.println("first() 종료");
}
public static void second() {
System.out.println("second() 호출");
third();
System.out.println("second() 종료");
}
public static void third() {
System.out.println("third() 호출");
System.out.println("Hello from third()");
System.out.println("third() 종료");
}
}
실행 결과
main() 호출
first() 호출
second() 호출
third() 호출
Hello from third()
third() 종료
second() 종료
first() 종료
main() 종료
위 실행 결과에서 알 수 있듯이 메소드가 호출되는 순서대로 스택에 쌓이고(push), 각 메소드의 실행이 완료되면 역순으로 스택에서 제거(pop)됩니다.
- 처음 main() 메소드가 호출되고
- main() 내부에서 first()가 호출되고
- first() 내부에서 second()가 호출되고
- second() 내부에서 third()가 호출됩니다.
그리고 third() 메소드의 실행이 완료되면서부터 역순으로
- third()가 종료되어 스택에서 제거되고
- second()가 종료되어 스택에서 제거되고
- first()가 종료되어 스택에서 제거되고
- 마지막으로 main()이 종료되어 스택에서 제거됩니다.
이것이 바로 콜스택의 LIFO(Last In First Out) 구조를 보여줍니다.
'TIL,일일 회고' 카테고리의 다른 글
[TIL, 일일 회고] 2025.02.08 - Java 입력 처리: BufferedReader vs Scanner 실제 성능 비교해보기 (0) | 2025.02.08 |
---|---|
[TIL, 일일 회고] 2025.02.07 - VO와 DTO는 같은 의미인가❓ (1) | 2025.02.07 |
[TIL, 일일 회고] 2025.02.05 - 하노이 탑 알고리즘, 왜 재귀여야 할까❓ (0) | 2025.02.05 |
[TIL, 일일 회고] 2025.02.04 - Docker : Container Inspect로 컨테이너 세부 정보 확인하기 (0) | 2025.02.04 |
[TIL, 일일 회고] 2025.02.03 - Java 배열 초기화: Arrays.fill()과 반복문의 성능 비교 (0) | 2025.02.03 |