일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- react
- Dinosaur
- JavaScript
- MySQL
- nodejs
- Bull
- class
- 게임
- 정렬
- flask
- Express
- mongoose
- typeORM
- game
- TypeScript
- jest
- Sequelize
- AWS
- Queue
- dfs
- Nest.js
- cookie
- nestjs
- GIT
- OCR
- 자료구조
- Python
- MongoDB
- 공룡게임
- Today
- Total
포시코딩
함수 호출 스택(call stack) 본문
함수 호출 스택(call stack)이란?
함수 호출 스택은 함수 호출과 관련된 정보를 저장하는 자료구조다.
각 함수 호출이 발생할 때마다 호출 스택에 호출된 함수의 정보가 저장되고,
해당 함수가 실행을 마치고 반환되면 호출 스택에서 해당 함수 정보가 제거된다.
함수 호출 스택에는 함수 호출 시 사용되는 매개변수, 지역 변수, 반환 주소 등의 정보가 저장된다.
이 정보는 함수가 실행 중에 필요한 값들을 저장하며, 함수 호출이 완료되면 이 값들을 반환해 이전 함수 호출로 돌아갈 수 있도록 한다.
코드 예제
코드를 통해 이해해보자
def foo(x):
y = x + 1
bar(y)
return y
def bar(z):
print(z)
foo(2)
위와 같은 코드가 있을 때
foo 함수는 매개변수 x를 받아 y = x + 1을 계산한 뒤,
bar(y) 함수를 호출하고 y 값을 반환한다.
bar 함수는 매개변수 z를 받아 print(z)를 수항한다.
이 코드를 실행하면 다음과 같은 함수 호출 스택이 생성된다.
foo(2)
bar(3)
foo 함수가 호출되면, 호출 스택에 foo(2) 함수 정보가 저장된다.
foo 함수에서 bar 함수를 호출하면, 호출 스택에 bar(3) 함수 정보가 저장된다.
bar 함수에서 print(z)가 실행된 후에는, 호출 스택에서 bar(3) 함수 정보가 제거된다.
이후, foo 함수에서 return y가 실행되어 foo(2) 함수 정보가 제거되고
최종적으로 호출 스택이 비어진다.
그래서 언제 쓰이는데?
함수 호출 스택은 재귀 함수와 같이 함수를 호출할 때 주로 사용된다.
재귀 함수를 호출하면, 함수 호출 스택에 함수의 정보가 반복적으로 저장되므로
함수 호출 깊이가 깊어질수록 호출 스택의 크기도 커진다.
이는 호출 스택의 크기를 제한하거나, 재귀 함수 대신 반복문을 구현하는 등의 방법을 고려해야 함을 의미한다.
'CS (Computer Science)' 카테고리의 다른 글
[JavaScript] 콜백 함수(Callback Function) (0) | 2023.04.13 |
---|---|
[JavaScript] 이벤트 루프(Event Loop) (1) | 2023.04.13 |
캐시(Cache) (1) | 2023.01.07 |
CPU (0) | 2023.01.07 |
Database, MongoDB (0) | 2022.12.13 |