์ด... ์ด๊ฑฐ ์์ด๋ ๊ฒ ์ด๋ ต์ง?
๐ท์ฝ์ด ์๋ฐ์คํฌ๋ฆฝํธ ๋ฝ๊ฐ๊ธฐ ์๋ฆฌ์ฆ๐ท
๋ณ์๋ฅผ ๋ณต์ฌํ ๋, ๊ธฐ๋ณธํ ๋ฐ์ดํฐ์ ์ฐธ์กฐํ ๋ฐ์ดํฐ๋ ์ด๋ป๊ฒ ๋ค๋ฅผ๊น?
์ฌ์ค, ๊ธฐ๋ณธํ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ๋๊ฑด (์)ํธ์์ ํ๋ฒ ๋ค๋ค๋ดค๋ค!
let a = 10;
let b = a;
a = 15;
์์๋๋ก, a ๋ผ๋ ๋ณ์์ ์ซ์ 10์ด ์ ์ฅ๋ ๋ฐ์ดํฐ ์์ญ์ ์ฃผ์๊ฐ์ ํ ๋นํ๊ณ ,
b ๋ผ๋ ๋ณ์์ a ๋ณ์์ ๊ฐ(์ซ์ 10์ ์ฃผ์๊ฐ)์ ๊ทธ๋๋ก ํ ๋นํ๋ค.
๋ง์ง๋ง์ผ๋ก ๋ณ์ a์ ๊ฐ์ 15๋ก ์ฌํ ๋น ํ๋ค.
๊ทธ๋ผ ์ปดํจํฐ์์ ์ด๋ฐ ์ผ์ด ์ผ์ด๋๋ค!
ํ๋์ ๊ธ์จ๋ถํฐ ๋ณด๋ฉด, ๋ณ์ a์ b์ ๊ฐ์ผ๋ก @5003
์ด ์ค๋ณต๋์ ํ ๋น๋์๋ค๊ฐ,๋ณ์ a์ ๊ฐ๋ง @5004
๋ก ๋ณ๊ฒฝ๋์๋ค.
๊ธฐ๋ณธํ ๋ฐ์ดํฐ๋ ๋ณ๊ฒฝํ ์ ์๋ ๊ฐ์ด๋ฏ๋ก, ์ปดํจํฐ๋ a = 15
๋ผ๋ ๋ช
๋ น์ @5003
์ ์ ์ฅ๋ ๋ฐ์ดํฐ ์์ฒด๋ฅผ 15๋ก ๋ณ๊ฒฝํ๋๊ฒ ์๋, 15๋ผ๋ ๋ฐ์ดํฐ๋ฅผ ์๋ก ์ ์ฅํ ๊ฒ์ด๋ค.
์ฐธ์กฐํ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
let obj1 = { name: 'solmi', age: 26 };
let obj2 = obj1;
@5003
์ฃผ์๊ฐ์ ๊ฐ์ผ๋ก ๊ฐ์ง๋ obj1 ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
๊ทธ ํ์ obj2 ๊ฐ์ฒด๋ฅผ ์์ฑํ๋๋ฐ, ์ด๋ obj1๊ณผ ๊ฐ๋ค๊ณ ํ๋ค.
๊ทธ๋ผ ์ปดํจํฐ๋ ์ฐ์ , obj2๋ฅผ ๋ด์ ๋ณ์๋ฅผ ์์ฑํ๊ณ (@1003
), ๋ณ์ ์์ญ์์ ์๋ณ์๊ฐ obj1์ธ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํด์(@1002
) ๊ทธ ๊ฐ์ (@5003
) @1003
์ ๊ฐ์ ๊ทธ๋๋ก ํ ๋นํ๋ค.
console.log( obj1 === obj2 ) // true
์ด๋ค. ์๋ํ๋ฉด, ์๋ณ์๋ ๋ค๋ฅด์ง๋ง ๊ฐ์ ์ฃผ์๊ฐ @5003
์ ๊ฐ์ผ๋ก ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ!
์ฌ๊ธฐ๊น์ง๋ ๊ธฐ๋ณธํ ๋ฐ์ดํฐ์ ๋์ผํ๋ค. ๊ทธ๋ผ obj2์ ํ๋กํผํฐ๋ฅผ ๋ณ๊ฒฝํด๋ณด๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
obj2.age = 27;
27์ด๋ผ๋ ๋ฐ์ดํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์์ผ๋ฏ๋ก, ์๋ก ๋ฐ์ดํฐ ์์ญ์ ์ถ๊ฐํ๋ค. @5006
obj2์ age๋ผ๋ ํ๋กํผํฐ์ ๊ฐ์ด ๋ฐ๋์ด์ผ ํ๋ฏ๋ก, obj2๊ฐ ์ฐธ์กฐํ๋ @5003
โ @7001 ~ ?
์ ๊ฐ์ ์๋ณ์๊ฐ age์ธ @7002
์ ๊ฐ์ ์๋ก ์ถ๊ฐํ @5006
์ผ๋ก ๋ฐ๊พผ๋ค.
์? ๊ทผ๋ฐ ๊ฐ์ฒด @5003 ์ ๋ณ์์์ญ
์ ๊ฐ์ ๋ฐ๋์์ง๋ง, ์ค์ ๋ณ์์์ญ์์ obj1 ๊ณผ obj2 ๊ฐ ์ฐธ์กฐํ๋ ์ฃผ์๊ฐ์ ๋ณํ์ง ์์๋ค.
์ค์ ๋ณ์ ์์ญ์ ๊ฐ์ด ๋ฐ๋๋ ๊ธฐ๋ณธํ ๋ฐ์ดํฐ์ ์ฐจ์ด๋ฅผ ์๊ฒ ๋๊ฐ?!
๋ ํ์คํ ์๊ธฐ ์ํด console์ ์ฐ์ด๋ณด์!
console.log(obj1); // { name: 'solmi', age: 27 }
console.log(obj2); // { name: 'solmi', age: 27 }
์!!! obj2์ age๋ง ๋ณ๊ฒฝํ๊ณ ์ถ์๋๋ฐ, obj1์ age๊น์ง ๋ฐ๋์ด๋ฒ๋ ธ๋ค.
์ค์ ๋ก ๋ณ๊ฒฝ๋๊ฑด ๊ฐ์ฒด @5003 ์ ๋ณ์์์ญ
์ด๊ณ , ์ด๋ฅผ obj1, obj2๊ฐ ๋์ผํ๊ฒ ์ฐธ์กฐํ๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค!
์ฆ, ์ฌ๋ณธ์ด ๋ฐ๋๋ฉด ์๋ณธ๋ ๋ฐ๋๊ณ ... ์๋ณธ์ด ๋ฐ๋๋ฉด ์ฌ๋ณธ๋ ๋ฐ๋๋ค๐ฑ๐ฑ๐ฑ
๋ฌผ๋ก obj2 = obj1
์ผ๋ก ๋ณต์ฌํ์ง ๋ง๊ณ , ์๋์ฒ๋ผ ์๋ก์ด ๊ฐ์ฒด ์์ฒด๋ฅผ ํ ๋นํ๋ฉด ๋ฌธ์ ์์ด ๋์ํ๋ค.
let obj1 = { name: 'solmi', age: 26 };
let obj2 = { name: 'solmi', age: 26 };
obj2.age = 27;
console.log(obj1); // { name: 'solmi', age: 26 }
console.log(obj2); // { name: 'solmi', age: 27 }
์ฆ, ์ฐธ์กฐํ ๋ฐ์ดํฐ ์์ฒด๋ฅผ ๋ณ๊ฒฝํ ๊ฒฝ์ฐ๊ฐ ์๋, ๊ทธ ๋ด๋ถ์ ํ๋กํผํฐ๋ฅผ ๋ณ๊ฒฝํ ๊ฒฝ์ฐ์ ์ฐธ์กฐํ ๋ฐ์ดํฐ๋ ๊ฐ๋ณ๊ฐ์ด๋ค.
๊ฐ์ฒด ๋ด๋ถ์ ํ๋กํผํฐ๋ฅผ ๋น๊ตํ๋ฉด์ ๋์์ ์๋ณธ ๊ฐ์ฒด์ ๋ณต์ฌํ ์ฌ๋ณธ ๊ฐ์ฒด๊ฐ ์๋ก ์ํฅ์ ๋ผ์น๋ฉด ์๋ ๋, ์๋ฅผ ๋ค์ด ์ฌ๋ณธ ๊ฐ์ฒด์ ์ฌ์ฉ์๋ง๋ค ๋ค๋ฅธ ์ ๋ณด๋ฅผ ์ ๋ ฅ๋ฐ๊ณ ์๋ณธ ๊ฐ์ฒด์ ๋น๊ตํด์ผ ํ๋ค๋๊ฐ ๋ฑ์ ์ํฉ์ด ์ค๋ฉด, ๋งค๋ฒ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ์ฌํ ๋นํ๋ ์์ผ๋ก ๊ฐ์ฒด์ ๋ถ๋ณ์ฑ์ ์งํฌ ์ ์์ ๊ฒ์ด๋ค.
๊ทธ๋ ๋ค๊ณ ์์ ์์์ฒ๋ผ ๋งค๋ฒ ์ ๋ ๊ฒ ์ค๋ณต๋๋ ๊ฐ์ฒด๋ฅผ ์ผ์ผ์ด ์ ๋ ฅํด์ผ ํ๋ค๋ฉด, ๋๋ฌด๋๋ฌด ๋นํจ์จ์ ์ด๊ณ ์ ์ง๋ณด์๋ ๊ฐ๋ฅ๊ฐ์ ์ฝ๋ ์์ฑ โ
๊ทธ๋ ๋ค๋ฉด ์ด๋ป๊ฒ ํจ์จ์ ์ผ๋ก ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ๋ฉด์ ๊ฐ์ฒด์ ๋ถ๋ณ์ฑ์ ์งํฌ ์ ์์๊น?
๋ถ๋ณ ๊ฐ์ฒด(immutable object)๋ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ๋ ์์ํฌ์์๋ฟ๋ง ์๋๋ผ ํ๋ก๊ทธ๋๋ฐ, ๋์์ธ ํจํด ๋ฑ์์๋ ๊ธฐ์ด๊ฐ ๋๋ ์ค์ํ ๊ฐ๋ ์ด๋ค.
๋์ ๊ฒฝ์ฐ๋ React (JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ) ๋ฅผ ์ฌ์ฉํ๋ฉด์, state ๊ฐ์ฒด์ ๊ฐ์ ๋ฐ๊ฟ ๋, ๋ถ๋ณ์ฑ์ ์ ์งํ๊ธฐ์ํด ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ ์ด์ฉ๊ตฌ์ ์ฉ๊ตฌ~
ํ๋ ์ค๋ช
์ ๋ฃ๊ณ ๋จธ๋ฆฟ์์ด ??? ์ธ ์ํ๋ก ์๋ฌดํผ ์ํค๋๋๋ก ์ฝ๋ฉ์ ํ๋ ๊ฒ ๊ฐ๋ค.
React์์ ๋ถ๋ณ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ์ด์ ๋ ์ข ํ ๋ฉํ ๋ ๋ธ๋ก๊ทธ์ ์ฌ๋ฐ๋ ์์์ ํจ๊ป ์ ์ ๋ฆฌ๋์ด ์์ด์ ๊ฐ์ ธ์๋ดค๋ค!
์ค์ ๋ก state ๊ฐ์ฒด์ this.state.name = 'solmi'
๊ฐ์ ์์ผ๋ก ์ง์ ์ ๊ทผํด์ ํ๋กํผํฐ ๊ฐ์ ๋ฐ๊พธ๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
React.js ์ปดํฌ๋ํธ๋ state, props์ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋ ๋ง๋ค(= ์ปดํฌ๋ํธ๊ฐ ์ ๋ฐ์ดํธ ๋ ๋๋ง๋ค) ๋ฆฌ๋ ๋๋งํด์ ํ๋ฉด์ ๋ณ๊ฒฝํด์ฃผ๋๋ฐ, state ๊ฐ์ฒด์ ์ง์ ์ ๊ทผํด์ ํ๋กํผํฐ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด ๋ด๋ถ์ ๊ฐ์ ๋ณ๊ฒฝ๋๋๋ผ๋, ์ค์ state ๊ฐ์ฒด๊ฐ ์ฐธ์กฐํ๋ ์ฃผ์๊ฐ์ ๋์ผํ๊ธฐ ๋๋ฌธ์ ๋ณํ๋ฅผ ๊ฐ์งํ์ง ๋ชปํ๋ค.
์ฆ, ๋ฆฌ๋ ๋๋ง ํ์ง ์๊ธฐ ๋๋ฌธ์ ํ๋ฉด์ ๋ณ๊ฒฝํ ์ ์๋ค.
React.js ์์ ๋ฐฐ์ด์ ์์๋ฅผ ์ถ๊ฐํ๊ณ ์ ํ ๋ push()
(์๋ณธ ๋ฐฐ์ด์ ์ถ๊ฐ) ๊ฐ ์๋ concat()
(์ด์ ๋ฐฐ์ด๊ณผ ๋์ ๋ฐฐ์ด์ ๋ณํฉํด์ ์ ๋ฐฐ์ด์ ๋ฐํ) ์ ์ฌ์ฉํ๋ ์ด์ ๋ ์ด์ ๊ฐ๋ค.
๊ทธ๋ ๋ค๋ฉด ๋ถ๋ณ ๊ฐ์ฒด๋ ๋์ฒด ์ด๋ป๊ฒ ๋ง๋ค ์ ์๋๊ฑธ๊น? ๋ฐฉ๋ฒ์ ๋ค์ํ๋ค!
{ ...state }
Object.assign
๋ฑ์ ๋ฉ์๋ํ๋์ฉ ๋ฏ์ด๋ณด์!!!!!!!!......๊ธฐ ์ ์, ๋จผ์ ์์ ๋ณต์ฌ vs ๊น์ ๋ณต์ฌ๋ผ๋ ๊ฐ๋ ์ ๋ํด ์ด์ง ์ง๊ณ ๋์ด๊ฐ์!
์ฌ๊ธฐ์ ๋งํ๋ ๋ณต์ฌ๋, obj2 = obj1
์ฒ๋ผ ์ฃผ์๊ฐ๋ง ๊ทธ๋๋ก ๊ฐ์ ธ์ค๋๊ฒ ์๋, ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํด์ ์ฌํ ๋น ํ๋๊ฒ์ ๋งํ๊ณ ,
๋จ๊ณ๋, ๊ฐ์ฒด์์ ๊ฐ์ฒด๊ฐ ํฌํจ๋ ์ค์ฒฉ ๊ฐ์ฒด์์ ์ค์ํ๊ฒ ๋ด์ผํ๋๋ฐ, ๊ฐ์ฒด ์์ ๊ฐ์ ํ์ธํ ๋๋ ํ๋จ๊ณ ๋ ๊ฑฐ์ณ์ผ ํ๋ค.
let obj = {
name: 'solmi', // 1๋จ๊ณ
age: 26, // 1๋จ๊ณ
text: [ { 1: "a" }, { 2: "b" }, { 3: "c" } ], // text: [] = 1๋จ๊ณ // [ {}, {}, {} ] = 2๋จ๊ณ // { 1: "a" }, { 2: "b" }, { 3: "c" } = 3๋จ๊ณ
like: {
food: 'chicken',
game: 'Battleground'
} // like: {} = 1๋จ๊ณ // { food: 'chicken', game: 'Battleground' } = 2๋จ๊ณ
}
1๋จ๊ณ๊ฐ ๊ฐ์ฅ ๋ฐ๊นฅ ๋จ๊ณ, 3๋จ๊ณ๊ฐ ๊ฐ์ฅ ์์ชฝ ๋จ๊ณ์ธ ์ด๋ฐ ์์๊ฐ ์๋ค๊ณ ๊ฐ์ ํ์๋!
1๋จ๊ณ์์ ์ปดํจํฐ๊ฐ ํ์ธํ ์ ์๋ ์ ๋ณด๋ ๋ค์๊ณผ ๊ฐ๋ค.
let obj = {
name: @5002,
age: @5003,
text: @5004, // @5004 => ์๋ณ์๊ฐ text์ธ ๋ฐฐ์ด(๊ฐ์ฒด)์ ์ฐธ์กฐํ๋ ์ฃผ์๊ฐ
like: @5005 // @5004 => ์๋ณ์๊ฐ like์ธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ์ฃผ์๊ฐ
}
์ฆ, obj
๋ผ๋ ๊ฐ์ฒด๋ ์์ ๋ณต์ฌ ํ๋ค๋ฉด ์ฐ๋ฆฌ๋ text๋ผ๋ ๋ฐฐ์ด๊ณผ like๋ผ๋ ๊ฐ์ฒด๊ฐ ์ฐธ์กฐ๋์ด์๋ ์ฃผ์๊ฐ๋ง ๊ฐ์ ธ์ค๋๊ฒ์ด์ง ์ค์ text ๋ฐฐ์ด์ ํ๋กํผํฐ์ like ๊ฐ์ฒด์ ํ๋กํผํฐ๋ฅผ ๋ณต์ฌํด์ค๋ ๊ฒ์ด ์๋๋ค.
์๋ณ์๊ฐ text์ธ ๋ฐฐ์ด์ ๋ณต์ฌํด์ค๊ธฐ ์ํด์๋ 2๋จ๊ณ๋ก ๋ค์ด๊ฐ์ ๋ณต์ฌํด์์ผ ํ๋๋ฐ, ๊ฐ๋ง๋ณด๋ฉด ์ด ๋ฐฐ์ด ๋ํ ์ค์ฒฉ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ ๋ด๋ถ์ { 1: "a" }, { 2: "b" }, { 3: "c" }
๋ผ๋ ๊ฐ์ฒด๋ค๋ก ์ด๋ฃจ์ด์ง ํ๋กํผํฐ ๋ณต์ฌํด์ค๊ธฐ ์ํด์๋ 3๋จ๊ณ๊น์ง ๋ค์ด๊ฐ์ผ ํ๋ ๊ฒ!
๐คท๐ปโโ๏ธ ์ค์ ๋ก obj
๋ฅผ ์์ ๋ณต์ฌ ํด์จํ์ ์ฌ์ฉํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
const obj = {
name: 'solmi',
age: 26,
text: [ { 1: "a" }, { 2: "b" }, { 3: "c" } ],
like: {
food: 'chicken',
game: 'Battleground'
}
}
const shallowCopyObj = { ...obj };
์ ๊ฐ ์ฐ์ฐ์๋ก obj
๋ฅผ ์์ ๋ณต์ฌ ํด์, shallowCopyObj
๋ผ๋ ๋ณ์์ ํ ๋นํ๋ค.
( ์ ๊ฐ ์ฐ์ฐ์์ ๋ํ ์ค๋ช
์ ์๋์์ ์ด์ด์ง๋๋ฐ, ๊ฐ์ฒด์ ์์ ๋ณต์ฌ๋ฅผ ์ํํ ์ ์๋ค. )
๋ฌธ์ ์์ด ์ ๋ณต์ฌ๋๋ค!
์ด์ ์ฌ๋ณธ์ธ shallowCopyObj
์ ํ๋กํผํฐ ๊ฐ์ ๋ณ๊ฒฝํด๋ณด์!
shallowCopyObj.name = 'coder';
shallowCopyObj.like.food = 'ramen';
๋ณด๋ค์ํผ 1๋จ๊ณ์ ์๋ name
์ ์๋ณธ๊ณผ ๋ค๋ฅด๊ฒ ์ฌ๋ณธ์์๋ง ๋ณ๊ฒฝ๋์์ง๋ง,
2๋จ๊ณ์ธ like.food
๋ ์ฌ๋ณธ์์๋ง ๋ณ๊ฒฝํ๋๋ฐ๋ ์๋ณธ๊น์ง ๋ฐ๋์๋ค.
2๋จ๊ณ ๋ถํฐ๋ ๋ณต์ฌ๊ฐ ์๋, ๋จ์ํ ์๋ณธ์ ์ฐธ์กฐ๋ง ํ๊ธฐ ๋๋ฌธ์ ์๋ณธ, ์ฌ๋ณธ์ด ํจ๊ป ๋ณ๊ฒฝ๋๋ ๊ฒ์ด๋ค.
๋ฐ๋ก ์ด๋ฐ ๋ฌธ์ ๋๋ฌธ์ ์ค์ฒฉ ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํด์ผ ํ ๋๋ ์ด์ฉ ์ ์์ด ๊น์ ๋ณต์ฌ๊ฐ ํ์ํ๋ค๐
์ฑ ์์๋ ์ฌ์ฉ์ ์ ์ ํจ์๋ฅผ ์ด์ฉํด์ ๊น์ ๋ณต์ฌ๋ฅผ ์ค๋ช ํ๋๋ฐ, ์ด๋ ์๋์์ ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช ํ๋ฉด์ ์ด์ด์ ๋งํ๋ ค๊ณ ํ๋ค!
ES6๋ถํฐ ๋ฑ์ฅํ ์ ๊ฐ ์ฐ์ฐ์๋ JavaScript ์ฝ๋๋ฅผ ๋์ฑ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋ค.
์ ๊ฐ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ฉด ๋ฐฐ์ด์ด๋ ๋ฌธ์์ด๊ณผ ๊ฐ์ด ๋ฐ๋ณต ๊ฐ๋ฅํ ๋ฌธ์๋ฅผ 0๊ฐ ์ด์์ ์ธ์ (ํจ์๋ก ํธ์ถํ ๊ฒฝ์ฐ) ๋๋ ์์ (๋ฐฐ์ด ๋ฆฌํฐ๋ด์ ๊ฒฝ์ฐ)๋ก ํ์ฅํ์ฌ, 0๊ฐ ์ด์์ ํค-๊ฐ์ ์์ผ๋ก ๊ฐ์ฒด๋ก ํ์ฅ์ํฌ ์ ์์ต๋๋ค.
MDN์์๋ ์ ๊ฐ ์ฐ์ฐ์๋ฅผ ์ด๋ ๊ฒ ์ค๋ช
ํ๋ค.
...์๋, ์ค๋ช
์คํ๋....? ์ ๋ง์ด์ง ์ฝ์์๊ฐ ์๋ค๐!!!
๊ทธ๋ฌ๋๊น ์ฝ๊ฒ ๋งํ๋ฉด, ๋ฐฐ์ด ๋๋ ๊ฐ์ฒด์ ์์ ํ๋ํ๋๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ํ์ดํค์น๋ ๋๋...?
์ด๊ฑด ์ฝ๋๋ฅผ ๋ณด๋ฉด ๋ฐ๋ก ์ดํด๊ฐ ๊ฐ๋ค!
const arr = [ 1, 2, 3, 4, 5 ];
console.log( arr ); // [ 1, 2, 3, 4, 5 ]
console.log( ...arr ); // 1 2 3 4 5
200 OK๐??
์ ๊ฐ ์ฐ์ฐ์๋ ์ฃผ๋ก ์๋ณธ์ ๋ณต์ฌํ์ฌ ์ ๊ฐ์ฒด๋ ๋ฐฐ์ด์ ๋ง๋ค๋ฉด์ ๊ฐ์ ๋ฐ๊พธ๊ฑฐ๋, ํน์ ๋ค๋ฅธ ๊ฐ์ฒด, ๋ฐฐ์ด๊ณผ ๋ณํฉํ ๋ ๋ง์ด ์ฐ์ด๋๋ฐ ์์ ์์์ฒ๋ผ ์ฌ์ฉํ๋ฉด ์์ ๋ณต์ฌ ๊ธฐ๋ฅ๋ ์ํํ๋ค!
// ์๋ณธ์ ๋ณต์ฌํ ํ, ๊ฐ์ ๋ฐ๊พธ๊ธฐ
const origin = { name: 'solmi', age: 26 };
const copy = { ...origin, age: 27 };
console.log(copy) // { name: 'solmi', age: 27 };
// ์๋ณธ๊ณผ ์ฌ๋ณธ์ ๋ณํฉํ๊ธฐ
const origin = { name: 'solmi', age: 26 };
const copy = { ...origin, bloodType: 'AB', like: 'JavaScript..?' };
console.log(copy) // { name: 'solmi', age: 26, bloodType: 'AB', like: 'JavaScript..?' };
๋จ, ์๋ณธ์ ๋ณต์ฌํด์ ๊ฐ์ ๋ณต์ฌํ ๋๋ ์์ ๋ณต์ฌ๋ง ๋ ์ํ์ด๊ธฐ ๋๋ฌธ์ 1๋จ๊ณ์ ์์นํ ํ๋กํผํฐ์ ๊ฐ๋ง ๋ณ๊ฒฝํด์ผ ํ๋ค.
์๋ณธ์ ์ ์งํ๋ฉด์ ์ฌ๋ณธ์ ๊น์ ๋จ๊ณ์ ๊ฐ๋ง ๋ณต์ฌํด์ผ ํ๋ค๋ฉด ์ ๊ฐ ์ฐ์ฐ์๊ฐ ์๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํด์์ผ ํ๋ค.
๐๐ปโโ๏ธ TIP!! ์๋ณธ๊ณผ ์ฌ๋ณธ์ ๋ณํฉํ ๋, ์ ๊ฐ์ฐ์ฐ์๋ฅผ ์ด๋์ ์ฐ๋์ ๋ฐ๋ผ ์ถ๋ ฅ๋๋ ์์๊ฐ ๋ฌ๋ผ์ง๋ค!
const origin = [ 'old', 'old2', 'old3' ]
const copy = [ ...origin, 'new..?' ]
// [ 'old', 'old2', 'old3', 'new..?' ]
const copy = [ 'new..?', ...origin ]
// [ 'new..?', 'old', 'old2', 'old3' ]
origin
์ ๊ธฐ์กด ๋ฐ์ดํฐ,'new..?'
๋ฅผ ์๋ก์ด ๋ฐ์ดํฐ๋ผ๊ณ ๊ฐ์ ํ์ ๋,
์๋ก์ด ๋ฐ์ดํฐ๊ฐ ์ต์๋จ์ ๋ณด์ฌ์ ธ์ผ ํ๋์ง, ํน์ ๊ฐ์ฅ ํ๋จ์ ๋ณด์ฌ์ ธ์ผ ํ๋์ง ๋ชฉ์ ์ ๋ง๊ฒ ์ ๊ฐ ์ฐ์ฐ์๋ฅผ ํ์ฉํ๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ํ๋ ์์๋ก ์ฝ๊ฒ ์ ๋ ฌํ ์ ์๋ค!
Object.assign() ๋ฉ์๋๋ ์ด๊ฑฐํ ์ ์๋ ํ๋ ์ด์์ ์ถ์ฒ ๊ฐ์ฒด๋ก๋ถํฐ ๋์ ๊ฐ์ฒด๋ก ์์ฑ์ ๋ณต์ฌํ ๋ ์ฌ์ฉํ๊ณ , ๋์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
์ถ์ฒ ๊ฐ์ฒด๋, ๋ณต์ฌํ๊ณ ์ถ์ ์๋ณธ ๊ฐ์ฒด๋ฅผ ๋งํ๊ณ ๋์ ๊ฐ์ฒด๋, ์ถ์ฒ ๊ฐ์ฒด์ ํจ๊ป ๋ณํฉ๋์ ๋ฐํ๋ ์ฌ๋ณธ ๊ฐ์ฒด๋ฅผ ๋งํ๋ค.
Object.assign(target, sources)
์ด๋ ๊ฒ ์์ฑํ๋ฉฐ, target์ด ๋์ ๊ฐ์ฒด, sources๊ฐ ์ถ์ฒ ๊ฐ์ฒด์ด๋ค! (์ฐธ๊ณ ๋ก sources๋ ์ฌ๋ฌ๊ฐ ์ ์ด๋ ๋จ)
const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };
const source2 = { d: 9, e: 7 };
console.log(Object.assign(target, source, source2)); // { a: 1, b: 4, c: 5, d: 9, e: 7 }
์์๋ฅผ ๋ณด๋ฉด ์ฝ๋ค!
๋์ผํ key๊ฐ ์กด์ฌํ๋ฉด, ๋์ ๊ฐ์ฒด < ์ถ์ฒ ๊ฐ์ฒด ๋ก ๋ฎ์ด์ฐ์ฌ์ง๊ณ , ์ถ์ฒ ๊ฐ์ฒด ์ค์์๋ key๊ฐ์ด ์ค๋ณต๋๋ฉด ๊ฐ์ฅ ๋ง์ง๋ง์ ๋ค์ด์จ ์ธ์์ ๊ฐ์ผ๋ก ๋ฎ์ด์ฐ์ฌ์ง๋ค.
( ์ ์์ ์์๋ ๋์ ๊ฐ์ฒด์ b:2
๊ฐ ์ถ์ฒ ๊ฐ์ฒด์ b:4
๋ก ๋ฎ์ด์ฐ์ฌ์ก๋ค. )
๋์ ๊ฐ์ฒด๊ฐ ๋ฐ๋ก ์๊ณ Object.assign()
์ผ๋ก ๊ทธ๋ฅ ์๋ณธ์ ๋ณต์ฌํ๊ธฐ๋ง ํ ๋ ์ด๋ป๊ฒ ํ ๊น?
const source = { a: 1, b: 2 };
const copy = Object.assign({}, source);
console.log(copy); // { a: 1, b: 2 }
๋จ, ์ด๋๋ ๊ฐ์ฒด์ ์์ ๋ณต์ฌ๋ง ์ํํ๊ธฐ ๋๋ฌธ์ ์ค์ฒฉ ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ ๋๋ ๋ค๋ฅธ ๋์์ ์ฌ์ฉํด์ผ ํ๋ค!
๋ค์์ ์ฝ์ด ์๋ฐ์คํฌ๋ฆฝํธ ์ฑ ์์ ์๊ฐํ๋ ๊น์ ๋ณต์ฌ๋ฅผ ์ํํ๋ ๋ฒ์ฉ ํจ์์ด๋ค.
const copyObjectDeep = target => {
let result = {};
if (typeof target === 'object' && target !== null) {
for (let prop in target) {
result[prop] = copyObjectDeep(target[prop]);
}
} else {
result = target;
}
return result;
}
์ธ์๋ก ๋ค์ด์ค๋ target
์ type์ด 'object'
์ด๋ฉด์, null
์ด ์๋๋ผ๋ฉด (null
๋ object type์ด๊ธฐ ๋๋ฌธ์!)
for in
๊ตฌ๋ฌธ์ ์ด์ฉํด์ target์ key ๊ฐ์ ์ํํ๋ฉด์ copyObjectDee
ํจ์๋ฅผ ์ฌ๊ท์ ์ผ๋ก ํธ์ถํ๊ณ , ๊ฐ์ฒด๊ฐ ์๋๋ผ๋ฉด result
์ ๋ฐ๋ก ์ธ์๋ก ๋ค์ด์จ target
์ ํ ๋นํ๋ ํจ์์ด๋ค.
let originObj = {
name: 'solmi', // 1๋จ๊ณ
age: 26, // 1๋จ๊ณ
text: [ { 1: "a" }, { 2: "b" }, { 3: "c" } ], // text: [] = 1๋จ๊ณ // [ {}, {}, {} ] = 2๋จ๊ณ // { 1: "a" }, { 2: "b" }, { 3: "c" } = 3๋จ๊ณ
like: {
food: 'chicken',
game: 'Battleground'
} // like: {} = 1๋จ๊ณ // { food: 'chicken', game: 'Battleground' } = 2๋จ๊ณ
}
const copyObj = copyObjectDeep(originObj);
์๋ณธ ๊ฐ์ฒด๋ฅผ ์ด ํจ์์ ์ธ์๋ก ์ ๋ฌํด์คฌ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๊ฐ์ copyObj๋ผ๋ ์ฌ๋ณธ์ ํ ๋นํ๋ค.
์๋ณธ ๊ฐ์ฒด๋ ์ค์ฒฉ ๊ฐ์ฒด์์ 1๋จ๊ณ, 2๋จ๊ณ ํ์ธํ ๋ ๋ดค๋ ์์์ด๋ค!
copyObjectDeep
ํจ์๊ฐ ์คํ๋๋ฉด, 1๋จ๊ณ์ธ name, age๋ ์ฐธ์กฐํ ๋ฐ์ดํฐ (=object) ๊ฐ ์๋๊ธฐ ๋๋ฌธ์ if ์กฐ๊ฑด์ ์ถฉ์กฑ์ํค์ง ๋ชปํ๊ณ result์ ๋ฐ๋ก ๊ฐ๊ฐ์ ๊ฐ์ด ํ ๋น๋๋ค.
์ฐธ์กฐํ ๋ฐ์ดํฐ (=object)์ธ text๋ฅผ ๋ง๋๋ ์๊ฐ, target์ type์ด object์ด๋ฉด์ null์ด ์๋๋ผ๋ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ฏ๋ก, copyObjectDeep
ํจ์๊ฐ ์ฌ๊ท์ ์ผ๋ก ์คํ๋๋ค.
์ด text๋ผ๋ ๋ฐฐ์ด์ ๊ฐ ์์๋ key:value
์์ผ๋ก ์ด๋ฃจ์ด์ง ๊ฐ์ฒด์ด๋ฏ๋ก ์ฌ๊ท์ ์ผ๋ก ์คํ๋ copyObjectDeep
ํจ์ ๋ด์์ ๋๋ค์ if ์กฐ๊ฑด์ ๋ง์กฑํ๋ฏ๋ก ๋ค์ copyObjectDeep
ํจ์๊ฐ ์คํ๋๋ค.
์ฆ, ๊ฐ์ฅ ์์ชฝ์ 3๋จ๊ณ์ธ "a"
๋ผ๋ ๊ฐ์ ์ ๊ทผํด์ typeof target === 'object'
๋ผ๋ ์กฐ๊ฑด์ ๋ถ๋ง์กฑํ ๋๊น์ง ์ฌ๊ท ํจ์๊ฐ ์คํ๋๋ฉด์ ๊ฐ๊ฐ์ ํ๋กํผํฐ๋ฅผ result๋ผ๋ ๋ณ์์ ์ฌํ ๋น = ๋ณต์ฌ ํ๋ ๊ฒ์ด๋ค.
์ฐ์!! ์ ๋ณต์ฌ๋๋ค!!!
๐ง ์ฅ??? text ๋ถ๋ถ์ด ๋ญ๊ฐ ์ด์ํ๋?????
copyObjectDeep
ํจ์๋ฅผ ์ฌ๊ท์ ์ผ๋ก ์คํํ๋ฉด์
result[prop] = target[prop]
result์ key ๊ฐ์ผ๋ก target์ key๊ฐ์, result์ value๊ฐ์ผ๋ก target์ value๋ฅผ ํ ๋นํด์ ๊ทธ๋ ๋ค!
๋ฐฐ์ด๋ ๊ฒฐ๊ตญ์ object์ด๋ฏ๋ก...
console.log(typeof originObj.text === typeof copyObj.text)
// true
๊ทธ๋ผ ์ ๋ง 2๋จ๊ณ, 3๋จ๊ณ ํ๋กํผํฐ ๊น์ง ํ๋ํ๋ ๋ณต์ฌํด์จ๊ฒ ๋ง์๊น??
copyObj.text[1][2] = "New!!!";
copyObj.like.food = "ramen";
์ฌ๋ณธ ๊ฐ์ฒด์ ๋ด๋ถ ํ๋กํผํฐ์ ์ ๊ทผํด์ ๊ฐ์ ๋ฐ๊ฟ๋ณด์๋ค!
์ค์ค์ค์ค์ค~~ ์๋ณธ์ ๊ทธ๋๋ก ์ ์ง๋๋ค!!!!!
๐คท๐ปโโ๏ธ ๊น์ ๋ณต์ฌ๋ ๊ฐ์ฒด์ ๋ชจ~~~๋ ์์๋ฅผ ๋ค ๋ณต์ฌํ๋ค?
NO!! ์ฌ์ค ์์ ๋ฐฉ๋ฒ์ผ๋ก๋ ๋ฐ์ดํฐ ํ๋กํผํฐ๋ง ๋ณต์ฌ๋๊ณ , ์ ๊ทผ์ ํ๋กํผํฐ(getter/setter)๋ ๋ณต์ฌ๋์ง ์๋๋ค.
์ ๊ทผ์ ํ๋กํผํฐ๋ฅผ ๋ณต์ฌํ๊ธฐ ์ํด์๋ JavaScript ์ต์ ๋ฌธ๋ฒ์ ์ถ๊ฐ๋Object.getOwnPropertyDescription
๊ฐ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
- ๋ฐ์ดํฐ ํ๋กํผํฐ : ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํ ํ๋กํผํฐ. "๊ฐ์ฒด์ ํ๋กํผํฐ" ๋ผ๊ณ ํ์ ๋ ์ฐ๋ฆฌ๊ฐ ๋ฑ ๋ ์ฌ๋ฆฌ๋! ๊ทธ๊ฒ๋ค์ด ๋ชจ๋ ๋ฐ์ดํฐ ํ๋กํผํฐ
- ์ ๊ทผ์ ํ๋กํผํฐ : ๊ฐ์ด ์์ผ๋ฉฐ, ๋ฐ์ดํฐ ํ๋กํผํฐ๋ฅผ ์ฝ๊ฑฐ๋ ์ธ ๋ ํธ์ถํ๋ ํจ์๋ฅผ ๊ฐ ๋์ ์ง์ ํ ์ ์๋ ํ๋กํผํฐ. ์ฆ, ๊ฐ์ ํ๋(get)ํ๊ณ ์ค์ (set)ํ๋ ํจ์!
const copyObjectViaJSON = target => JSON.parse(JSON.stringify(target));
์ธ์๋ก ๋ฐ์ target์ JSON ๋ฌธ์์ด๋ก ๋ณํํ๋ค๊ฐ ๋ค์ JavaScript ๊ฐ์ฒด๋ก ๋ณํํ๋ ๊ฐ๋จํ ํจ์๋ฅผ ๋ง๋ค์๋ค!
const copyObj = copyObjectViaJSON(originObj);
์ด๋ ๊ฒ ์ฌ์ฉํ๋ค!
JSON ๋ฉ์๋๋ฅผ ์ด์ฉํ๋ copyObjectViaJSON
ํจ์์ ์๋ฆฌ๋, ๊ฐ์ฒด๋ฅผ JSON ๋ฌธ์์ด๋ก ๋ณํํ ๋ ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๊ฐ ์์ด์ง๊ณ , ์ด๋ฅผ ๋ค์ ๊ฐ์ฒด๋ก ๋ณํํ ๋ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋๋๊ฒ์ฒ๋ผ ๋์ํ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฐ๋ฐ JSON ๊ฐ์ฒด์ ๋ฉ์๋๋ฅผ ์ด์ฉํ๋ ๋ฐฉ์์ ๋ ๊ฐ์ง ๋ฌธ์ ์ ์ด ์๋ค!
_proto_
, getter/setter
๋ฑ๊ณผ ๊ฐ์ด JSON์ผ๋ก ๋ณ๊ฒฝํ ์ ์๋ ํ๋กํผํฐ๋ค์ ๋ฌด์๋๋ค.๊ธฐ๋ณธํ ๋ฐ์ดํฐ ํ์ ์์ ๋์๋ ์น๊ตฌ๋ค์ด๋ค!
undefiend๋ ์๋ง ์ต์ํ ๊ฒ์ด๋ค.
์ต์ํ ์๋ฌ.....ใ ใ
undefined
๋ JavaScript ์์ง์ด ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ผ๋ ์๋์ผ๋ก ๋ถ์ฌํ๋ค.
undefined
๋ฅผ ๋ฐํ)์ฌ์ค....JavaScript ์๋ empty
์ด๋ผ๋ ๊ฒ๋ ์๋ค.
์ ํํ empty
๋ถ๋ฅด๋๊ฒ ๋ง๋์ง๋ ๋ชจ๋ฅด๊ฒ ๋ค. empty
๋ ์ด๋ฐ ๊ฒฝ์ฐ์ ์๊ธด๋ค.
const arr = [];
arr.length = 3;
console.log(arr); // [empty ร 3]
๊ทผ๋ฐ ์ด๊ฒ....๊ณฐ๊ณฐํ ์๊ฐํด๋ณด๋ฉด ์ข ์ด์ํ๋ค.
๋ณ์ ์ ์ธ ๊ณผ์ ์ ๊ธฐ์ตํ๋ฉด์ ๊ณผ์ ์ ์ฒ์ฒํ ๋ฐ๋ผ๊ฐ๋ณด์.
์ ์ผ ๋จผ์ , ๋ณ์ ์์ญ์ ๋ณ์๋ฅผ ํ๋ ๋ง๋๋๋ฐ, ์๋ณ์์ ์ด๋ฆ์ arr๋ก ํ๊ณ , ๊ฐ์ ๋ฐฐ์ด์ ๋ํ๋ด๋ ์ฃผ์๊ฐ์ ์ฐธ์กฐํ๋ค.
์ด ์ํ์์ arr์ ์ ๊ทผํด์ length
๋ผ๋ ํ๋กํผํฐ๋ฅผ ์ด์ฉํด์ ๋ฐฐ์ด์ ๊ณต๊ฐ์ 3๊ฐ๋ก ๋ณ๊ฒฝํด์ฃผ์๋ค.
์ฌ๊ธฐ๊น์ง ์๊ฐํ์ ๋, ํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ ์ด๋ฐ ์ํ๊ฐ ๋์์ ๊ฒ ๊ฐ๋ค.
๊ทผ๋ฐ ์ด ๊ทธ๋ฆผ๋๋ก ๋๋ ค๋ฉด,
console.log(arr); // [ undefined, undefined, undefined ]
๊ฐ ์ถ๋ ฅ๋์ด์ผ ํ๋ค.
ํ์ง๋ง, ์ค์ ๋ก๋ ํน์ index์ ๊ฐ์ ์ง์ ํ ๋์ผ ๋น๋ก์ ๋ฉ๋ชจ๋ฆฌ์ ๋น ๊ณต๊ฐ์ ํ๋ณดํ๊ณ , ์๋ณ์๋ฅผ index๋ก, ๊ฐ์ ๋ฐ์ดํฐ ์์ญ์ ์ฃผ์๊ฐ์ผ๋ก ์ ์ฅํ๋ ๋ฑ์ ๋์์ด ์คํ๋๋ค.
์ฆ, ๊ฐ์ด ์ง์ ๋์ง ์์ index๋ ์์ง์ ์กด์ฌํ์ง ์๋ ํ๋กํผํฐ๊ฐ ๋ ๋ฟ์ด๋ค.
์ฌ์ฉ์๊ฐ ๋ช ์์ ์ผ๋ก undefined๋ฅผ ํ ๋นํ์ง ์๋ ์ด์, JavaScript ๊ฐ ๋ฐํํ๋ undefined๋ ์ด๋๊ฐ์ ์ ์ฅ๋ ๊ฐ์ด ์๋๋ผ, ์์ง ์กด์ฌํ์ง ์๋ ํ๋กํผํฐ์ ์ ๊ทผํ์์ ์๋ ค์ฃผ๋ ์ผ์ข ์ ๊ฒฝ๊ณ ์์ธ ๊ฒ์ด๋ค.
console.log(arr[1]) // undefined
๋ค์ ๋งํด ์์ arr์ 1๋ฒ์งธ index์ ์ ๊ทผํ์ ๋ ๋ฐํ๋๋ ์ด undefined๋
์๋ณ์์ ์ด๋ฆ์ด 1, ํ ๋น๋ ๊ฐ์ด undefined์ธ ๊ฒ์ด ์๋๋ผ!
์๋ ์๋ณ์์ ์ ๊ทผํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ ๋ฐํํ ์ ์์ด์ ์ด์ฉ ์ ์์ด ๋ฐํ๋๋ undefined์ธ ๊ฒ!!!
๐๐ปโโ๏ธ ์ฌ์ฉ์๊ฐ ๋ช ์์ ์ผ๋ก undefined๋ฅผ ํ ๋นํ์ง ์๋ ์ด์, JavaScript ๊ฐ ๋ฐํํ๋ ...
๊ทธ๋ ๋ค. ์ฐ๋ฆฌ๋ undefined๋ฅผ ๋ช ์์ ์ผ๋ก ํ ๋นํ ์ ์๋ค.
let a = undefined;
์ด๋ ๊ฒ ์ง์ ํ์๋์ undefined๋ ์๋ณ์๊ฐ a, ๊ฐ์ด undefined์ธ ์ค์กดํ๋ ํ๋กํผํฐ๊ฐ ๋์ด ๋ฒ๋ฆฐ๋ค.
๋ฌผ๋ก ์ฝ๋์์ผ๋ก๋ ์ ํ ๋ฌธ์ ๊ฐ ๋์ง ์๋๋ค.
ํ์ง๋ง ์ฐ๋ฆฌ๋ ์ฌ๋์ด๊ธฐ์.......
์ด๋ ๊ฒ ์ฌ์ฉ์๊ฐ ๋ช ์์ ์ผ๋ก undefined๋ฅผ ํ ๋นํด๋ฒ๋ฆฌ๋ฉด, JavaScript๊ฐ ๋ฐํํ๋ undefined๊ฐ ๊ฐ์ด ์๋ ๋ณ์์ ์ ๊ทผํ ๋ ์ด์ฉ์ ์์ด JavaScript ์์ฒด์์ ๋ฐํํด์ฃผ๋ undefined์ธ์ง, ์๋๋ฉด ์ฐ๋ฆฌ๊ฐ ์ง์ ํ ๊ฐ์ด undefined์ธ ์์ด์ธ์ง ์ ์ ์๊ฒ ๋์ด ๋ฒ๋ฆฐ๋ค.
๊ทธ๋์, ์๋ ๊ฐ์ ๋ช ์์ ์ผ๋ก ๋ํ๋ด๊ณ ์ถ์ ๋undefined
๊ฐ ์๋,null
์ ์ด์ฉํด์ผ ํ๋ค!!
๊ฐ์ด ์์
, ๋น ๊ฐ
์ ๋ช
์์ ์ผ๋ก ๋ํ๋ด๊ณ ์ถ๋ค๋ฉด null
์ ์ฌ์ฉํ๋ฉด ๋๋ค.
๊ทธ๋ฌ๋ผ๊ณ ๋ง๋ค์ด์ง ๋ฐ์ดํฐ ํ์ ์ด๋ค.
ํ๊ฐ์ง ์ฃผ์ํ ์ ์, null
์ type์ด object
๋ผ๋ ๊ฒ!
(๊ทธ๋์, ์์์ ๊น์ ๋ณต์ฌ๋ฅผ ์ํํ๋ ์ฌ์ฉ์ ์ ์ ํจ์ ๋ถ๋ถ์ target !== null
๋ผ๋ ์กฐ๊ฑด์ ์ถ๊ฐ๋ก ๋ฃ์ด์ฃผ์๋ค.)
์ด๋ค ๊ฐ์ด null
์ธ์ง ์๋์ง ์ฒดํฌํ ๋๋ ์ด๋ ๊ฒ ์ผ์น ์ฐ์ฐ์ ===
!==
๋ฅผ ์ด์ฉํด์ ๋น๊ตํด์ฃผ๋ฉด ๋๋ค!
์ถ์ฒ : ์ฝ์ด ์๋ฐ์คํฌ๋ฆฝํธ [์ ์ฌ๋จ]
๊ฐ๋ฐ ์์ด๋ณด ์ฝ๋ฆฐ์ด์
๋๋ค!
์ด ๋ด์ฉ์ ๊ฐ์ข
๊ฐ์&๊ตฌ๊ธ๋ง์ ํตํด ๋ฐฐ์ด ๋ด์ฉ์ ์ ๋ฆฌํ๋ ๊ฒ์ผ๋ก, ์ ๊ฐ ์ดํดํ๊ณ ๋์ด๊ฐ ๊ฐ๋
์ด ํ๋ ธ๊ฑฐ๋ ๋ ๋ณด์ถฉํ ๊ฐ๋
์ด ์๋ค๋ฉด ๋๊ธ ๋จ๊ฒจ์ฃผ์๋ฉด ์ ๋ง ๊ฐ์ฌํ๊ฒ ์ต๋๋ค!!
์..