-
๐์๋ฐ์คํฌ๋ฆฝํธ 1 | ๊ธฐ๋ณธํ ๋ฐ์ดํฐ์ ์ฐธ์กฐํ ๋ฐ์ดํฐ์๋ฐ์คํฌ๋ฆฝํธ 2021. 11. 13. 16:09
๊ธฐ๋ณธํ๊ณผ ์ฐธ์กฐํ์ ๊ตฌ๋ถํ๋ ๊ธฐ์ค
๋ฐ์ดํฐ ํ์ ์ ์ข ๋ฅ๋ ํฌ๊ฒ ๊ธฐ๋ณธํ๊ณผ ์ฐธ์กฐํ 2๊ฐ์ง๋ก ๋๋๋ค.
๊ธฐ๋ณธํ๊ณผ ์ฐธ์กฐํ์ ๊ตฌ๋ถ ์ง๋ ๊ฐ์ฅ ํฐ ์ ์ ์ค์ ๊ฐ ์ ์ฒด ๋ณต์ฌ vs ์ค์ ๊ฐ์ด ๋ค์ด์๋ ์ฃผ์ ๊ฐ ๋ณต์ฌ์ด๋ค.
- ๊ธฐ๋ณธํ (copy value of a)
let a = 1; let b = a; a += 10; console.log(a) //11 console.log(b) //1
์์ ์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด a์ ๊ฐ์ด ๋ณํ๋๋ผ๋ b์ ๊ฐ์ ๊ทธ๋๋ก ์ธ ๊ฒ์ ๋ณผ ์ ์๋ค.
let b = a; ์ฝ๋๋ฅผ ํตํด a๊ฐ ์ ์ฒด๊ฐ ๋ณต์ฌ๋์ด b๋ผ๋ ๋ณ์์ ๋ด๊ฒผ๋ค.
a, b๋ ์๋ก ์ํฅ์ ๋ฐ์ง ์๊ณ ๋ ๋ฆฝ์ ์ผ๋ก ์กด์ฌํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๊ธฐ๋ณธํ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ๋๋ ์๋์ ๊ฐ์ ์์๋ก ์ ์ฅ๋๋ค.
1. ๋ณ์ ์์ญ์์ ๋น ๊ณต๊ฐ(@1003 : ์์์ ์ฃผ์ ๊ฐ)์ ํ๋ณดํ๋ค.
2. ํ๋ณดํ ๊ณต๊ฐ์ ์๋ณ์(๋ณ์๋ช )๋ฅผ a๋ก ์ง์ ํ๋ค.
3. ์ผ๋จ ๋ฐ์ดํฐ ์์ญ์์ 1์ ์ฐพ๊ณ , ์์ผ๋ฉด ๋ฐ์ดํฐ ๊ณต๊ฐ์ ํ๋ ๋ง๋ค์ด(@5004)์ ์ซ์ 1์ ์ ์ฅํ๋ค.
4. ๋ณ์ ์์ญ์์ a๋ผ๋ ์๋ณ์๋ฅผ ๊ฒ์ํ๋ค.(@1003).5. ์์ ์ ์ฅํ ๋ฌธ์์ด์ ์ฃผ์(@5004)๋ฅผ @1003์ ๊ณต๊ฐ์ ์ฐ๊ฒฐํ๋ค.
a += 10 ์ฝ๋ ์ฒ๋ฆฌ
6. 1์ด ์ ์ฅ๋ ๊ณต๊ฐ์ 11์ ํ ๋นํ๋ ๋์ ๋ฐ์ดํฐ ์์ญ์์ 11์ ์ฐพ๊ณ , ์์ผ๋ฉด ์๋ก ๋ง๋ค์ด ๋ณ๋์ ๊ณต๊ฐ์ ์ ์ฅํ๋ค.
7. ๊ทธ ์ฃผ์๋ฅผ 1003์ ๊ณต๊ฐ์ ์ฐ๊ฒฐํ๋ค.
- ๋ถ๋ณ๊ฐ(immutable)
์์ ์ฒ๋ฆฌ ๊ณผ์ ์์ ํ ๋ฒ ๋ง๋ ๊ฐ์ ๋ค๋ฅธ ๊ฐ์ผ๋ก ๋ณ๊ฒฝ๋์ง ์๋๋ค. ๋์ ์๋ก ๋ง๋๋ ๊ณผ์ ์ ํตํด์๋ง ๋ณ๊ฒฝ์ด ์ผ์ด๋๊ณ ์๋ค. ์ด๊ฒ์ด ๋ถ๋ณ ๊ฐ์ ์ฑ์ง์ด๋ค. ํ ๋ฒ ๋ง๋ค์ด์ง ๊ฐ์ ๊ฐ๋น์ง ์ปฌ๋ ํ ์ ๋นํ์ง ์๋ ํ ์์ํ ๋ณํ์ง ์๋๋ค.
- ์ฐธ์กฐํ ( a has address of "{ x : 1}" )
let a = { x : 1 }; let b = a; a.x += 10; console.log(a.x); //11 console.log(b.x) //11
๊ธฐ๋ณธํ๊ณผ ๋ค๋ฅด๊ฒ let b = a; ์ฝ๋๋ฅผ ํตํด {x : 1} ์ ์ฃผ์ ๊ฐ์ด b๋ผ๋ ๋ณ์์ ๋ด๊ฒผ๋ค.
a, b๋ฅผ ์ฝ์๋ก ์ฐ์ด๋ณด๋ฉด a๊ฐ๋ง ๋ณํ์์ผฐ์ง๋ง, b๊ฐ๋ +10์ด ๋ ๊ฒ์ ์ ์ ์๋ค.
์ฆ a, b๋ ์๋ก ์ํฅ์ ๋ฐ๊ณ ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ฐธ์กฐํ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ๋๋ ์๋์ ๊ฐ์ ์์๋ก ์ ์ฅ๋๋ค.
1. ๋ณ์ ์์ญ์์ ๋น ๊ณต๊ฐ(@1002 : ์์์ ์ฃผ์ ๊ฐ)์ ํ๋ณดํ๋ค.
2. ํ๋ณดํ ๊ณต๊ฐ์ ์๋ณ์(๋ณ์๋ช )๋ฅผ a๋ก ์ง์ ํ๋ค.
3. ์์์ ๋ฐ์ดํฐ ์ ์ฅ ๊ณต๊ฐ(@5001) ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ค๊ณ ๋ณด๋ ์ฌ๋ฌ ๊ฐ์ ํ๋กํผํฐ๋ก ์ด๋ค์ง ๋ฐ์ดํฐ ๊ทธ๋ฃน์ด๋ค. ์ด ๊ทธ๋ฃน ๋ด๋ถ์ ํ๋กํผํฐ(x) ๋ค์ ์ ์ฅํ๊ธฐ ์ํด ๋ณ๋์ ๋ณ์ ์์ญ์ ๋ง๋ จํ๊ณ , ๊ทธ ์์ญ์ ์ฃผ์(@7103~ ?)๋ฅผ @5001์ ์ ์ฅํ๋ค.
4. @7103 ์ x๋ผ๋ ํ๋กํผํฐ ์ด๋ฆ์ ์ง์ ํ๋ค.
5. ๋ฐ์ดํฐ ์์ญ์์ ์ซ์ 1์ ๊ฒ์ํ๊ณ ์์ผ๋ฉด, ์์๋ก @5003์ ์ ์ฅํ๊ณ , ์ด ์ฃผ์๋ฅผ ๋ค์ @7103์ ์ ์ฅํ๋ค.a.x += 10 ์ฝ๋ ์ฒ๋ฆฌ
6. ๋ฐ์ดํฐ ์์ญ์์ ์ซ์ 11์ ๊ฒ์ํ๋ค. ๊ฒ์ ๊ฒฐ๊ณผ๊ฐ ์์ผ๋ฉด ๋น ๊ณต๊ฐ์ธ @5005์ ์ ์ฅํ๊ณ ๊ทธ ์ฃผ์๋ฅผ @7103์ ์ ์ฅํ๋ค.
- ๊ฐ๋ณ๊ฐ(mutable)
์์ ์ฒ๋ฆฌ ๊ณผ์ ์์ 10์ ๋ํ๊ธฐ ์ ๊ณผ ๋ํ ํ ๋ณ์ a๊ฐ ๋ฐ๋ผ๋ณด๊ณ ์๋ ์ฃผ์๋ ์ฌ์ ํ @5001๋ก ๋ณํ์ง ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ฆ '์๋ก์ด ๊ฐ์ฒด'๊ฐ ๋ง๋ค์ด์ง ๊ฒ์ด ์๋๋ผ ๊ธฐ์กด์ ๊ฐ์ฒด ๋ด๋ถ์ ๊ฐ๋ง 1์์ 11๋ก ๋ฐ๋ ๊ฒ์ด๋ค. ๋ฐ์ดํฐ ์์ญ์ ์ ์ฅ๋ ๊ฐ์ ๋ชจ๋ ๋ถ๋ณ๊ฐ์ด์ง๋ง(1,11), ๋ณ์(@7103)์๋ ๋ค๋ฅธ ๊ฐ์ ์ผ๋ง๋ ์ง ๋์ ํ ์ ์๋ค.
๊ทธ๋ ๋ค๋ฉด ์ ์ฐธ์กฐํ์ ์ฃผ์ ๊ฐ์ ๋ณต์ฌํ๋ ๊ฒ์ผ๊น?
ํญ์ ๊ทธ๋ ๋ฏ ์ฑ๋ฅ์ ๋ฌธ์ ์ด๋ค. ์ฐธ์กฐํ์๋ ์ด๋ค ๊ฐ์ด ๋ค์ด๊ฐ์ง ๋ชจ๋ฅธ๋ค. ๊ทธ ๋ง์ธ์ฆ์จ, ์ฃผ์ ๊ฐ์ด ์๋ ๊ฐ ์ ์ฒด๋ฅผ ๋ณต์ฌํ๊ฒ ๋๋ฉด ์ฉ๋์ด ์ด๋ง์ด๋งํ๊ฒ ์ปค์ง ์๋ ์๋ค๋ ๋ป์ด๋ค.
โ ๊ธฐ๋ณธํ ๋ฐ์ดํฐ (primitive type)
- Number
- String
- Boolean
- Null
- Undefined
- Symbol
- .etcโ ์ฐธ์กฐํ ๋ฐ์ดํฐ(reference type)
- Object
- Array
- Function
- Date
- regexp
- Map, WeakMap
- Set, WeakSet- ๋ณ์ ํธ์ด์คํ
์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ณ์ ํธ์ด์คํ ์ด๋ผ๋ ํน์ง์ ๊ฐ๊ณ ์๋ค.
console.log(val1); var val1;
์ฝ์์ฐฝ์ ๋ณ์ val1์ ์ถ๋ ฅํ๋ ์ฝ๋๋ฅผ ์ ๋ ฅํ๋ค. ๊ทธ๋ฐ๋ฐ ๋ณ์ val1์ ์์ง ์ ์ธ๋๊ธฐ ์ ์ด๋ค. ์๋๋๋ก๋ผ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ ์์ฐจ์ ์ผ๋ก ์์์ ์๋๋ก ์คํ๋๊ธฐ ๋๋ฌธ์ ์ฐธ์กฐํ ์ ์๋ค๋ ์๋ฌ๊ฐ ๋ฐ ๊ฒ์ด๋ค.
ํ์ง๋ง ๊ฒฐ๊ณผ์ ์ผ๋ก๋ undefined๊ฐ ๋ฌ๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ๋ณ์ ์ ์ธ ์ฝ๋๋ ์ด๋์ ์๋ ๊ฐ์ฅ ๋จผ์ ์คํ์ํค๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ํ์ ๋ค์ ์์ฐจ์ ์ผ๋ก ์ฝ๋๋ฅผ ์คํ์ํจ๋ค.
์ด๋ ๊ฒ ๋ณ์ ์ ์ธ๋ฌธ์ด ๋ค๋ฅธ ์ฝ๋๋ค๋ณด๋ค ์๋ก ๋์ด์ฌ๋ ค์ ธ ๋จผ์ ์คํ๋๋ ๊ฒ์ ๋ณ์ ํธ์ด์คํ ์ด๋ผ๊ณ ํ๋ค.
[์ฐธ๊ณ ์๋ฃ]
https://www.youtube.com/watch?v=vMsK5f_0938
'์๋ฐ์คํฌ๋ฆฝํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐์๋ฐ์คํฌ๋ฆฝํธ 3 | Lexical Environment, Scope Chain (0) 2021.11.15 ๐์๋ฐ์คํฌ๋ฆฝํธ 2 | ์ค์ฝํ(scope), let vs var vs const (0) 2021.11.15 ๐ ๋๊ธฐ์ ๋น๋๊ธฐ | Promises, callbacks, async/await (0) 2020.08.10 ๐์๋ฐ์คํฌ๋ฆฝํธ 5 | this, 5๊ฐ์ง ๋ฐ์ธ๋ฉ ํจํด (0) 2020.07.21