Input + Output = True
์๋ฐ์คํฌ๋ฆฝํธ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ - ์ฝ ์คํ, ๋ฉ๋ชจ๋ฆฌ ํ ๋ณธ๋ฌธ
์๋ฐ์คํฌ๋ฆฝํธ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ - ์ฝ ์คํ, ๋ฉ๋ชจ๋ฆฌ ํ
IOTrue 2023. 7. 16. 20:27๐Javascript] ์๋ฐ์คํฌ๋ฆฝํธ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ - ์ฝ ์คํ, ๋ฉ๋ชจ๋ฆฌ ํ
๋ฉ๋ชจ๋ฆฌ (RAM) - Random Access Memory
๊ธฐ๋ณธ์ ์ผ๋ก ์ปดํจํฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ฒ๋ฆฌํ๋ ์ญํ ์ ํ๋ฉฐ
๋ฐ์ดํฐ ์ฒ๋ฆฌ ์๋๊ฐ ๋น ๋ฅด์ง๋ง ์ปดํจํฐ ๋๋ ํด๋น ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋๋ฉด ์ ์ฅ๋ ๋ฐ์ดํฐ๊ฐ ๋ชจ๋ ์ฌ๋ผ์ง๋ค
โ ์ฝ ์คํ, ๋ฉ๋ชจ๋ฆฌ ํ์ด๋?
1. ์ฝ์คํ(Call Stack)
์์ํ์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ค(string, number, boolean, null, undefined, bigint, symbol)
์คํ์ปจํ ์คํธ(Execution Context)๋ฅผ ํตํด ์๋ ์์ ๋ค์ ์ ์ดํ๋ค
- ๋ณ์ ์๋ณ์(์ด๋ฆ) ์ ์ฅ
- ์ค์ฝํ ์ฒด์ธ ๋ฐ this ๊ด๋ฆฌ
- ์ฝ๋ ์คํ ์์ ๊ด๋ฆฌ ๋ฑ์ ์ํ
2. ๋ฉ๋ชจ๋ฆฌ ํ(Memory Heap)
์ฐธ์กฐํ์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ค (์์ํ์ ์ ์ ์ธํ ํ์ - ๋ฐฐ์ด, ๊ฐ์ฒด, ํจ์, Date, RegExp ๋ฑ)
โ ์ฝ ์คํ, ๋ฉ๋ชจ๋ฆฌ ํ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ
์ฝ์คํ์๋ ์์ํ์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๊ณ ๋ฉ๋ชจ๋ฆฌ ํ์๋ ์ฐธ์กฐํ์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ค
1. ์์ํ์ ๋ฐ์ดํฐ (ํ๋ a)
- ํด๋น ๋ณ์๊ฐ ๊ฐ์ง๊ณ ์๋ 10์ด๋ผ๋ ๊ฐ(number) ์์ฒด๋ ์์ํ์
์ด๋ฏ๋ก ์ฝ์คํ์ ์ ์ฅ๋๋ค
- ๋ณ์ a์๋ 10์ด ์ ์ฅ๋ ์ฝ์คํ ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์ ๊ฐ์ด ์ ์ฅ๋๋ค
*๋ณ์ ์๋ณ์ a ์์ฒด๋ ์ฝ์คํ ์์ '์คํ์ปจํ
์คํธ(Execution Context)์ ๋ ์์ปฌ ํ๊ฒฝ(Lexical Environment)'์ด๋ผ๋ ๊ณณ์ ์ ์ฅ๋๋ค
2. ์ฐธ์กฐํ์ ๋ฐ์ดํฐ (๋นจ๊ฐ b, c, d)
- ๋ฐฐ์ด, ๊ฐ์ฒด, ํจ์๋ ์ฐธ์กฐํ์
์ด๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ํ์ ์ ์ฅ๋๋ค
- ์ฐธ์กฐํ์
๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ๋ฉ๋ชจ๋ฆฌ ํ์ ์ฃผ์๋ ์ฝ์คํ์ ๊ฐ๊ฐ ์ ์ฅ๋๋ค
- ๋ฉ๋ชจ๋ฆฌ ํ์ ์ฃผ์ ๊ฐ์ด ์ ์ฅ๋ ์ฝ์คํ ์ฃผ์ ๊ฐ์ ํด๋น ๋ณ์์ ๊ฐ๊ฐ ์ ์ฅ๋๋ค
*๋ง์ฐฌ๊ฐ์ง๋ก, ๋ณ์ ์๋ณ์ b, c, d ์ด๋ฆ ์์ฒด๋ ์ฝ์คํ ์์ '์คํ์ปจํ
์คํธ(Execution Context)์ ๋ ์์ปฌ ํ๊ฒฝ(Lexical Environment)'์ ์ ์ฅ๋๋ค
โ ์ฝ ์คํ, ๋ฉ๋ชจ๋ฆฌ ํ์ ๋ฐ์ดํฐ ๊ด๋ฆฌ
์์ํ์
1. ์์ํ์ ๋ณ์ ์์ฑ
์์ํ์
๋ฐ์ดํฐ๋ ์ฝ์คํ์ ๊ฐ๊ฐ ์ ์ฅ๋๊ณ ๋ฐ์ดํฐ ๊ฐ์ด ์ ์ฅ๋ ์ฝ์คํ์ ์ฃผ์๋ ํด๋น ๋ณ์์ ๊ฐ๊ฐ ์ ์ฅ๋๋ค
๋ณ์ a, b ์๋ณ์ ์์ฒด๋ ์คํ์ปจํ
์คํธ์ ๋ ์์ปฌ ํ๊ฒฝ์ ์ ์ฅ๋๋ค
2. ์์ํ์ ์ฌํ ๋น - Case1
๋ณ์ a์ ์๋ก์ด ๊ฐ 20(number)์ ์ฌํ ๋นํ๋ฉด ๋ณ์ a๋ ๋ณธ์ธ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ ๊ฐ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์๋๋ผ
๊ธฐ์กด์ 20์ด๋ผ๋ ๊ฐ์ ์ ์ฅํ๊ณ ์๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ๊ฐ์ผ๋ก ๊ต์ฒดํ๊ณ a์ b๋ ๋์ผํ ์ฃผ์ ๊ฐ์ ๊ฐ๊ฒ ๋๋ค
3. ์์ํ์ ์ฌํ ๋น - Case2
๋ณ์ b์ ์๋ก์ด ๊ฐ 30(number)์ ์ฌํ ๋นํ๋ฉด ๋ณธ์ธ์ ์ฃผ์ ๊ฐ์ด ๊ฐ๋ฆฌํค๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ 20์ด๋ผ๋ ๊ฐ์ 30์ผ๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์๋๋ผ ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋ณดํด์ 30์ ์ ์ฅํ๊ณ , ํด๋น ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ๊ฐ์ ๊ธฐ์กด b์ ์ ์ฅ๋ ์ฃผ์ ๊ฐ๊ณผ ๊ต์ฒดํ๋ค
4. ๊ฐ๋น์ง ์ปฌ๋ ํฐ
๋์ด์ ์ฐธ์กฐ๋์ง ์๋ ๋ฐ์ดํฐ๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ์ํด ์ ์ ํ ์์ ์ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋๋ค
๊ฐ๋น์ง ์ปฌ๋ ํฐ
์ฌ์ฉ์ฒ๊ฐ ์์ด์ง ๊ฐ์ฒด๊ฐ ์ฐจ์งํ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ผ๋ก ํด์ ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ด์ฅ๋ ๊ธฐ๋ฅ
์ฐธ์กฐํ์
1. ์ฐธ์กฐํ์ ๋ณ์ ์์ฑ
๋ณ์ a์ b์ ํ ๋นํ๋ ๋ฐฐ์ด๊ณผ ๊ฐ์ ์ฐธ์กฐํ์ ๋ฐ์ดํฐ๋ ๋ฉ๋ชจ๋ฆฌ ํ์ ์ ์ฅ๋๊ณ
๋ฉ๋ชจ๋ฆฌ ํ์ ์ฃผ์ ๊ฐ์ ์ฝ ์คํ์ ์ ์ฅ๋๋ฉฐ, a์ b์๋ ํด๋น ์ฝ์คํ์ ์ฃผ์ ๊ฐ์ด ๊ฐ๊ฐ ์ ์ฅ๋๋ค
a๋ const๋ก, b๋ let์ผ๋ก ์ ์ธ๋์๋ค
2. ์ฐธ์กฐํ์ ๋ฐ์ดํฐ์ ๊ฐ ๋ณ๊ฒฝ
๋ณ์์ ๊ฐ์ ์ฌํ ๋นํ๊ฒ ์๋๋ผ ๋ณ์์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ค๋ ๊ฒ์ด ์ค์ํ๋ค
๋ฉ๋ชจ๋ฆฌ ํ์ ์ ์ฅ๋ ๋ฐฐ์ด์ ๊ฐ์ ๋ณ๊ฒฝํ๊ฒ ๋๋ฉด ํด๋น ๋ฉ๋ชจ๋ฆฌ ํ์ ์ฃผ์๋ ๊ทธ๋๋ก๋ค
์ฆ, ์ฝ์คํ์ ์ ์ฅ๋ ๋ฉ๋ชจ๋ฆฌ ํ์ ์ฃผ์๋ ๋ณ๊ฒฝ๋์ง ์์ผ๋ฉฐ ๋ณ์ a์ b์ ์ ์ฅ๋ ์ฃผ์ ๊ฐ๋ ๋ณํ์ง ์๋๋ค
3. ์ฐธ์กฐํ์ ์ฌํ ๋น
1) let์ผ๋ก ์ ์ธ๋ ์ฐธ์กฐํ์ ์ ์ฌํ ๋น
let์ผ๋ก ์ ์ธ๋์๋ b์ ์๋ก์ด ๊ฐ(๋ฐฐ์ด)์ ์ฌํ ๋นํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ํ์ ์๋ก์ด ์ฃผ์๊ฐ ํ๋ณด๋๊ณ ์๋ก์ด ๊ฐ์ด ์ ์ฅ๋๋ค
๊ทธ๋ฆฌ๊ณ ์ฝ์คํ์ ์ ์ฅ๋์๋ ๊ธฐ์กด ๋ฉ๋ชจ๋ฆฌ ํ์ ์ฃผ์ ๊ฐ์ ๋ณ๊ฒฝ์ด ํ์ํด์ง๋ค
์ด๋ ์ฝ์คํ์ ์ ์ฅ๋์๋ ๋ฉ๋ชจ๋ฆฌ ํ์ ์ฃผ์ ๊ฐ์ ๋ฐ๊พธ๋๊ฒ ์๋๋ผ ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋ณดํด์ ๋ฐฉ๊ธ ์ ์ ์๋ก ์์ฑ๋ ๋ฉ๋ชจ๋ฆฌ ํ์ ์ฃผ์ ๊ฐ์ ์ ์ฅํ๋ค ๋ฐ๋ผ์ ๋ณ์ b์ ์ ์ฅ๋๋ ์ฝ์คํ์ ์ฃผ์ ๊ฐ๋ ๋ณ๊ฒฝ๋๋ค
์ฐธ์กฐํ์ ์ ๋์ผํ ๊ตฌ์ฑ์ ๋ฐ์ดํฐ๋ฅผ ์ฌํ ๋นํ๋๋ผ๋ ๋งค๋ฒ ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋ณดํ์ฌ ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค
2) const๋ก ์ ์ธ๋ ์ฐธ์กฐํ์ ์ ์ฌํ ๋น
const๋ก ์ ์ธ๋์๋ a์ ๋ค๋ฅธ ๋ฐฐ์ด ๊ฐ์ ์ฌํ ๋นํ๋ฉด ์๋ฌ๊ฐ ์ถ๋ ฅ๋๋ค
๋ค๋ฅธ ๋ฐฐ์ด ๊ฐ์ ์ฌํ ๋นํ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ ํ์ ์๋ก์ด ๊ณต๊ฐ์ ํ๋ณดํ์ฌ ํด๋น ๊ฐ์ ์ ์ฅํ๊ณ ์ฝ์คํ์์๋ ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋ณดํด์ ํด๋น ๋ฉ๋ชจ๋ฆฌ ํ์ ์ฃผ์ ๊ฐ์ ์ ์ฅํด์ผํ๋๋ฐ, ๊ฒฐ๊ณผ์ ์ผ๋ก const๋ก ์ ์ธ๋์๋ a์ ์ ์ฅ๋ ์ฝ์คํ์ ์ฃผ์ ๊ฐ๋ ๋ณ๊ฒฝ์ด ํ์ํ๊ฒ ๋๋ค
ํ์ง๋ง const๋ก ์ ์ธ๋ ๋ณ์๋ ๋ณธ์ธ์๊ฒ ํ ๋น๋ ์ฝ์คํ ์ฃผ์ ๊ฐ์ ๋ณ๊ฒฝ์ ํ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ์ด ์ฝ๋๋ ์คํ์ด ๋ถ๊ฐ๋ฅํ๋ค
์ฆ, const๋ ๋ณธ์ธ์ด ์ฐธ์กฐํ๊ณ ์๋ ๋ฉ๋ชจ๋ฆฌ ํ ๊ฐ์ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ ๊ฒ์ด ์๋๋ผ
๋ณธ์ธ์๊ฒ ์ ์ฅ๋ ์ฝ์คํ ์ฃผ์ ๊ฐ์ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ ๊ฒ์ด๋ค
๋ฐ๋ผ์ const๋ก ์ ์ธํ ๋ณ์๋ ์ด๊ธฐ ๊ฐ์ ํ ๋น์ด ๋ฐ๋์ ํ์ํ๋ค
๐ก ๋์ผํ ๊ตฌ์ฑ์ ์ฐธ์กฐํ์ ๋ฐ์ดํฐ ๋น๊ต
const personA = {
name: 'person',
age: '20'
}
const personB = {
name: 'person',
age: '20'
}
const numberA = [1, 2, 3]
const numberB = [1, 2, 3]
๊ฐ์ฒด, ๋ฐฐ์ด๊ณผ ๊ฐ์ ์ฐธ์กฐํ์ ๋ฐ์ดํฐ๋ ๋ด๋ถ ์์๊ฐ ๋์ ์ผ๋ก ๋ณ๊ฒฝ๋ ์ ์๊ธฐ ๋๋ฌธ์
๋์ผํ ๊ตฌ์ฑ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋๋ผ๋ ๋ฉ๋ชจ๋ฆฌ ํ์ ๊ฐ๊ฐ ๋ณ๋์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ๋ณดํ์ฌ ์ ์ฅํ๋ค
๋ฐ๋ผ์ personA !== personB , numberA !== numberB๊ฐ ๋๋ค
์ฐธ๊ณ
์๋ ๋ธ๋ก๊ทธ์ ์๋ฃ๋ฅผ ํ์ฉํ์ต๋๋ค
https://curryyou.tistory.com/276
๊ทธ์ธ ์ฐธ๊ณ
https://developer.mozilla.org/ko/docs/Glossary/Primitive
https://developer.mozilla.org/ko/docs/Web/JavaScript/Memory_management
https://charming-kyu.tistory.com/19
'๐จFrontEnd > Javascript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
javascript 'use strict'๋? (0) | 2023.07.19 |
---|---|
Javascript] ์ค์ฝํ(์ค์ฝํ, ์ค์ฝํ์ฒด์ธ, ๋ ์์ปฌ ์ค์ฝํ) (0) | 2023.05.10 |
Javascript] ์๋ฐ์คํฌ๋ฆฝํธ this (0) | 2023.03.31 |
parameter์ argument์ ์ฐจ์ด (0) | 2023.03.28 |
์๋ฐ์คํฌ๋ฆฝํธ ํธ์ด์คํ ๊ณผ TDZ (0) | 2023.03.28 |