๋ฐ์ดํฐ ํ์
์ ์ข
๋ฅ
๊ธฐ๋ณธํ (์์ํ, Primitive type)
์ข
๋ฅ
- ์ซ์(Number)
- ๋ฌธ์์ด(String)
- ๋ถ๋ฆฌ์ธ(Boolean)
- Null
- Undefined
- Symbol (ES6์ ์ถ๊ฐ ๋จ)
ํน์ง
- ํ ๋น์ด๋ ์ฐ์ฐ ์ ๋ณต์
- ๊ฐ์ด ๋ด๊ธด ์ฃผ์๊ฐ์ ๋ณต์
- ๋ถ๋ณ์ฑ(Immutability)์ ๋
์ฐธ์กฐํ (Reference type)
์ข
๋ฅ
- ๊ฐ์ฒด(Object)
- ๋ฐฐ์ด(Array)
- ํจ์(Function)
- ๋ ์ง(Date)
- ์ ๊ท์(RegExp)
- Map, WeakMap (ES6์ ์ถ๊ฐ ๋จ)
- Set, WeakSet (ES6์ ์ถ๊ฐ ๋จ)
ํน์ง
- ํ ๋น์ด๋ ์ฐ์ฐ ์ ์ฐธ์กฐ
- ์๋ฐํ ๋งํ๋ฉด ์ฐธ์กฐํ๋ ๋ณต์ ๋ฅผ ํจ
- ๊ฐ์ด ๋ด๊ธด ์ฃผ์๊ฐ๋ค๋ก ์ด๋ฃจ์ด์ง ๋ฌถ์์ ๊ฐ๋ฆฌํค๋ ์ฃผ์๊ฐ์ ๋ณต์
๋ฐ์ดํฐ ํ์
์ ๊ดํ ๋ฐฐ๊ฒฝ์ง์
๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ
- C/C++, Java ๋ฑ์ ์ ์ ํ์
์ธ์ด
- ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ๋ ์์
- ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ฅผ ์ต์ํํ๊ธฐ ์ํด ๋ฐ์ดํฐ ํ์
๋ณ๋ก ํ ๋นํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ 2 Bytes, 4 Bytes ๋ฑ์ผ๋ก ๋๋ ์ ์ ํด ๋์
- ํ์ฉ ๋ฉ๋ชจ๋ฆฌ ์ด์์ ๊ฐ์ ์
๋ ฅํ๋ฉด ์ค๋ฅ๊ฐ ๋๊ฑฐ๋ ์๋ชป๋ ๊ฐ์ด ์ ์ฅ๋จ
- ์ฌ๋ฐ๋ฅธ ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํด์๋ ๋ ํฐ ๋ฐ์ดํฐ ํ์ผ๋ก ๋ณํ์ด ํ์
- C์ ๊ฒฝ์ฐ ๋์ ์ธ ๊ธธ์ด์ ๋ฌธ์์ด ์ ์ฅ์ ์ํด์ malloc, calloc๊ณผ ๊ฐ์ ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ํจ์๋ฅผ ํตํด์ ์์ฒญ ๊ธธ์ด ๋งํผ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ณ ์ฌ์ฉํจ. ๋ง์ฝ ์ดํ์ ๋ ๋ง์ ๊ณต๊ฐ์ด ํ์ํ ๊ฒฝ์ฐ realloc์ ํตํด์ ๋ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น ๋ฐ์
- JavaScript
- ๊ณผ๊ฑฐ๋ณด๋ค ๋ฉ๋ชจ๋ฆฌ ์ฉ๋์ด ์๋ฑํ ์ปค์ง ์ํฉ์์ ์๋์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๋ํ ์๋ฐ์์ ์์ ๋ก์์ง
- ์ ์ด์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ข ๋ ๋๋ํ๊ฒ ํ ๋น
- ์ซ์์ ๊ฒฝ์ฐ ์ ์ํ์ธ์ง ๋ถ๋์์ํ์ธ์ง ๊ตฌ๋ถํ์ง ์๊ณ 8 Bytes๋ฅผ ํ ๋น
- ๋๋ถ์ ๊ฐ๋ฐ์๊ฐ ํ ๋ณํ์ ๊ฑฑ์ ํด์ผ ํ๋ ์ํฉ์ด ํจ์ฌ ๋ ๋ฐ์ํ๊ฒ ๋จ
- ์ถฉ๋ถํ ๋๋ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ ์์์๋ ๋ธ๋ก์ฒด์ธ์ ํ ํฐ์ ๋ค๋ฃฐ ๋์ ๊ฐ์ด ๋ ํฐ ์ซ์๋ฅผ ๋ค๋ฃฐ ๋์๋ BigNumber, BigInt(ES2020์์ ์ถ๊ฐ)์ ๊ฐ์ ๋ฐ์ดํฐ ํ์ ์ด์ฉํ์ฌ์ผ ํจ
์๋ณ์์ ๋ณ์
- ๋ณ์์ ์๋ณ์๋ฅผ ํผ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์
- ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ฌธ๋งฅ์ ๋ฐ๋ผ ๋ฌด์์ ๋งํ๊ณ ์ ํ๋์ง ์ ์ถํ ์ ์์
- ํ์ง๋ง ๋์ ์ฐจ์ด๋ฅผ ๋ชจ๋ฅธ๋ค๋ฉด ํผ๋์ค๋ฌ์ธ ์ ์์
๋ณ์ (Variable)
- ๋ณํ ์ ์๋ ๋ฐ์ดํฐ (์ซ์, ๋ฌธ์์ด, ๊ฐ์ฒด, ๋ฐฐ์ด ๋ฑ...)
์๋ณ์ (Identifier)
- ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์๋ณํ๋๋ฐ ์ฌ์ฉํ๋ ์ด๋ฆ
- ๋ณ์๋ช
๋ณ์ ์ ์ธ๊ณผ ๋ฐ์ดํฐ ํ ๋น
๋ณ์ ์ ์ธ
์ฝ๋ ์์
let a;
- a ๋ผ๋ ์๋ณ์๋ฅผ ๊ฐ๋ ๋ฐ์ดํฐ๊ฐ ๋ด๊ธธ ๊ณต๊ฐ์ ๋ง๋ ๋ค.
๋ฉ๋ชจ๋ฆฌ ๋ณํ
- ์์์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ 1003 ๋ฒ์ง์
a
๋ผ๋ ์ด๋ฆ(์๋ณ์)์ ๊ฐ๋ ๊ณต๊ฐ์ด ํ ๋น ๋จ
๋ฐ์ดํฐ ํ ๋น
์ฝ๋ ์์
let a;
a = 'abc';
let a = 'abc';
- 1๋ฒ ์ฒ๋ผ ๋จ๊ณ๋ฅผ ๋๋ ์ ํ๋ ๊ฒ๊ณผ 2๋ฒ ์ฒ๋ผ ๋์์ ํ๋ ๊ฒ ๋ชจ๋ JavaScript ์์ง์์ ํ๋ ๋์์ ๊ฐ์
- ๋ณ์ a์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น
- ๋ณ์ a์ ๋ฉ๋ชจ๋ฆฌ ์ฐพ๊ธฐ
- ํด๋น ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ 'abc' ๋ฅผ ์ ์ฅ
- ์์ ๊ณผ์ ์ฒ๋ผ ๋ ๊ฒ ๊ฐ์ง๋ง, ์ค์ ๋ ํด๋น ์์น(a)์ ๊ฐ์ ์ง์ ๋ฐ์ดํฐ('abc')๋ฅผ ์ ์ฅํ๋ ๊ฒ์ด ์๋๋ผ ๋ฐ์ดํฐ๋ฅผ ๋ณ๋์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๊ณ ํด๋น ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์ ๊ฐ์ ์ ์ฅํ๋ ๋ฐฉ์
๋ฉ๋ชจ๋ฆฌ ๋ณํ
- @5004 ๋ฒ์ง์ 'abc' ๊ฐ์ ์ ์ฅ
- ๋ณ์ a์ ๋ฉ๋ชจ๋ฆฌ ์ฐพ๊ธฐ(@1003)
- ํด๋น ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ 'abc'๊ฐ ์ ์ฅ ๋ ์ฃผ์(@5004)๋ฅผ ์ ์ฅ
๋ฐ์ดํฐ๊ฐ ์ ์ฅ ๋ ์ฃผ์๋ฅผ ์ ์ฅํ๋ ์ด์
- ์์ ๋ก์ด ๋ฐ์ดํฐ ๋ณํ๊ณผ ํจ์จ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌํ๊ธฐ ์ํจ
- ๋ง์ฝ ๊ฐ์ ์ง์ ์ ์ฅํ๋ค๋ฉด, ํด๋น ๊ณต๊ฐ์ ๋์ด๊ฐ๋ ๋ฐ์ดํฐ๋ก ๋ณํ ํ ๊ฒฝ์ฐ ๊ณต๊ฐ์ ๋๋ฆฌ๋ ์์
ํ์
- ํด๋น ๊ณต๊ฐ์ ์ ๋ค๋ก ์ฌ์ ๊ณต๊ฐ์ด ์๋ค๋ฉด ๋ฌธ์ ์๊ฒ ์ง๋ง, ์ฌ์ ๊ณต๊ฐ์ด ์์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฅผ ์ ๋ถ ์ฎ๊ธฐ๋ ์ฐ์ฐ ๋ถ๊ฐํผ ํจ
- ๊ฒฐ๊ตญ ๋ณ์์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๋์ ๊ณต๊ฐ์ ๋๋์ด ์ ์ฅํ๋ ๊ฒ์ด ํจ์จ์ ์ผ๋ก ๋ฐ์ดํฐ ๋ณํ์ ์ฒ๋ฆฌํ๋๋ฐ ์ต์
๋ฐ์ดํฐ ๋ณํ
์ฝ๋ ์์
let a = 'abc';
a = 'abcdef';
- ๋ณ์ a๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ฌธ์์ด 'abc'๊ฐ ์ ์ฅ ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ์ ์ฅ
- ๋ฉ๋ชจ๋ฆฌ์ 'abcdef'๋ฅผ ์ ์ฅํ๊ณ ํด๋น ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์๋ฅผ ๋ณ์ a์ ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ ๋ฎ์ด ์์
๋ฉ๋ชจ๋ฆฌ ๋ณํ
- @5005๋ฒ์ง ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ 'abcdef'๋ฅผ ์ ์ฅ
- ๋ณ์ a์ ๋ฉ๋ชจ๋ฆฌ ์ฐพ๊ธฐ (@1003)
- ํด๋น ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ @5005๋ก ๊ต์ฒด
๋ณ์ ์์ญ๊ณผ ๋ฐ์ดํฐ ์์ญ ๋ถ๋ฆฌ์ ์ฅ์
- ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ณด๋ค ํจ์จ์ ์ผ๋ก ์ฌ์ฉ
- ์์ : 500๊ฐ์ ๋ณ์๋ฅผ ์์ฑํ๊ณ ๋ชจ๋ ๋ณ์์ ๋์ผํ๊ฒ ์ซ์ 5๋ฅผ ํ ๋นํ๋ค๊ณ ๊ฐ์
- ๋ณ์ ์์ญ์ ์ง์ ๊ฐ์ ์ ์ฅ ํ ๊ฒฝ์ฐ : 500 (๋ณ์ ๊ฐ์) * 8 (์ซ์ ์ ์ฅ์ ํ์ํ ๋ฉ๋ชจ๋ฆฌ) = 4,000 Bytes
- ๋ฐ์ดํฐ ์์ญ์ ์ ์ฅํ๊ณ ์ฃผ์๋ฅผ ์ ์ฅ ํ ๊ฒฝ์ฐ : 500 (๋ณ์ ๊ฐ์) * 2 (์ฃผ์ ์ ์ฅ์ ํ์ํ ๋ฉ๋ชจ๋ฆฌ, ๊ฐ์ ) + 8 (์ซ์ ์ ์ฅ์ ํ์ํ ๋ฉ๋ชจ๋ฆฌ) = 1,008 Bytes
๊ธฐ๋ณธํ ๋ฐ์ดํฐ์ ์ฐธ์กฐํ ๋ฐ์ดํฐ
๋ถ๋ณ๊ฐ (Immutable Value)
- ๋ณ์์ ์์๋ฅผ ๊ตฌ๋ถ ์ง๋ ์์ : ๋ณ์ ์์ญ ๋ฉ๋ชจ๋ฆฌ์ ๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ
- ๋ถ๋ณ์ฑ ์ฌ๋ถ๋ฅผ ๊ตฌ๋ถ ์ง๋ ์์ : ๋ฐ์ดํฐ ์์ญ ๋ฉ๋ชจ๋ฆฌ์ ๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ
- ๊ธฐ๋ณธํ ๋ฐ์ดํฐ(Number, String, Boolean, Null, Undefined, Symbol)๋ค์ ๋ชจ๋ ๋ถ๋ณ๊ฐ
์ฝ๋ ์์
let a = 'abc;
a = a + 'def';
let b = 5;
let c = 5;
b = 7;
๋ฉ๋ชจ๋ฆฌ ๋ณํ
- ๋ณ์ a์ ๋ฉ๋ชจ๋ฆฌ(@1003) ๊ฐ์ ๋ฌธ์์ด 'abc'๊ฐ ์ ์ฅ ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์(@5004)๋ฅผ ์ ์ฅ
- ๋ณ์ a์ ๋ฉ๋ชจ๋ฆฌ(@1003) ๊ฐ์ ๋ฌธ์์ด 'abcdef'๊ฐ ์ ์ฅ ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์(@5005)๋ก ๊ต์ฒด
- ๋ณ์ b์ ๋ฉ๋ชจ๋ฆฌ(@1004) ๊ฐ์ ์ซ์ 5๊ฐ ์ ์ฅ ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์(@5002)๋ฅผ ์ ์ฅ
- ๋ณ์ c์ ๋ฉ๋ชจ๋ฆฌ(@1005) ๊ฐ์ ์ซ์ 5๊ฐ ์ ์ฅ ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์(@5002)๋ฅผ ์ ์ฅ
- ๋ณ์ b์ ๋ฉ๋ชจ๋ฆฌ(@1004) ๊ฐ์ ์ซ์ 7์ด ์ ์ฅ ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์(@5003)๋ก ๊ต์ฒด
๊ฐ๋ณ๊ฐ (Mutable Value) - ์ฐธ์กฐํ ๋ฐ์ดํฐ์ ํ ๋น
์ฝ๋ ์์
let obj1 = {
a: 1,
b: 'bbb'
};
๋ฉ๋ชจ๋ฆฌ ๋ณํ
- ๋ณ์ obj1์ ๋ฉ๋ชจ๋ฆฌ(@1002) ํ ๋น
- ๋ฐ์ดํฐ({a:1, b: 'bbb'})๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๋ฉ๋ชจ๋ฆฌ(@5001) ํ ๋น
- ํด๋น ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ค๊ณ ๋ณด๋ ์ฌ๋ฌ ํ๋กํผํฐ๋ก ์ด๋ค์ง ๋ฐ์ดํฐ ์ธ ๊ฒ์ ์๊ฒ ๋จ.
- ํ๋กํผํฐ๋ฅผ ๋ณ๋๋ก ์ ์ฅํ๊ธฐ ์ํด ๊ฐ์ฒด @5001์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ณ๋๋ก ๋ง๋ค๊ณ , ํด๋น ์์ญ ์ฃผ์(@7103 ~ ?)๋ฅผ @5001 ์ ๊ฐ์ ์ ์ฅ
- ํ๋กํผํฐ a์ ๋ฉ๋ชจ๋ฆฌ(@7103)์ ์ซ์ 1์ด ์ ์ฅ ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์(@5003)๋ฅผ ์ ์ฅ
- ํ๋กํผํฐ b์ ๋ฉ๋ชจ๋ฆฌ(@7104)์ ๋ฌธ์์ด 'bbb'๊ฐ ์ ์ฅ ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์(@5004)๋ฅผ ์ ์ฅ
๊ฐ๋ณ๊ฐ - ์ฐธ์กฐํ ๋ฐ์ดํฐ์ ํ๋กํผํฐ ์ฌํ ๋น
- ๊ธฐ๋ณธํ ๋ฐ์ดํฐ์ ์ฐจ์ด๋ '๊ฐ์ฒด์ ๋ณ์(ํ๋กํผํฐ) ์์ญ'์ด ๋ณ๋๋ก ์กด์ฌํ๋ ์
- ๋ฐ์ดํฐ ์์ญ์ ์ ์ฅ ๋ ๋ชจ๋ ๊ฐ์ ๋ถ๋ณ๊ฐ
- ๋ณ์ ์์ญ์ ์ ์ฅ ๋ ๊ฐ์ ๊ฐ๋ณ๊ฐ
- ๋ถ๋ณ๊ฐ์ด ๋ค์ด๊ฐ์ผ ๋๋ ๋ฐ์ดํฐ์์ญ์ ๊ฐ๋ณ๊ฐ์ ๊ฐ๋ ๊ฐ์ฒด ํ๋กํผํฐ ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ์ฐธ์กฐํ ๋ฐ์ดํฐ๋ ๊ฐ๋ณํ๋ค๊ณ ํํ
์ฝ๋ ์์
let obj1 = {
a: 1,
b: 'bbb'
};
obj1.a = 2;
๋ฉ๋ชจ๋ฆฌ ๋ณํ
- obj1์ ์ ์ฅ ๋ ๋ฉ๋ชจ๋ฆฌ(@5001)์ ๊ฐ์๋ ๋ณํ๊ฐ ์์
- obj1์ ํ๋กํผํฐ a๊ฐ ์ ์ฅ ๋ ์ฃผ์(@7103) ๊ฐ์ ์ซ์ 2๊ฐ ์ ์ฅ ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์(@5005)๋ก ๊ต์ฒด
๊ฐ๋ณ๊ฐ - ์ค์ฒฉ ๋ ์ฐธ์กฐํ ๋ฐ์ดํฐ(๊ฐ์ฒด)์ ํ๋กํผํฐ ํ ๋น
์ฝ๋ ์์
let obj = {
x: 3,
arr: [ 3, 4, 5]
};
๋ฉ๋ชจ๋ฆฌ ๋ณํ
- obj๋ฅผ ์ํ ๋ฉ๋ชจ๋ฆฌ(@1002) ํ ๋น
- obj์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๋ฉ๋ชจ๋ฆฌ(@5001) ํ ๋นํ๊ณ obj ๋ฉ๋ชจ๋ฆฌ(@1002) ๊ฐ์ ์ ์ฅ
- ๋ฐ์ดํฐ๊ฐ ๋ค์ค ํ๋กํผํฐ๋ก ์ด๋ค์ง ๊ฒ์ ํ์ธํ์ฌ @5001์ ๋ณ์ ์์ญ์ ํ ๋น(@7103 ~ ?)ํ๊ณ obj์ ๋ฐ์ดํฐ์์ญ ๋ฉ๋ชจ๋ฆฌ(@5001) ์ ์ฅ
- ํ๋กํผํฐ x๋ฅผ ์ํ ๋ฉ๋ชจ๋ฆฌ(@7103)์ ์ซ์ 3์ด ์ ์ฅ ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์(@5002)๋ฅผ ์ ์ฅ
- ํ๋กํผํฐ arr๋ฅผ ์ํ ๋ฉ๋ชจ๋ฆฌ(@7104)์ ์ ์ฅ ํ ๋ฐ์ดํฐ๊ฐ ๋ค์ค ํ๋กํผํฐ๋ก ์ด๋ค์ง ๊ฒ์ ํ์ธํ์ฌ ํด๋น ๊ฐ์ฒด๋ฅผ ์ํ ๋ณ์ ์์ญ์ ํ ๋น(@8104 ~ ?)ํ๊ณ ๋น์ด์๋ ๋ฐ์ดํฐ ์์ญ ๋ฉ๋ชจ๋ฆฌ(@5003)์ ์ ์ฅ
- ํ๋กํผํฐ arr์ ๋ณ์ ์์ญ์ด ์ ์ฅ ๋ ๋ฉ๋ชจ๋ฆฌ(@5003)์ ์ฃผ์๋ฅผ ํ๋กํผํฐ arr๋ฅผ ์ํ ๋ฉ๋ชจ๋ฆฌ(@7104) ๊ฐ์ ์ ์ฅ
- ํ๋กํผํฐ arr๋ด๋ถ์ ํ๋กํผํฐ ์ค 0๋ฒ์งธ์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ ์ซ์ 3์ ์ด๋ฏธ @5002 ๋ฒ์ง์ ์์ด์ ํด๋น ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ @8104์ ์ ์ฅ
- ๋๋จธ์ง 1, 2๋ฒ์งธ ํ๋กํผํฐ์ ๊ฐ์ ์๋กญ๊ฒ ํ ๋นํ์ฌ ๊ฐ๊ฐ @5004, @5005 ๋ฒ์ง์ ์ ์ฅํ๊ณ ํด๋น ์ฃผ์๋ฅผ @8105, @8106 ๊ฐ์ ์ ์ฅ
๊ฐ๋ณ๊ฐ - ์ค์ฒฉ ๋ ์ฐธ์กฐํ ๋ฐ์ดํฐ(๊ฐ์ฒด)์ ํ๋กํผํฐ ์ฌํ ๋น
์ฝ๋ ์์
let obj = {
x: 3,
arr: [ 3, 4, 5]
};
obj.arr = 'str';
๋ฉ๋ชจ๋ฆฌ ๋ณํ
- obj.arr ํ๋กํผํฐ์ ๋ฉ๋ชจ๋ฆฌ(@7104) ๊ฐ์ ๋ฌธ์์ด 'str'์ด ์ ์ฅ ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์(@5006)์ผ๋ก ๊ต์ฒด
- ๊ฐ์ฒด [3, 4, 5] ๋ฅผ ์ํด ์ฌ์ฉ๋์๋ ๋ฉ๋ชจ๋ฆฌ (@5003, @8104 ~)๋ GC(๊ฐ๋น์ง ์ปฌ๋ ํฐ)์ ์๊ฑฐ ๋์์ด ๋จ
๋ณ์ ๋ณต์ฌ ๋น๊ต
์ฝ๋ ์์
let a = 10;
let b = a;
let obj1 = { c: 10, d: 'ddd' };
let obj2 = obj1;
๋ฉ๋ชจ๋ฆฌ ๋ณํ
- ๋จ์ ๋ณต์ฌ๋ ๋ณ๋ค๋ฅธ ์ฐจ์ด๊ฐ ์์
๋ณ์ ๋ณต์ฌ ํ ํ๋กํผํฐ ๋ณ๊ฒฝ
์ฝ๋ ์์
let a = 10;
let b = a;
let obj1 = { c: 10, d: 'ddd' };
let obj2 = obj1;
b = 15;
obj2.c = 20;
- ๋ณต์ฌํ๊ณ ํ๋ฉด ํ๋กํผํฐ ๋ณ๊ฒฝ ์ ์๋ณธ์ ์ํฅ์ ์ ๋ฏธ์น ๊ฒ์ ๋๊ธฐ ํจ
- a, b ๊ฐ์ด ๋ค๋ฅด๊ณ , obj1, obj2๊ฐ ๋ค๋ฅธ ๊ฐ์ ๊ฐ์ง๊ณ ์์ด์ผ ํจ
- ํ์ง๋ง ์ค์ ๋ก ๊ทธ๋ ์ง ์์
๋ฉ๋ชจ๋ฆฌ ๋ณํ
- ๊ธฐ๋ณธํ ๋ฐ์ดํฐ ๋ณ์์ธ a, b์ ๊ฒฝ์ฐ์๋ b์ ๋ฉ๋ชจ๋ฆฌ(@1002) ๊ฐ์ด ์ซ์ 15๊ฐ ์ ์ฅ ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์(@5004)๋ก ๋ณ๊ฒฝ ๋จ. ๊ทธ๋์ a !== b ์ฑ๋ฆฝ
- ์ฐธ์กฐํ ๋ฐ์ดํฐ ๋ณ์์ธ obj1, obj2์ ๊ฒฝ์ฐ์๋ obj2์ ๋ฉ๋ชจ๋ฆฌ(@1004)์๋ ์ ํ ๋ณํ๊ฐ ์๊ณ , ํ๋กํผํฐ c๊ฐ ์ ์ฅ ๋ ๋ฉ๋ชจ๋ฆฌ(@7103)์ ๊ฐ์ด ์ซ์ 20์ด ์ ์ฅ ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์(@5005)๋ก ๋ณ๊ฒฝ ๋จ.
- ๊ทธ๋ฐ๋ฐ obj1๊ณผ obj2์ ๋ฉ๋ชจ๋ฆฌ(@1003, @1004) ๊ฐ์๋ ์ ํ ๋ณํ๊ฐ ์๊ธฐ ๋๋ฌธ์ obj1 !== obj2๋ ์ฑ๋ฆฝํ์ง ์์
๋ณ์ ๋ณต์ฌ ํ ๊ฐ์ฒด ์์ฒด๋ฅผ ๋ณ๊ฒฝ
- ์์ ์์ ์ ๋ค๋ฅด๊ฒ ์ด๋ฒ์๋ ์์ ๊ฐ์ฒด ์์ฒด๋ฅผ ์๋กญ๊ฒ ๋ง๋ค์ด์ ๋ณ๊ฒฝ
์ฝ๋ ์์
let a = 10;
let b = a;
let obj1 = { c: 10, d: 'ddd' };
let obj2 = obj1;
b = 15;
obj2 = { c: 20, d: 'ddd' };
๋ฉ๋ชจ๋ฆฌ ๋ณํ
- ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์ํ ๋ณ์ ์์ญ(@8204 ~ ?)์ด ์๋กญ๊ฒ ํ ๋น
- ํด๋น ๋ณ์ ์์ญ์ ์ ์ฅ ํ ๋ฐ์ดํฐ ์์ญ(@5006)๋ ์๋กญ๊ฒ ํ ๋น
- ๊ทธ ๊ฐ์ obj2 ๋ฉ๋ชจ๋ฆฌ(@1004) ๊ฐ์ ์ ์ฅ
- ์๋ก ๋ฐ๋ผ๋ณด๋ ๊ฐ์ฒด ์์ฒด๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ obj1 !== obj2 ์ฑ๋ฆฝ
๋ถ๋ณ ๊ฐ์ฒด(immutable object)
- ๋ถ๋ณ ๊ฐ์ฒด๋ React.js, Vue.js, Angular.js ๋ฟ๋ง ์๋๋ผ ํจ์ํ ํ๋ก๊ทธ๋จ, ๋์์ธ ํจํด์์๋ ๋ฑ์ฅํ๋ ์ค์ํ ๊ธฐ์ด ๊ฐ๋
- ์ฐธ์กฐํ ๋ฐ์ดํฐ์ '๊ฐ๋ณ'์ ๋ฐ์ดํฐ ์์ฒด๊ฐ ์๋๋ผ ๋ด๋ถ ํ๋กํผํฐ๋ฅผ ๋ณ๊ฒฝํ ๋ ์ฑ๋ฆฝ
๋ถ๋ณ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ
- ๋ด๋ถ ํ๋กํผํฐ๋ฅผ ๋ณ๊ฒฝํ ํ์๊ฐ ์์ ๋ ๋ง๋ค ๋งค๋ฒ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ์ฌํ ๋น ํ๊ธฐ๋ก ๊ท์น์ ์ ํจ
- ์๋์ผ๋ก ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๋๊ตฌ๋ฅผ ํ์ฉ
- immutable.js, immer.js, immutability-helper ๋ฑ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ES6์ spread operator, Object.assign ๋ฉ์๋ ๋ฑ
๋ถ๋ณ ๊ฐ์ฒด๊ฐ ํ์ํ ๊ฒฝ์ฐ
- ๊ฐ์ผ๋ก ์ ๋ฌ ๋ฐ์ ๊ฐ์ฒด์ ๋ณ๊ฒฝ์ ๊ฐํ๋๋ผ๋ ์๋ณธ ๊ฐ์ฒด๋ ๋ณํ์ง ์์์ผ ๋๋ ๊ฒฝ์ฐ
๊ฐ์ฒด์ ๊ฐ๋ณ์ฑ์ ๋ฐ๋ฅธ ๋ฌธ์ ์ ์์
let user = {
name: 'Seongil',
gender: 'male'
};
const changeName = (user, newName) => {
let newUser = user;
newUser.name = newName;
return newUser;
}
const user2 = changeName(user, 'modolee');
if (user !== user2) {
console.log('์ ์ ์ ๋ณด๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค.');
}
console.log(user.name, user2.name);
console.log(user === user2);
- ๊ฒฐ๊ณผ ํ์ธ - ๊ฐ๋ฐ์ ๋๊ตฌ console์ ์ฐํ๋ ๋ด์ฉ ํ์ธ
- ์ด๋ฆ์ ๋๊ธฐ๋ฉด์ ๊ธฐ์กด ์ ์ ๋ฅผ ๋ณต์ฌํ์ฌ ์๋ก์ด ์ ์ ๋ฅผ ์์ฑํ๊ณ ์ถ์์ผ๋ ๊ธฐ์กด ์ ์ ์ด๋ฆ๊น์ง ๋ณ๊ฒฝ ๋จ
๊ฐ์ฒด์ ๊ฐ๋ณ์ฑ์ ๋ฐ๋ฅธ ๋ฌธ์ ์ ํด๊ฒฐ ์์
let user = {
name: 'Seongil',
gender: 'male'
};
const changeName = (user, newName) => {
return {
name: newName,
gender: user.gender
};
}
const user2 = changeName(user, 'modolee');
if (user !== user2) {
console.log('์ ์ ์ ๋ณด๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค.');
}
console.log(user.name, user2.name);
console.log(user === user2);
- ๊ฒฐ๊ณผ ํ์ธ
- ๊ธฐ์กด ์ ์ ์ ๋ณด๋ ์ ์ง๋๊ณ ์๋ก์ด ์ ์ ๋ ์์ฑ ๋จ
- ํ์ง๋ง user.gender๋ฅผ ์ง์ ์
๋ ฅํด์ผ ๋๋ ๋ถํธํจ์ด ์์
- ํ๋กํผํฐ๊ฐ ๋ง์ ๊ฒฝ์ฐ์ ๋ฌธ์ ๊ฐ ๋จ
๊ธฐ์กด ์ ๋ณด๋ฅผ ๋ณต์ฌํด์ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ ํจ์ ์์ (์์ ๋ณต์ฌ)
let user = {
name: 'Seongil',
gender: 'male'
};
const copyObject = (target) => {
let result = {};
for (const prop in target) {
result[prop] = target[prop];
}
return result;
}
const user2 = copyObject(user);
user2.name = 'modolee';
if (user !== user2) {
console.log('์ ์ ์ ๋ณด๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค.');
}
console.log(user.name, user2.name);
console.log(user === user2);
- ๊ฒฐ๊ณผ ํ์ธ
- for ๋ฌธ์ ์ด์ฉํด์ target ๊ฐ์ฒด์ ํ๋กํผํฐ๋ค์ ๋ณต์ฌ
- ์์ ๋ณต์ฌ๋ง ์ํํ์ฌ ์์ฌ์
- ๊ถ๊ธ์ฆ์ด ์๊ฒจ Spread operator๋ ๋์ผํ๊ฒ ์์ ๋ณต์ฌ๋ฅผ ์คํํ ๊น?๋ฅผ ์คํํด ๋ด
- user์ favorite ํ๋กํผํฐ๋ฅผ ์ถ๊ฐํด์ ๋ฐฐ์ด๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฃ์
- ์ ์ ๋ณต์ฌ ์ดํ์ favorite.push๋ฅผ ์คํ
- ๊ธฐ์กด ์ ์ ์ favorite๋ ํจ๊ป ๋ณ๊ฒฝ ๋จ (์์ ๋ณต์ฌ๊ฐ ์ผ์ด๋จ)
- ๊ฒฐ๊ณผ ํ์ธ
์์ ๋ณต์ฌ์ ๊น์ ๋ณต์ฌ
- ์์ ๋ณต์ฌ (shallow copy) : ๋ฐ๋ก ์๋ ๋จ๊ณ์ ๊ฐ๋ง ๋ณต์ฌํ๋ ๋ฐฉ๋ฒ
- ์ค์ฒฉ ๋ ๊ฐ์ฒด์์ ์ฐธ์กฐํ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ ๋ ํ๋กํผํฐ๋ฅผ ๋ณต์ฌํ ๋ ๊ทธ ์ฃผ์ ๊ฐ๋ง ๋ณต์ฌ
- ํด๋น ํ๋กํผํฐ์ ๋ํ ์๋ณธ๊ณผ ์ฌ๋ณธ์ด ๋ชจ๋ ๋์ผํ ์ฐธ์กฐํ ๋ฐ์ดํฐ์ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํด
- ์ฌ๋ณธ์ ๋ฐ๊พธ๋ฉด ์๋ณธ๋ ๋ฐ๋๊ณ , ์๋ณธ์ ๋ฐ๊พธ๋ฉด ์ฌ๋ณธ๋ ๋ฐ๋
- ๊น์ ๋ณต์ฌ (deep copy) : ๋ด๋ถ์ ๋ชจ๋ ๊ฐ๋ค์ ํ๋ํ๋ ์ฐพ์์ ์ ๋ถ ๋ณต์ฌํ๋ ๋ฐฉ๋ฒ
์ค์ฒฉ ๋ ๊ฐ์ฒด์ ๋ํ ์์ ๋ณต์ฌ ์์
const copyObject = (target) => {
let result = {};
for (const prop in target) {
result[prop] = target[prop];
}
return result;
};
let user = {
name: 'Seongil',
urls: {
linkedin: 'http://linkedin.com/in/modolee',
github: 'http://github.com/modolee',
blog: 'http://velog.io/@modolee'
}
};
let user2 = copyObject(user);
user2.name = 'modolee';
console.log(user.name === user2.name);
user.urls.blog = 'https://medium.com/@modolee';
console.log(user.urls.blog === user2.urls.blog);
user2.urls.linkedin = '';
console.log(user.urls.linkedin === user2.urls.linkedin);
- ๊ฒฐ๊ณผ ํ์ธ
- user์ urls ๊ฐ์ฒด์ ํ๋กํผํฐ ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด user2๋ก ํจ๊ป ๋ณ๊ฒฝ๋๊ณ , ๋ฐ๋๋ ๋ง์ฐฌ๊ฐ์ง
์ค์ฒฉ ๋ ๊ฐ์ฒด์ ๋ํ ๊น์ ๋ณต์ฌ ์์
const copyObject = (target) => {
let result = {};
for (const prop in target) {
result[prop] = target[prop];
}
return result;
};
let user = {
name: 'Seongil',
urls: {
linkedin: 'http://linkedin.com/in/modolee',
github: 'http://github.com/modolee',
blog: 'http://velog.io/@modolee'
}
};
let user2 = copyObject(user);
user2.urls = copyObject(user.urls);
user2.name = 'modolee';
console.log(user.name === user2.name);
user.urls.blog = 'https://medium.com/@modolee';
console.log(user.urls.blog === user2.urls.blog);
user2.urls.linkedin = '';
console.log(user.urls.linkedin === user2.urls.linkedin);
- user๋ง ๋ณต์ฌํ๋ ๊ฒ์ด ์๋๋ผ urls๋ ๋ณ๋๋ก ๋ณต์ฌ
- ๊ฒฐ๊ณผ ํ์ธ
๊ฐ์ฒด์ ๊น์ ๋ณต์ฌ๋ฅผ ์ํํ๋ ๋ฒ์ฉ ํจ์ ์์
const copyObjectDeep = (target) => {
let result = {};
if (typeof target === 'object' && target !== null) {
for (const prop in target) {
result[prop] = copyObjectDeep(target[prop]);
}
} else {
result = target;
}
return result;
};
let user = {
name: 'Seongil',
urls: {
linkedin: 'http://linkedin.com/in/modolee',
github: 'http://github.com/modolee',
blog: ['http://velog.io/@modolee', 'https://medium.com/@modolee']
}
};
let user2 = copyObjectDeep(user);
user2.name = 'modolee';
console.log(user.name === user2.name);
user.urls.blog[1] = 'https://steemit.com/@modolee';
console.log(user.urls.blog[1] === user2.urls.blog[1]);
user2.urls.linkedin = '';
console.log(user.urls.linkedin === user2.urls.linkedin);
console.log(user);
console.log(user2);
- ์ฌ๊ท์ ์ผ๋ก ํจ์๋ฅผ ํธ์ถํ๋ฉฐ ๋ด๋ถ์ ๋ชจ๋ ๊ฐ์ฒด๋ค์ ๋ณต์ฌ
- ๋ฐฐ์ด์ ๊ฒฝ์ฐ ์ด์ง ๋ค๋ฅด๊ฒ ํํ ๋์์ง๋ง, ์ฌ์ฉ์๋ ์ง์ฅ์ด ์์
- ๊ฒฐ๊ณผ ํ์ธ
JSON์ ํ์ฉํ ๊ฐ๋จํ ๊น์ ๋ณต์ฌ ์์
const copyObjectViaJson = (target) => {
return JSON.parse(JSON.stringify(target));
};
let user = {
name: 'Seongil',
urls: {
linkedin: 'http://linkedin.com/in/modolee',
github: 'http://github.com/modolee',
blog: ['http://velog.io/@modolee', 'https://medium.com/@modolee']
}
};
let user2 = copyObjectViaJson(user);
user2.name = 'modolee';
console.log(user.name === user2.name);
user.urls.blog[1] = 'https://steemit.com/@modolee';
console.log(user.urls.blog[1] === user2.urls.blog[1]);
user2.urls.linkedin = '';
console.log(user.urls.linkedin === user2.urls.linkedin);
console.log(user);
console.log(user2);
- ๊ฐ์ฒด๋ฅผ JSON ๋ฌธ๋ฒ์ผ๋ก ํํ ๋ ๋ฌธ์์ด๋ก ์ ํํ๋ค๊ฐ ๋ค์ JSON ๊ฐ์ฒด๋ก ์ ํํ๋ฉด ์๋ก์ด ๊ฐ์ฒด๊ฐ ์์ฑ
- ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์๋กญ๊ฒ ํ ๋นํ ๊ฒ๊ณผ ๊ฐ์ ํจ๊ณผ๊ฐ ์์
- ๋ค๋ง ์จ๊ฒจ์ง ํ๋กํผํฐ์ธ proto ์ getter/setter ๋ฑ๊ณผ ๊ฐ์ด JSON์ผ๋ก ๋ณ๊ฒฝํ ์ ์๋ ํ๋กํผํฐ๋ ๋ฌด์ ๋จ
- httpRequest๋ก ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ ๋ ๋ฑ ์์ํ ์ ๋ณด๋ง ๋ค๋ฃฐ ๋ ์ ์ฉ
- Function์ ๋ณต์ฌ๊ฐ ์๋จ
- ๊ฒฐ๊ณผ ํ์ธ
undefined์ null
- undefined, null ๋ชจ๋ '์์'์ ๋ํ๋ด๋ ๊ฐ
- ์๋ฏธ๋ ๊ฐ์ง๋ง ๋ฏธ๋ฌํ ์ฐจ์ด๊ฐ ์์
์๋์ผ๋ก undefined๋ฅผ ๋ถ์ฌํ๋ ๊ฒฝ์ฐ
let a;
console.log(a);
let obj = { a: 1 };
console.log(obj.a);
console.log(obj.b);
const func = () => {};
const c = func();
console.log(c);
- ๊ฐ์ ๋์
ํ์ง ์์ ๋ณ์, ์ฆ ๋ฐ์ดํฐ ์์ญ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ง์ ํ์ง ์์ ์๋ณ์์ ์ ๊ธํ ๋
- ๊ฐ์ฒด ๋ด๋ถ์ ์กด์ฌํ์ง ์๋ ํ๋กํผํฐ์ ์ ๊ทผํ๋ ค๊ณ ํ ๋
- return ๋ฌธ์ด ์๊ฑฐ๋ ํธ์ถ๋์ง ์๋ ํจ์์ ์คํ ๊ฒฐ๊ณผ
undefined์ ๋ฐฐ์ด
- ๊ฐ์ ๋์
ํ์ง ์์ ๋ณ์์ ๊ฒฝ์ฐ undefined๋ฅผ ๋ถ์ฌํ์ง๋ง, ๋ฐฐ์ด์์๋ ์กฐ๊ธ ํน์ดํ๊ฒ ๋์
let arr1 = [];
arr1.length = 3;
console.log(arr1);
let arr2 = new Array(3);
console.log(arr2);
let arr3 = [undefined, undefined, undefined];
console.log(arr3);
- ๋ฐฐ์ด์์๋ ๊ฐ์ ๋์
ํ์ง ์์ ๊ฒฝ์ฐ, ๊ณต๊ฐ์ ํ๋ณดํ์ง๋ง ์ด๋ค ๊ฐ๋ ํ ๋น๋์ง ์์
- ๊ฒฐ๊ณผ ํ์ธ
๋น ์์(Empty)๋ฅผ ํฌํจํ ๋ฐฐ์ด์ ์ํ
- ๋น ์์๋ ์ํ์ ๊ด๋ จ ๋ ๋ง์ ๋ฐฐ์ด ๋ฉ์๋๋ค์ ์ํ ๋์์์ ์ ์ธ
let arr1 = [undefined, 1];
let arr2 = [];
arr2[1] = 1;
arr1.forEach((value, index) => { console.log(value, index); });
arr2.forEach((value, index) => { console.log(value, index); });
console.log(arr1.map((value, index) => { return value + index }));
console.log(arr2.map((value, index) => { return value + index }));
console.log(arr1.filter((value) => { return !value; }));
console.log(arr2.filter((value) => { return !value; }));
console.log(arr1.reduce((accumulator, value, index) => { return accumulator + value + index; }, ''));
console.log(arr2.reduce((accumulator, value, index) => { return accumulator + value + index; }, ''));
- ๋ช
์์ ์ผ๋ก undefined๋ฅผ ๋์
ํ ๊ฒฝ์ฐ์๋ ๊ฐ์ผ๋ก ์ทจ๊ธํด์ ์ํ
- ๋์
ํ์ง ์์ ๊ฒฝ์ฐ์๋ ๊ฐ์ด ์๋ ๊ฒ์ผ๋ก ์ทจ๊ธํ์ฌ ์ํ์์ ์ ์ธ
- ๊ฒฐ๊ณผ ํ์ธ
๋ฐฐ์ด์ ๋ํ ํธ๊ฒฌ
- ๋ฐฐ์ด์ ๋ฌด์กฐ๊ฑด length ํ๋กํผํฐ์ ๊ฐ์๋งํผ ๋น ๊ณต๊ฐ์ ํ๋ณดํ๊ณ ๊ฐ ๊ณต๊ฐ์ ์ธ๋ฑ์ค๋ฅผ ์ด๋ฆ์ผ๋ก ์ง์ ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐ. ๋น์ฐํ ์ด๋ ๊ฒ ๋์ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐ ํ์
- ์ค์ ๋ก๋ ๊ฐ์ฒด์ ๋ง์ฐฌ๊ฐ์ง๋ก ํน์ ์ธ๋ฑ์ค์ ๊ฐ์ ์ง์ ํ ๋ ๋น๋ก์ ๋น ๊ณต๊ฐ์ ํ๋ณดํ๊ณ ์ธ๋ฑ์ค๋ฅผ ์ด๋ฆ์ผ๋ก ์ง์ ํ๊ณ ๋ฐ์ดํฐ์ ์ฃผ์ ๊ฐ์ ์ ์ฅ
undefined์ ๊ตฌ๋ถ
์ฌ์ฉ์๊ฐ ๋ช
์์ ์ผ๋ก ๋ถ์ฌํ ๊ฒฝ์ฐ
- ์ค์กด ๋ฐ์ดํฐ. undefined ๋ผ๋ ๋ฐ์ดํฐ ํ์ ๊ฐ
- ํ๋กํผํฐ๋ ๋ฐฐ์ด์ ์์๋ ๊ณ ์ ์ ํค ๊ฐ(ํ๋กํผํฐ ์ด๋ฆ)์ด ์ค์กดํ๊ฒ ๋์ด ์ํ์ ๋์์ด ๋จ
๋น์ด์๋ ์์์ ์ ๊ทผํ๋ ค ํ ๋ ๋ฐํํ๋ ๊ฒฝ์ฐ
- ์ค์กดํ์ง ์๋ ๋ฐ์ดํฐ. ๋ฌธ์ ๊ทธ๋๋ก ๊ฐ์ด ์์
- JavaScript ์์ง์ด ํ๋ ์ ์์ด undefined๋ฅผ ๋ฐํ
- ํด๋น ํ๋กํผํฐ ๋๋ ๋ฐฐ์ด์ ํค ๊ฐ ์์ฒด๊ฐ ์กด์ฌํ์ง ์์์ ์๋ฏธ
undefined์ ์๋ ํ ๋น์ ์ค์ ๋์
- ์
๋ฌธ์์์๋ ๊ฐ์ ๋์
ํ์ง ์์ ๋ณ์๋ฅผ ์ ์ธํ ๋ ์๋์ผ๋ก ๋ณ์์ undefined๋ฅผ ํ ๋นํ๋ค๊ณ ์ค๋ช
๋จ
- ์ค์ ๋ ๋ณ์ ์ ์ธํ ๋๋ ์๋ฌด ๊ฒ๋ ํ ๋น๋์ง ์๊ณ ๋๋๋ฉฐ, ๋ณ์์ ์ ๊ทผํ ๋ JavaScript ์์ง์ด ์ด์ฉ ์ ์์ดundefined๋ฅผ ๋ฐํ
์ฝ๋ ์์
- ๊ทธ๋ฌ๋ฉด ์ค์ ๋ก ๋ช
์์ ์ผ๋ก ๋ถ์ฌํ ๊ฒฝ์ฐ์ JavaScript ์์ง์ด ํ๋ ์ ์์ด ๋ฐํํ๋ ๊ฒฝ์ฐ์ undefined๋ ๋ค๋ฅด๊ฒ ์ทจ๊ธ๋๋ ๊ฒ์ธ๊ฐ? ๋ฅผ ํ์ธํ๊ธฐ ์ํ ์ฝ๋
let a;
let b = undefined;
console.log(a);
console.log(a == b);
console.log(a === b);
undefined์ null์ ๋น๊ต
const n = null;
console.log(typeof n);
console.log(n == undefined);
console.log(n == null);
console.log(n === undefined);
console.log(n === null);
- ๊ฒฐ๊ณผ ํ์ธ
- null์ ํ์
์ด object๋ก ๋์ค๋ ๊ฒ์ JavaScript์ ๋ฒ๊ทธ
- '์์'์ ํํ ํ๊ณ ์ ํ ๋๋ null์ ์ฌ์ฉ
- ์ฌ์ฉ์๊ฐ ํํํ '์์'(null) ์ธ์ง ํ์ธํ๊ณ ์ ํ ๋๋ === ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด์ ๋น๊ต
์ ๋ฆฌ
- ๋ฐ์ดํฐ ํ์
- ๊ธฐ๋ณธํ : ๋ถ๋ณ๊ฐ
- ์ฐธ์กฐํ : ๊ฐ๋ณ๊ฐ
- ๋ณ์ : ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฐ์ดํฐ๊ฐ ๋ด๊ธธ ์ ์๋ ๊ณต๊ฐ
- ์๋ณ์ : ๋ณ์์ ์ด๋ฆ
- ๋ณ์ ์ ์ธ
- ๋ฉ๋ชจ๋ฆฌ์ ๋น ๊ณต๊ฐ์ ์๋ณ์ ์ ์ฅ
- ๊ทธ ๊ณต๊ฐ์ ๊ฐ์ผ๋ก undefined๋ฅผ ํ ๋น
- ๋ณ์์ ๊ธฐ๋ณธํ ๋ฐ์ดํฐ ํ ๋น
- ๋ณ๋์ ๊ณต๊ฐ์ ๋ฐ์ดํฐ ์ ์ฅ
- ๊ทธ ๊ณต๊ฐ์ ์ฃผ์๋ฅผ ๋ณ์์ ๊ฐ ์์ญ์ ํ ๋น
- ๋ณ์์ ์ฐธ์กฐํ ๋ฐ์ดํฐ ํ ๋น
- ์ฐธ์กฐํ ๋ฐ์ดํฐ ๋ด๋ถ ํ๋กํผํฐ๋ค์ ์ํ ๋ณ์ ์์ญ์ ๋ณ๋๋ก ํ๋ณด
- ํ๋ณด ๋ ์ฃผ์๋ฅผ ๋ณ์์ ์ฐ๊ฒฐ
- ์์ ํ๋ณดํ ๋ณ์ ์์ญ์ ๊ฐ ํ๋กํผํฐ์ ์๋ณ์๋ฅผ ์ ์ฅ
- ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ณ๋์ ๊ณต๊ฐ์ ์ ์ฅํ๊ณ ๊ทธ ์ฃผ์๋ฅผ ์๋ณ์๋ค๊ณผ ๋งค์นญ
- ์ฐธ์กฐํ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ณ๊ฐ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํด์๋ '๊น์ ๋ณต์ฌ'๊ฐ ํ์
- '์์'์ ๋ํ๋ด๋ ๊ฐ
- undefined : ์ด๋ค ๋ณ์์ ๊ฐ์ด ์กด์ฌํ์ง ์์ ๊ฒฝ์ฐ ๋ฐํํ๋ ๊ฐ
- null : ์ฌ์ฉ์๊ฐ ๋ช
์์ ์ผ๋ก '์์'์ ํํํ๊ธฐ ์ํด ๋์
ํ ๊ฐ
- ๋ช
์์ ์ผ๋ก '์์'์ ํํํ๊ธฐ ์ํด undefined์ ์ฌ์ฉํ๋ ๊ฒ์ ์ง์
์ฐธ๊ณ
์๋ ํ์ธ์ !ํฌ์คํ ์ ์ฝ์ด๋ณด์์ต๋๋ค.
ํญ์ ๊ณต๋ถํ๋ฉด์, object์ ์์ฑ์ง๋ฒ์๋ ์ด๋ค์์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์ ์ฌ๋์ด์์๊น ๊ถ๊ธํ์์ต๋๋ค.
์ฆ ์ค์ง์ ์ธ value ๊ฐ๋ค๋ง ์ ์ฅ์ด๋๋์ง.. ์๋๋ฉด ์ด๋ค ๊ฐ์ฒด ๋ด๋ถ์์ ์ฐ๋ ํ๋กํผํฐ(์๋ณ์)์์ฒด๋ฅผ ์ํ ๋ฉ๋ชจ๋ฆฌ๊ณต๊ฐ๋ ํ์ํ๊ฑด์ง.. ์ ์๊ฐ์ ์๋ณ์ ์์ฒด๋ง์ ์ ์ฅํ๋ ๊ณต๊ฐ์ด ๋น์ฐํ ํ์ํ ๊ฒ๊ฐ์๋ฐ ์ด๋์์๋ '์๋ณ์'๋ ๊ทธ๋ฅ ๋ฉ๋ชจ๋ฆฌ์ ๋ถ์ ๋ณ์นญ์ด๋ค ๋ผ๊ณ ๋ง ๋์์๋๋ผ๊ตฌ์... ๊ทธ๋ฐ๋ฐ ์๋ณ์์ด๋ฆ ์์ฒด๋ ๋ฐ์ดํฐ์ด๊ณ , ์ด๋ ๋ฉ๋ชจ๋ฆฌ์ฃผ์์ ์ฐ๊ฒฐ์ด ๋์ด์ ๊ฐ์ ์ ์ฅํ๋ค๋ ์ ๋ณด๊ฐ ๋ด๊ธด ๋ฉ๋ชจ๋ฆฌ๊ณต๊ฐ์ด ์์ด์ผํ์ง์๋? ๊ถ๊ธํ์์ต๋๋ค.
์ธ์ด๋ง๋ค ๋ค๋ฅด๊ฒ ์ง๋ง, object์ ์ฃผ์๋ก ์ ๊ทผํ๋ฉด, ํด๋น object๋ด๋ถ์ ์๋ณ์(ํ๋กํผํฐ)๋ค๋ง์ ์ ์ฅํ๋ ๊ณต๊ฐ์ด ์กด์ฌํ๊ณ , ํ๋กํผํฐ์ ๋งคํ๋๋ ์ฃผ์๊ฐ์ ์ค์ ๋ฐ์ดํฐ๋ค์ด ์ ์ฌ๋๋ ํํ๊ฐ๋๋ค๊ณ ์ดํดํ๋ฉด ๋ ๊น์?