March 27, 2021
๋ฆฌ์กํธ ํ๋ก์ ํธ๋ ๊ธฐํ ์๊ณ ๋ฆฌ์ฆ์ ํ ๋ ์ฌ์ฉํ๋๋ฐ ๋ญ๊ฐ ์ ๋ฆฌ๊ฐ ์ ๋๋ก ๋์ง ์์ ๋๋์ด๊ธฐ์ ๊ณต๋ถ ๋ฐ ์ ๋ฆฌ๋ฅผ ์งํํด ๋ณธ๋ค.
const name = 'mook'
const age = '25'
const mook2 = {
name: name,
age: age,
}
์ด์ฒ๋ผ key ์ value ์ ์ด๋ฆ์ด ๋์ผํ ๊ฒฝ์ฐ์๋ ๊น๋ํ๊ฒ ํ๋๋ก๋ง ์ถ์ฝํ์ฌ ์์ฑ์ด ๊ฐ๋ฅํ๋ค.
const name = 'mook'
const age = '25'
const mook3 = {
name,
age,
}
const student = {
name: 'Mook',
level: 1,
}
๊ฐ์ฒด์ ํค ๊ฐ์ ์ ๊ทผํ๊ธฐ ์ํด์ ๊ฑฐ์ ํญ์
const name = student.name
const level = student.level
console.log(name, level)
์ด๋ฌํ ์์ผ๋ก ์ง์ ๊ฐ์ฒด.key ๋ก ์ ๊ทผํด์ผ ํ์๋ค. ๊ทธ๋ฌ๋,
const { name, level } = student
์ด๋ ๊ฒ object ์ ํค์ ์ด๋ฆ์ ์ค๊ดํธ ์์ ์ ์ํด ์ฃผ๋ฉด student ๊ฐ์ฒด์ ์๋ name ๊ณผ level ์ value ๊ฐ ์ค๊ดํธ ์์๋ค ์ ์ํ ๊ฒ์ ๋ง๊ฒ ํ ๋น์ด ๋๋ค.
๊ทธ๋ฐ๋ฐ ์ฌ๊ธฐ์ ๋ง์ฝ name ๊ณผ level ์ด ์๋ ๋ค๋ฅธ ๋ณ์ ๋ช ์ผ๋ก ์ ์ํด ์ฃผ๊ณ ์ถ๋ค๋ฉด ์ด๋ป๊ฒ ํ ๊น?
const { name: studentName, level: studentLevel } = student
console.log(studentName, studentLevel)
์ด์ ์๋ก์ด ์ด๋ฆ (๋ณ์๋ช ) ์ผ๋ก ์ ์ธํ๊ธฐ ๋๋ฌธ์ ํด๋น ์ด๋ฆ์ผ๋ก ์ ๊ทผํ ์ ์๋ค.
Destructing ์ ๊ฐ์ฒด ๋ฟ๋ง ์๋๋ผ ๋ฐฐ์ด์์๋ ์ธ ์ ์๋ค.
const animals = ['๐ถ', '๐ธ']
const first = animals[0]
const second = animals[1]
console.log(first, second)
์ด์ฒ๋ผ ๋ฐฐ์ด ๋ด ๊ฐ์ ์ ๊ทผํ๊ธฐ ์ํด ์ซ์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ง๋ง,
const [first, second] = animals
console.log(first, second)
๋ฐฐ์ด์ ๋ค์ด ์๋ ์์์ ๋ง๊ฒ ์ฒซ๋ฒ์งธ ์ ์ธ๋ first ์๋ ๊ฐ์์ง๊ฐ, ๋๋ฒ์งธ ์ ์ธ๋ second ์๋ ๊ณ ์์ด๊ฐ ์์๋๋ก ํ ๋น์ด ๋๋ค.
Destructiong ์ ์ํด object ์๋ ์ค๊ดํธ๋ฅผ, array ์๋ ๋๊ดํธ๋ฅผ ์ฌ์ฉํด ์ฃผ์ด์ผ ํ๋ค.
const obj1 = { key: 'key1' }
const obj2 = { key: 'key2' }
const array = [obj1, obj2]
์์ ์ฝ๋ ์ธ๋ฒ์งธ ์ค์ ๋ณด๋ฉด array ๋ ์ค๋ธ์ ํธ๋ค์ ๋ด๊ณ ์๋ค. ์ด array ๋ฅผ ๋ณต์ฌํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น?
๋ฐฐ์ด์ ๊ณ ์ฐจํจ์ map, forEach ๋ฅผ ์ฌ์ฉํ ์๋ ์์ง๋ง์ spread syntax ๋ก ๊ฐ๋จํ๊ฒ array ๋ฅผ ๋ณต์ฌํ ์ ์๋ค.
const arrayCopy = [...array]
๊ทธ๋ฆฌ๊ณ ๊ธฐ์กด ๋ฐฐ์ด์ ๋ณต์ฌํ๋ฉด์ ์๋ก์ด ๊ฐ๋ ์ถ๊ฐํ๊ณ ์ถ๋ค๋ฉด ์๋์ ๊ฐ์ด ์ถ๊ฐํด ์ค ์๋ ์๋ค.
const arrayCopy2 = [...array, { key: 'key3' }]
์ด์ฒ๋ผ ๊ฐ๋จํ๊ฒ array ๋ฅผ ๋ณต์ฌํ ์ ์๋๋ฐ ์ง๊ณ ๋์ด๊ฐ ์ ์ด ์๋ค.
๋ ๋ฐฐ์ด array ์ arrayCopy ๋ ๋ชจ์์ ๊ฐ์ง๋ง ์๋ก ๋ค๋ฅธ ์ฃผ์๊ฐ์ ์ฐธ์กฐํ๊ธฐ ๋๋ฌธ์,
array === arrayCopy
false ๊ฐ ๋๋ค.
๊ทธ๋ฐ๋ฐ ์ด๊ฒ ๋ณด์ด๋๊ฐ?
array[0] === arrayCopy[0]
true
์ค๋ธ์ ํธ๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ณ์๋ ์ค์ ๋ก object ๋ฅผ ๋ด๊ณ ์๋ ๊ฒ์ด ์๋๋ผ object ๊ฐ ๋ค์ด ์๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์๊ฐ์ ๊ฐ์ง๊ณ ์๋ค.
const obj1 = { key: 'key1' }
const obj2 = { key: 'key2' }
spread syntax ๋ก ๋ณต์ฌํด์จ object ๋ค์ ๊ทธ๋์ ์ค์ ๋ก ๋์ผํ ์ฃผ์๊ฐ์ ๊ฐ๋ฆฌํค๊ณ ์๋ค.
๊ทธ ๋ง์ธ์ฆ์จ ์ฌ๊ธฐ์
obj1.key = 'newKey'
๋ก obj1 ์ key ๋ฐธ๋ฅ๋ฅผ ๋ณ๊ฒฝํ๊ฒ ๋๋ฉด ์ง๊ธ๊น์ง ๋ณต์ฌํด ๋์ ๋ฐฐ์ด ๋ด์ ํด๋น ํค๊ฐ ๋ชจ๋ ๋ฐ๋๊ฒ ๋๋ค.
spread ๋ object ๊ฐ ๊ฐ๋ฆฌํค๋ ์ฃผ์์ ์ฐธ์กฐ๊ฐ๋ง์ ๋ณต์ฌํด์ ๊ฐ์ ธ์ค๋ฏ๋ก ์๋์ object ๋ฅผ ๋ณ๊ฒฝํ๊ฒ ๋๋ฉด ์ด๋ ๋ฏ ์ ๋ถ ์ํฅ์ด ๊ฐ๊ฒ ๋๋ค.
์์ ๋ฐฐ์ด ๋ฟ๋ง ์๋๋ผ object ๋ Copy ํ ์๊ฐ ์๋ค.
const obj4 = { ...obj }
console.log(obj4)
๋ณต์ฌ๋์ด ์ง์ง๋ง ๋ ์ฌ์ด์ ์ฃผ์๊ฐ์ด ๋ค๋ฅด๋ฏ๋ก obj1 === obj4 ๊ฐ false ๋ผ๋ ์ ์ ์ ์ํด์ผ ํ๋ค.
const fruits1 = ['๐', '๐']
const fruits2 = ['๐', '๐ฅ']
์ด ๋ ๋ฐฐ์ด์ ํ๋๋ก ๋ณํฉํ ์ ์๋ค.
์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ์ผ๋ก๋ concat ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด์ง๋ง,
fruits1.concat(fruits2)
// ๊ฒฐ๊ณผ : [('๐', '๐', '๐', '๐ฅ')]
spread operator ๋ฅผ ํตํด ๋ค์๊ณผ ๊ฐ์ด ๊ฐ๋จํ๊ฒ ๋ ๋ฐฐ์ด์ ๋ณํฉํ ์ ์๋ค.
const fruits = [...fruits1, ...fruits2]
// ๊ฒฐ๊ณผ : fruits [('๐', '๐', '๐', '๐ฅ')]
const dog1 = { dog1: '๐ถ' }
const dog2 = { dog2: '๐' }
const dogs = { ...dog1, ...dog2 }
console.log(dogs)
// {dog1: "๐ถ", dog2: "๐"}
๋ง์ฝ dog1 ๊ณผ dog2 ์ ๊ฐ์ฒด ๋ด ํค๊ฐ ๋์ผ (dog) ํ๋ค๋ฉด,
const dog1 = { dog: '๐ถ' }
const dog2 = { dog: '๐' }
์ค๋ธ์ ํธ๋ฅผ ํฉ์ณค์ ๋, ์ ์ผ ๋์ค์ ์ค๋ dog ๊ฐ ์ ์ผ ์์ ์๋ dog ๋ฅผ ์ต์ข ์ ์ผ๋ก ๋ฎ์ด์์ฐ๊ฒ ๋ ๊ฒ์ด๋ค.
๋ง์ฝ ์ธ์๊ฐ ํ์ํ ํจ์๋ฅผ ํธ์ถํ ๋ ๊ดํธ ์์ ์๋ฌด๋ฐ ์ธ์๋ฅผ ์ ๋ฌํ์ง ์๋๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
์๋ง undefined ๊ฐ ์ถ๋ ฅ๋ ๊ฒ์ด๋ค.
๊ทธ๋์ ์๋์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ๊ฒ ๋๋๋ฐ,
function printMessage(message) {
if (message === null) {
message = 'default message'
}
console.log(message)
}
์ด๋ ๊ฒ ์ฐ๊ธฐ ๋ณด๋ค๋ ํด๋น ํจ์์ ์ธ์ ๋ค์์ ์ด๊ธฐ๊ฐ์ ์ง์ ํด ์ค๋ค๋ฉด ์์ฃผ ๊ฐ๋จํ ์์ฑํด ์ค ์ ์๋ค.
function printMessage(message = 'default message') {
console.log(message)
}
printMessage('hello') // 'hello' ๊ฐ ์ถ๋ ฅ
printMessage() // 'default message' ๊ฐ ์ถ๋ ฅ
์ด๊ฒ์ ๋ฆฌ์กํธ์์ ๊ต์ฅํ ๋ง์ด ์ฌ์ฉํ๋ค. if ๋ฌธ์ ์ถ์ฝ ์ผํญ ์ฐ์ฐ์.
์ด๊ฒ ์๋ค๋ฉด ์๋์ ๊ฐ์ด ์ฌ์ฉํ ๊ฒ์ด๋ค.
const isCat = true
let component
if (isCat) {
component = '๊ณ ์์ด'
} else {
component = '๊ฐ์์ง'
}
console.log(component)
ํ์ง๋ง ํ ์ค๋ก ๋๋ผ ์ ์๋๋ฐ ๊ตณ์ด ์์ ์ฝ๋๋ฅผ ๊ณ ์งํ ํ์๊ฐ ์๋ค. ๋ฆฌ์กํธ์์ ์์ฃผ ๋ง์ด ์ฌ์ฉํด์๋ค.
const isCat = true
const component = isCat ? '๊ณ ์์ด' : '๊ฐ์์ง'
์ด ๋ํ ์ต์ํ๋ค. ์๋ ๋ฌธ์์ด์ ์กฐํฉํ ๋ โ+โ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋๋ฐ ๊ณต๋ฐฑ์ด๋ผ๋ ์ง ์ ๊ฒฝ ์ฐ๊ณ ํ ๊ฒ ๋ง์ ๊ธฐ์กด์ โ ์ผ๋ก๋ ์ง์ ๋ถํจ์ ๋๋์ ์ด ์๋ค.
ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด์ ํตํด ๋ฌธ์์ด์ ์กฐํฉํ๋ฉด ์์ฑํ ๋์๋ ํธํ๊ณ ๊ฐ๋ ์ฑ์ด ์ข๋ค.
const weather = 'sunny'
const temperature = '14deg'
console.log(`Today weather is ${weather} and temperature is ${temperature}`)
๋ด์ผ์ ES11 ๋ฌธ๋ฒ์ ํน์ด์ฌํญ์ ํ์ตํ๊ณ ์ ๋ฆฌํด ๋ณด์์ผ ๊ฒ ๋ค.