
๋ค์ด๊ฐ๋ฉฐ
"ํธ์ด์คํ ์ด ์ ์ผ์ด๋ ๊น?", "์ค์ฝํ ์ฒด์ธ์ด๋ ๋ฌด์์ผ๊น?", "this๋ ์ ์ํฉ๋ง๋ค ๋ฌ๋ผ์ง๊น?"
JavaScript๋ฅผ ๊ณต๋ถํด๋ดค๋ค๋ฉด, ์ด ์ง๋ฌธ๋ค์ ํ ๋ฒ์ฏค ์๊ฐํด๋ณด์์ ๊ฒ์ ๋๋ค.
์ด ์ธ ๊ฐ์ง๋ ๋ฐ๋ก ์ธ์์ผ ํ ๋ณ๊ฐ์ ๊ท์น์ด ์๋, ์คํ ์ปจํ ์คํธ๋ผ๋ ๊ฐ๋ ์ ์ดํดํ๋ฉด ์ ๋ถ ๊ฐ์ ์๋ฆฌ๋ก ์ค๋ช ๋ฉ๋๋ค.
์ด ๊ธ์์๋ ์คํ ์ปจํ ์คํธ๊ฐ ๋ฌด์์ธ์ง, ๋ด๋ถ์ ๋ฌด์์ ๋ด๊ณ ์๋์ง, ๊ทธ๋ฆฌ๊ณ ํธ์ถ ์คํ์์ ์ด๋ป๊ฒ ๋์ํ๋์ง๋ฅผ ๋ค๋ฃน๋๋ค.
์ปจํ ์คํธ
์คํ ์ปจํ ์คํธ๋ฅผ ์ดํดํ๊ธฐ ์์, ์ปจํ ์คํธ๋ ๋ฌด์์ธ์ง ์ดํดํด์ผํฉ๋๋ค.
์ปจํ ์คํธ(Context)๋ ์ํฉ, ๋งฅ๋ฝ, ๋ฌธ๋งฅ ์์ ์๋ฏธ๋ฅผ ์๋ฏธํฉ๋๋ค. ์ด๋ฅผ ๊ฐ๋ฐ์๋ต๊ฒ ํด์ํด๋ณด๋ฉด, ํ ์คํธ์ ๋ด์ฉ๋ฟ๋ง ์๋๋ผ, ํ ์คํธ๊ฐ ์ฌ์ฉ๋ ์ํฉ, ์ด์ ๋ฌธ๋งฅ, ์ดํ ๋งฅ๋ฝ ๋ฑ์ ๋ชจ๋ ๊ฐ์ง๊ณ ์๋ ๋ฐ์ดํฐ ๋ฌถ์์ ๊ฐ๋ฆฌํจ๋ค๊ณ ํ ์ ์์ต๋๋ค.

์คํ ์ปจํ ์คํธ(Execution Context)๋?
JavaScript ์์ง์ ์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ ์ ๋จผ์ ํ๊ฐ(Evaluation) ๋จ๊ณ๋ฅผ ๊ฑฐ์นฉ๋๋ค. ์ด ๋จ๊ณ์์ "์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋ฌด์์ด ํ์ํ๊ฐ"๋ฅผ ํ์ ํ๊ณ , ๊ทธ ์ ๋ณด๋ฅผ ํ๋์ ๊ฐ์ฒด๋ก ๋ฌถ๋๋ฐ, ์ด ๊ฐ์ฒด๊ฐ ๋ฐ๋ก ์คํ ์ปจํ ์คํธ์ ๋๋ค.
JavaScript์ ๋์ ๊ณผ์ ์ ํ๊ฐ์ ์คํ๋จ๊ณ๋ก ๋๋๋ค.

JavaScript๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์ฝ๋๋ฅผ ํตํด ๋ช ๋ น์ด๋ฅผ ๋์ดํ๋ฉฐ, ์ด๋ฅผ ํ์ฉํ์ฌ ๋ก์ง์ ์ํํ ์ ์์ต๋๋ค. ์ด๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ํ์๋ฅผ ์ฐ๋ฆฌ๊ฐ ํํ ์๋ ์ฝ๋ฉ(coding)์ด๋ผ๊ณ ํฉ๋๋ค.
*์์ค์ฝ๋(Source Code)๋?
JavaScript ๋ฟ๋ง ์๋๋ผ ์ฌ๋ฌ ๊ฐ๋ฐ ์ธ์ด์์ ์์ฑ๋ ์ฝ๋๋ฅผ ์์ค์ฝ๋๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
JavaScript๊ฐ ๋์ํ ๋ ํฌ๊ฒ ์์ค์ฝ๋ ํ๊ฐ๊ณผ ์์ค์ฝ๋ ์คํ ๋จ๊ณ๋ก ๋๋์ด ๋์ํ๋ฉฐ, ์ด 4๊ฐ์ง์ ์์ค์ฝ๋ ํ์ ์ ๊ฐ์ง๊ณ ์์ค์ฝ๋ ํ์ ์ ๋ฐํ์ผ๋ก ์ปจํ ์คํธ๋ฅผ ๋ง๋ญ๋๋ค. ์ฌ๊ธฐ์ ๋ง๋ค์ด์ง ์ปจํ ์คํธ๋ฅผ ๋์(์คํ)์ ์ํ ์ปจํ ์คํธ, ์ฆ ์คํ ์ปจํ ์คํธ๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
์์ค์ฝ๋ ํ๊ฐ ๋จ๊ณ์์๋ ์ปจํ ์คํธ๋ฅผ ์์ฑํ๋ค.
์์ค์ฝ๋ ํ๊ฐ ๋จ๊ณ์์๋ ์คํ ์ปจํ ์คํธ๋ก ์ฌ์ฉํ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ์์ฑ๋์ด ์๋ ๋ณ์, ํจ์ ๋ฑ์ ์ ์ธ๋ฌธ์ ํ์ ํ์ฌ ์ด๋ฆ(์๋ณ์)์ ํ๋กํผํฐ ํค๋ก, ์ ์ธ๋ ๋ด์ฉ์ ๊ฐ์ผ๋ก ํ๋กํผํฐ ๊ฐ์ผ๋ก ์คํ ์ปจํ ์คํธ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ก ๋ฑ๋กํฉ๋๋ค. ๋จ, ๊ฐ์ ์์ง ํ ๋นํ์ง ์์ต๋๋ค.

์์ค์ฝ๋ ์คํ ๋จ๊ณ๋ ํ ๋น๊ณผ ํธ์ถ์ด ์ผ์ด๋๋ค.
์์ค์ฝ๋ ํ๊ฐ ๋จ๊ณ๊ฐ ๋๋๋ฉด ์์ค์ฝ๋ ์คํ ๋จ๊ณ๊ฐ ์์๋ฉ๋๋ค. ์์ค์ฝ๋ ์คํ ๋จ๊ณ์์๋ ์์ค์ฝ๋ ํ๊ฐ ์ดํ ๋ฑ๋ก๋ ์๋ณ์์ ๊ฐ์ ํ ๋นํ๊ณ ํจ์๋ฅผ ํธ์ถํ์ฌ ์์ค์ฝ๋๋ฅผ ์คํํฉ๋๋ค.

์คํ ์ปจํ ์คํธ ์์ฑ๊ณผ์ ํ๋์ ๋ณด๊ธฐ
JavaScript๋ ์์ค์ฝ๋ ํ๊ฐ ๋จ๊ณ์์ ์คํ ์ปจํ ์คํธ๋ฅผ ์์ฑํ๊ณ , ์ ์ธ๋ฌธ์ ํด๋นํ๋ ์๋ณ์๋ฅผ ํค๋ก ๋ฑ๋กํฉ๋๋ค. ์ดํ ์์ค์ฝ๋ ์คํ ๋จ๊ณ์์ ๋ฑ๋ก๋ ํค์ ๋ง๋ ๊ฐ์ ํ ๋นํฉ๋๋ค.

์์ค์ฝ๋ ํ์
4๊ฐ์ง ์์ค์ฝ๋ ํ์ ์ ์์ค์ฝ๋ ํ๊ฐ์ ์ํด ๊ฐ๊ฐ ์ ์ญ ์คํ ์ปจํ ์คํธ, ํจ์ ์คํ ์ปจํ ์คํธ, eval ์คํ ์ปจํ ์คํธ, ๋ชจ๋ ์คํ ์ปจํ ์คํธ๊ฐ ์์ฑ๋ฉ๋๋ค.
| ์์ค์ฝ๋ ํ์ | ์ค๋ช | ์์ฑํ๋ ์คํ ์ปจํ ์คํธ |
| ์ ์ญ ์ฝ๋ | ์ ์ญ์ ์กด์ฌํ๋ ์์ค์ฝ๋, ์ ์ญ์ ์ ์๋ ํจ์, ํด๋์ค ๋ฑ์ ํฌํจ๋์ง ์์. | ์ ์ญ ์คํ ์ปจํ ์คํธ |
| ํจ์ ์ฝ๋ | ํจ์ ๋ด๋ถ์ ์กด์ฌํ๋ ์์ค์ฝ๋, ๋ด๋ถ์ ์ ์๋ ํจ์, ํด๋์ค ๋ฑ์ ํฌํจํ์ง ์์. | ํจ์ ์คํ ์ปจํ ์คํธ |
| eval ์ฝ๋ | eval ํจ์์ ์ธ์๋ก ์ ๋ฌ๋์ด ์คํ๋๋ ์์ค์ฝ๋. | eval ์คํ ์ปจํ ์คํธ |
| ๋ชจ๋ ์ฝ๋ | ๋ชจ๋ ๋ด๋ถ์ ์กด์ฌํ๋ ์์ค์ฝ๋, ๋ชจ๋ ๋ด๋ถ์ ํจ์, ํด๋์ค ๋ฑ์ ํฌํจํ์ง ์์. | ๋ชจ๋ ์คํ ์ปจํ ์คํธ |

๐ ํธ์ถ ์คํ(Call Stack)
ํธ์ถ ์คํ์ด๋, JavaScript ๋์๊ณผ์ ๋จ๊ณ ์ค, ์คํ(Runtime)์์ ํธ์ถํ ๋ด์ฉ์ ๋ด๊ณ ์๋ ์คํ๊ตฌ์กฐ๋ฅผ ๋งํฉ๋๋ค.
JavaScript๋ ํ๊ฐ ๋จ๊ณ์์ ๋ง๋ ์คํ ์ปจํ ์คํธ๋ฅผ ์คํ ๋จ๊ณ์์ ํธ์ถํ๊ณ ํธ์ถ ์คํ์ ๋ด์ ๋์ํฉ๋๋ค. ์์ ๋ฐฐ์ ๋ ์คํ ์ปจํ ์คํธ๊ฐ ํธ์ถ ์คํ์ ๋ด์ผ๋ฉฐ ๊ฐ์ฅ ์ต๊ทผ์ ๋ด์๋ ์คํ ์ปจํ ์คํธ ๋ด์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๊ณ , ์คํ์ด ๋๋ ์คํ ์ปจํ ์คํธ๋ฅผ ๊บผ๋ด๋ ๋ฐฉ์์ผ๋ก ๋์ํฉ๋๋ค.
์ด๋ ์คํ ์ถ๊ฐ๋ ์คํ ์ปจํ ์คํธ๊ฐ ์คํ ์๋ฃ๋์ด์ผ ๋ค์ ์คํ ์ปจํ ์คํธ๋ฅผ ์งํํ ์ ์๋๋ฐ, ์ด๋ฅผ ๋๊ธฐ(Synchronous)์ ์ผ๋ก ์คํํ๋ค๊ณ ๋งํฉ๋๋ค.

์คํ(Stack)
์คํ(Stack)์ด๋, ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ๋ฒ ์ค ํ๋๋ก, ์ฐจ๊ณก์ฐจ๊ณก ์์๋๊ณ ์์์ ๋ถํฐ ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก ์ค๋ช ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ๋ค๋ฅธ ๋ง๋ก ์ ์ ํ์ถ(First In Last Out) ํน์ง์ ๊ฐ์ง๊ณ ์๋ ์๋ฃ๊ตฌ์กฐ๋ผ๊ณ ๋งํ ์ ์์ต๋๋ค.
์์ธํ ๋ด์ฉ์ ์๋ ๊ธ์ ์ฐธ๊ณ ํด๋ณด์๊ธฐ ๋ฐ๋๋๋ค.
2026.01.16 - [๐ STUDY/์๋ฃ๊ตฌ์กฐ & ์๊ณ ๋ฆฌ์ฆ] - [์๋ฃ๊ตฌ์กฐ] ์คํ(Stack)
[์๋ฃ๊ตฌ์กฐ] ์คํ(Stack)
๐ฆ ์คํ(Stack)์คํ(Stack)์ ๋ฐ์ดํฐ๋ฅผ ํ์ชฝ ๋ฐฉํฅ์ผ๋ก๋ง ๋ฃ๊ณ ๊บผ๋ด๋ ์๋ฃ๊ตฌ์กฐ์ ๋๋ค. ํ์ ์ ์ถ(LIFO, Last In First Out)๋ฐฉ์์ผ๋ก ๋์ํ์ฌ ๊ฐ์ฅ ๋ง์ง๋ง์ ๋ค์ด์จ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ฅ ๋จผ์ ๋๊ฐ๋ ๊ตฌ์กฐ์ ๋๋ค
blog.dev-sg.cloud
ํธ์ถ ์คํ ๋์ ๊ณผ์
์์ ์ฝ๋๊ฐ ๋์ํ๋ ๊ณผ์ ์ ์ ๋ฆฌํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
// ์์ ์ฝ๋
const x = 1;
// ์ธ๋ถ ํจ์ func1
function func1 () {
const y = 2;
// ๋ด๋ถ ํจ์ func2
function func2 () {
const z = 3;
console.log(x + y + z);
}
func2();
}
func1(); // 6
1. ์ ์ญ ์ฝ๋์ ํ๊ฐ

2. ์ ์ญ ์ฝ๋ ์คํ์ ์ํ ์ ์ญ ์คํ ์ปจํ ์คํธ๋ฅผ ํธ์ถ ์คํ์ ์ถ๊ฐ ๋ฐ ์ ์ญ ์ฝ๋ ์คํ

3. ์ ์ญ ์ฝ๋ ์คํ ์ค func1 ํจ์ ํธ์ถํ์ฌ func1 ํจ์ ํ๊ฐ

4. func1 ํจ์ ์คํ์ ์ํ func1 ์คํ ์ปจํ
์คํธ๋ฅผ ํธ์ถ ์คํ์ ์ถ๊ฐ ๋ฐ func1 ํจ์ ์คํ

5. func1 ํจ์ ์คํ ์ค func2 ํจ์ ํธ์ถํ์ฌ func2 ํจ์ ํ๊ฐ

6. func2 ํจ์ ์ฝ๋ ์คํ์ ์ํ func2 ์คํ ์ปจํ
์คํธ ํธ์ถ ์คํ์ ์ถ๊ฐ ๋ฐ func2 ํจ์ ์คํ

7. func2 ํจ์ ์คํ ์๋ฃ ํ ํธ์ถ ์คํ์์ func2 ์คํ ์ปจํ
์คํธ ์ ๊ฑฐ

8. func1 ํจ์ ์คํ ์ปจํ
์คํธ ๋ณต๊ท ๋ฐ func1 ํจ์ ๋จ์ ๋ถ๋ถ ์คํ

9. func1 ํจ์ ์คํ ์๋ฃ ํ ํธ์ถ ์คํ์์ func1 ์คํ ์ปจํ
์คํธ ์ ๊ฑฐ

10. ์ ์ญ ์คํ ์ปจํ
์คํธ ๋ณต๊ท ๋ฐ ์ ์ญ ์ฝ๋ ๋จ์ ๋ถ๋ถ ์คํ

11. ์ ์ญ ์ฝ๋ ์คํ ์๋ฃ ํ ํธ์ถ ์คํ์์ ์ ์ญ ์คํ ์ปจํ
์คํธ ์ ๊ฑฐ

12. JavaScript ๋์ ์ข
๋ฃ

ํ ๋์ ๋ณด๋ ํธ์ถ ์คํ ๋์ ๊ณผ์ ์์
