Destructuing Assignment
About
JavaScript์๋ ๊ตฌ์กฐ ๋ถํด ํ ๋น(Destructuing Assignment)์ด๋ผ๋ ํธ๋ฆฌํ ๋ฌธ๋ฒ์ด ์๋ค. ๊ต์ฅํ ๋ง์ด ์ฐ์ด๋ ๋ฌธ๋ฒ์ธ๋ฐ ํ ๋ฒ ์์๋ณด์.
๋ด์ฉ์ ์ ๋ถ MDN ๋ฌธ์์์ ๊ฐ์ ธ์จ ๊ฒ์ด์ง๋ง ์ค์ ๊ฐ๋ฐํ๋ฉด์ ๊ฒช์ ์์๋ ์ค๊ฐ ์ค๊ฐ ๋ฃ์ด๋ณด์๋ค.
๋ฌธ๋ฒ (Syntax)
๊ฐ์
=
๋ฅผ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ์ ํ ๋น๋ฐ์ ๋ณ์๋ฅผ, ์ค๋ฅธ์ชฝ์ ๋ถํดํ ๋์์ ์ ์ด์ ์์๋๋ก ๋์
ํ ์ ์๋ค.
a
์๋ 10
, b์๋ 20
์ด ๋ด๊ธฐ๊ฒ ๋๋ค.
๋ฐฐ์ด ๋ฐ ๊ฐ์ฒด
const
๋ก ํ ๊ฒฝ์ฐ ๋ด๋ถ ๋ณ์๋ read-only์ด์ง๋ง,let
์ผ๋ก ํ ๊ฒฝ์ฐ ๋ด๋ถ ๋ณ์๋ ์ฌํ ๋น์ด ๊ฐ๋ฅํ๋ค.
์๋๋ ๊ฒฝ์ฐ๋ ์๋ค.
๋ํดํธ ๊ฐ
๊ฐ ๊ตฌ์กฐ ๋ถํด๋ ํ๋กํผํฐ๋ ๋ํดํธ ๊ฐ์ ๊ฐ์ง ์ ์๋ค.
ํ๋กํผํฐ๊ฐ ์กด์ฌํ์ง ์๊ฑฐ๋
undefined
์ด๋ฉด ๋ํดํธ ๊ฐ์ด ์ฌ์ฉ๋๋ค.ํ๋กํผํฐ๊ฐ
null
๊ฐ์ ๊ฐ์ง๋ฉด ๋ํดํธ ๊ฐ์ด ์ ์ฉ๋์ง ์๋๋ค.
๋ํดํธ ๊ฐ์ ํํ์(expression)์ด ๋ ์๋ ์๋ค. ํ์ํ ๋๋ง evaluated ๋๋ค.
Rest Property
๊ตฌ์กฐ ๋ถํด ํจํด์ ...rest
์ ๊ฐ์ด rest property๋ก ๋๋ผ ์๋ ์๋ค. ์ด ํจํด์ผ๋ก ๊ฐ์ฒด๋ ๋ฐฐ์ด์ ๋จ์ ํ๋กํผํฐ๋ฅผ ์๋ก์ด ๊ฐ์ฒด๋ ๋ฐฐ์ด์ ํ ๋นํ ์ ์๋ค.
Rest property๋ ๋ง์ง๋ง์ ์์ด์ผ ํ๋ฉฐ, trailing comma (
,
)๋ฅผ ๊ฐ์ง๋ฉด ์๋๋ค.
๋ค๋ฅธ ๋ฌธ๋ฒ์์์ ๊ตฌ์กฐ ๋ถํด ํจํด
๋ณ์๋ฅผ ๋ฐ์ธ๋ฉํ๋ ๋ค๋ฅธ ๋ง์ ๋ฌธ๋ฒ์์ ๊ตฌ์กฐ ๋ถํด ํจํด์ ์ฌ์ฉํ ์ ์๋ค. ์๋ฅผ ๋ค์๋ฉด:
for...in
,for...of
๋ฃจํ์ ๋ฃจํ ๋ณ์ํจ์์ ๋งค๊ฐ๋ณ์
catch
๋ฐ์ธ๋ฉ ๋ณ์
์์ (Examples)
๋ฐฐ์ด ๊ตฌ์กฐ ๋ถํด
๊ธฐ๋ณธ์ ์ธ ๋ฐฐ์ด ํ ๋น
์์ค๋ณด๋ค ๋ง์ ์์ ๊ตฌ์กฐ ๋ถํด
Note: ์์ ์ค์ ์์๋ Node.js๋ก CLI ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ ๋๊ฐ ์์ ๊ฒ ๊ฐ๋ค.
๋ค์๊ณผ ๊ฐ์ ์คํฌ๋ฆฝํธ๊ฐ ์๋ค๊ณ ํ์.
node
๋ช
๋ น์ด๋ก ๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ฌํด ์ถ๋ ฅํ ์ ์๋ค.
param1
, param2
๋ ์ ๋ฌ๋์ง ์์ผ๋ฉด undefined
๊ฐ ๋๋ค.
๋ณ์ ์ค์ํ๊ธฐ (Swapping variables)
Note: Python์ ์จ๋ดค๋ค๋ฉด ์๊ฒ ์ง๋ง Python์์๋ ๊ฐ์ ๊ฒ์ ํ ์ ์๋ค.
ํจ์๋ก๋ถํฐ ๋ฐํ๋ ๋ฐฐ์ด ํ์ฑํ๊ธฐ
ํจ์๋ก๋ถํฐ ๋ฐํ๋ ๋ฐฐ์ด ๊ฐ์ ์ข๋ ๊ฐ๊ฒฐํ๊ฒ ์ ๊ทผํ ์ ์๋ค.
๋ฐํ ๊ฐ ์ผ๋ถ ๋ฌด์ํ๊ธฐ
๋ฐ์ธ๋ฉ ํจํด์ Rest Property๋ก ์ฌ์ฉํ๊ธฐ
๋ฐฐ์ด์ ๊ตฌ์กฐ ๋ถํด ํ ๋น์์์ rest property๋ ๋ ๋ค๋ฅธ ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด์ ๋ฐ์ธ๋ฉ ํจํด์ด ๋ ์ ์๋ค. ์ด ๋ฐฉ๋ฒ์ผ๋ก ๋์์ ํ๋กํผํฐ๋ ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ ๋ถ๋ฆฌ(unpack)ํ ์ ์๋ค.
์ด๋ฐ ๋ฐ์ธ๋ฉ ํจํด์ ๊ฐ rest property๊ฐ ๋ง์ง๋ง์ ์์นํ ํ ์ค์ฒฉ์ด ๊ฐ๋ฅํ๋ค.
Warning: ํ์ง๋ง ๊ฐ์ฒด์ ๊ตฌ์กฐ ๋ถํด๋ identifier๋ง์ด rest property๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
์ ๊ท ํํ์์ผ๋ก ๋ถ๋ฆฌ(unpacking)ํ๊ธฐ
์ ๊ทํํ์์ exec()
๋ฉ์๋๊ฐ ๋งค์น๋ฅผ ์ฐพ์ผ๋ฉด ์ฒซ ๋ฒ์งธ ์์๋ก ๋ฌธ์์ด์์ ๋งค์น๋ ๋ถ๋ถ ์ ์ฒด (full match)๋ฅผ, ๊ทธ๋ฆฌ๊ณ ๋๋จธ์ง ์์๋ก ()
๋ก ๊ทธ๋ฃนํ๋ ๊ฒ์ ๋งค์น๋๋ ๋ฌธ์์ด์ ๋ถ๋ถ๋ค์ ๊ฐ๋ ๋ฐฐ์ด์ ๋ฐํํ๋ค.
๊ตฌ์กฐ ๋ถํด ํ ๋น์ผ๋ก full match๋ฅผ ๋ฌด์ํ๊ณ ๋๋จธ์ง ๋ถ๋ถ์ ๋ถ๋ฆฌํ ์ ์๋ค.
์ด๋ค iterable์ด๋ ๋ฐฐ์ด ๊ตฌ์กฐ ๋ถํด ์ฌ์ฉํ๊ธฐ
๋ฐฐ์ด ๊ตฌ์กฐ ๋ถํด๋ right-hand side์์ iterable ํ๋กํ ์ฝ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ด๋ค iterable์ด๋ ๊ตฌ์กฐ ๋ถํด๊ฐ ๊ฐ๋ฅํ๋ค.
๊ฐ์ฒด ๊ตฌ์กฐ ๋ถํด
๊ธฐ๋ณธ ํ ๋น
์๋ก์ด ๋ณ์ ์ด๋ฆ์ ํ ๋นํ๊ธฐ
p
๋ฅผfoo
๋ก,q
๋ฅผbar
๋ก ๋ฐ๋๋ค.
Note: ์ด๊ฒ์ ์์๋ก๋ Express.js๋ Koa.js์์ request์์ query, body ๋ฑ์ ๋ฐ์ ๋๊ฐ ์๋ค.
์ฅ์ ์ด ๋ง์ ํจํด์ด๋ค.
Request์์ ์ ๋ฌ๋๋ ๋ณ์ ์ด๋ฆ์ด ์ฝ๋์์ ์ฌ์ฉ๋๋ ์ด๋ฆ๊ณผ case๊ฐ ๋ค๋ฅผ ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ, ์๋ฅผ ๋ค์ด snake_case๋ฅผ camelCase๋ก ๋ฐ๊ฟ ์ ์๋ค.
๋ณ์ ์ด๋ฆ์ ํจ์ ๋ด์์ ์ด๋ฏธ ์ฐ๊ณ ์๋ ๊ฒฝ์ฐ
email
๋ก ๋ฐ์๋ค๋ฉดemailParam
์ผ๋ก ๋ฐ๊พธ๋ ๋ฑ ์ค๋ณต๋์ง ์๊ฒ ๋ฐ๊ฟ ์ ์๋ค.
์๋ก์ด ๋ณ์ ์ด๋ฆ์ ํ ๋นํ๊ณ ๋ํดํธ ๊ฐ ์ค์ ํ๊ธฐ
ํ๋กํผํฐ์ ๋ํด์ ๋ค์ ๋ ๊ฐ์ง ์์ ์ (๋์์) ํ ์ ์๋ค.
๊ฐ์ฒด๋ก๋ถํฐ ๋ถ๋ฆฌ(unpack)ํด ์๋ก์ด ์ด๋ฆ์ ๋ณ์๋ก ํ ๋นํ๊ธฐ
๋ถ๋ฆฌ๋(unpacked) ๊ฐ์ด
undefined
์ผ ๊ฒฝ์ฐ์ ๋๋นํด ๋ํดํธ ๊ฐ ์ค์ ํ๊ธฐ
ํจ์ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ๋ ๊ฐ์ฒด๋ก๋ถํฐ ํ๋กํผํฐ ๋ถ๋ฆฌํ๊ธฐ(Unpacking)
ํจ์ ๋งค๊ฐ๋ณ์์ ๋ํดํธ ๊ฐ ์ค์ ํ๊ธฐ
์ค์ฒฉ๋ ๊ฐ์ฒด์ ๋ฐฐ์ด ๊ตฌ์กฐ ๋ถํด
for...of
๋ฐ๋ณต๊ณผ ๊ตฌ์กฐ ๋ถํด
for...of
๋ฐ๋ณต๊ณผ ๊ตฌ์กฐ ๋ถํด๊ณ์ฐ๋(Computed) ๊ฐ์ฒด ํ๋กํผํฐ ์ด๋ฆ๊ณผ ๊ตฌ์กฐ ๋ถํด
Note: ๊ณ์ฐ๋ ๊ฐ์ฒด ํ๋กํผํฐ ์ด๋ฆ์ด๋ผ๋ ๊ฑด ๊ทธ๋ฅ ๊ฐ์ฒด ๋ฆฌํฐ๋ด์์ ๋์ ์ธ ์ด๋ฆ์ผ๋ก ์ฐธ์กฐํ๋ ๊ฑธ ๋ปํ๋ค.
์ฌ๋ฐ๋ฅด์ง ์์ JavaScript ์๋ณ์๋ช
์ ํ๋กํผํฐ ์ด๋ฆ์ผ๋ก ์ฌ์ฉํ๊ธฐ
Note: ์ด๊ฒ๋ ์ด๋ ค์ด ๋ง์ ์๋๋ค. ๋๋ถ๋ถ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์๋ kebab-case(-
๋ฅผ ๊ตฌ๋ถ์๋ก ์ฌ์ฉ)๋ฅผ ๋ณ์๋ช
์ผ๋ก ์ฌ์ฉํ์ง ๋ชปํ๊ฒ ๋์ด ์๋ค. ๋ฐฑ์๋ ๊ฐ๋ฐ์ ํ๋ค ๋ณด๋ฉด ์์ฒญ ์ฟผ๋ฆฌ๋ช
์ผ๋ก snake_case ๋ง๊ณ kebab-case๋ฅผ ์ฌ์ฉํ๊ฒ ๋ ๋๋ ์๋ฐ, ์ด๋ด ๋ ํด๋น ์ฟผ๋ฆฌ๋ช
์ ๊ทธ๋๋ก ๋ณ์ ์ด๋ฆ์ผ๋ก ์ค์ ํ ์ ์๋ค. ๊ทธ๋ฐ ๊ฒฝ์ฐ๋ฅผ ์ฌ๋ฐ๋ฅด์ง ์์ JavaScript ์๋ณ์๋ช
(Invalid JavaScript Identifier)์ด๋ผ๊ณ ํ๋ค.
๋ฐฐ์ด๊ณผ ๊ฐ์ฒด๊ฐ ํฉ์ณ์ง ํํ์ ๊ตฌ์กฐ ๋ถํด
๋ฐฐ์ด๊ณผ ๊ฐ์ฒด ๊ตฌ์กฐ ๋ถํด๋ฅผ ๋์์ ํ ์ ์๋ค.
์ค์ ๋ก ๋ฐฐ์ด ์์ ๊ทธ๋ฅ ๊ฐ ๋ง๊ณ ๋ ๊ฐ์ฒด๋ฅผ ๋ง์ด ๋ด์ผ๋๊น ์ฌ์ฉํ ์ผ์ด ๋ง์ ์์์ธ ๊ฒ ๊ฐ๋ค.
๊ฐ์ฒด๊ฐ ๊ตฌ์กฐ ๋ถํด๋ ๋ ํ๋กํ ํ์
์ฒด์ธ(Prototype chain)๋ฅผ ๋ฐ๋ผ๊ฐ ์ฐพ์๊ฐ๋ค
๊ฐ์ฒด๋ฅผ ๊ตฌ์กฐ ๋ถํดํ ๋, ํ๋กํผํฐ๊ฐ ํด๋น ํ๋กํผํฐ ์์ ์๋ค๋ฉด(not accessed in itself) ํ๋กํ ํ์ ์ฒด์ธ์ ๋ฐ๋ผ์ ๊ณ์ํด์ ์ฐพ์๊ฐ ๊ฒ(look up)์ด๋ค.
์ด๊ฑด ์ข ์ด๋ ค์ด ๋ง์ธ๋ฐ, ํ๋กํ ํ์ ์ ๋ํ ์ดํด๊ฐ ํ์ํ๋ค.
JavaScript๋ ํน์ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ ๋ฉ์๋์ ์ ๊ทผ์ ๊ฐ์ฒด ์์ ์ ๊ฒ ๋ฟ ์๋๋ผ __proto__
๊ฐ ๊ฐ๋ฆฌํค๋ ๋งํฌ๋ฅผ ๋ฐ๋ผ์ ๋ถ๋ชจ ์ญํ ์ ํ๋ ํ๋กํ ํ์
๊ฐ์ฒด์ ํ๋กํผํฐ๋ ๋ฉ์๋์ ์ ๊ทผํ ์ ์๋ค.
ํน์ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ ๋ฉ์๋ ์ ๊ทผ์ ๋ง์ฝ ํ์ฌ ๊ฐ์ฒด์ ํด๋น ํ๋กํผํฐ๊ฐ ์กด์ฌํ์ง ์๋๋ค๋ฉด __proto__
๊ฐ ๊ฐ๋ฆฌํค๋ ๋งํฌ๋ฅผ ๋ฐ๋ผ ๋ถ๋ชจ ์ญํ ์ ํ๋ ํ๋กํ ํ์
๊ฐ์ฒด์ ํ๋กํผํฐ๋ ๋ฉ์๋๋ฅผ ์ฐจ๋ก๋ก ๊ฒ์ํด ๊ฐ๋ ๊ฒ์ด ํ๋กํ ํ์
์ฒด์ธ์ด๋ค. (์ข
์ฐฉ์ง๋ Object.prototype
์ด๋ค.)
ํ๋ง๋๋ก ๋งํด์ ๊ตฌ์กฐ ๋ถํด ๊ฐ์ ๊ฐ์ฒด ์์ ์ด ํด๋น ํ๋กํผํฐ๋ ๋ฉ์๋๋ฅผ ๊ฐ๊ณ ์์ง ์๋ค๋ฉด ๋ถ๋ชจ ์ญํ ์ ํ๋ ํ๋กํ ํ์ (Prototype)์ ํ๋กํผํฐ์ ๋ฉ์๋๊น์ง ๊ณ์ํด์ ๊ฒ์ํด๋๊ฐ๋ค๋ ๊ฒ์ด๋ค.
๊ฒฐ๋ก (Conclusion)
์ ๋ฆฌํ๊ณ ๋ณด๋ ์ฐ์์๊ฐ ์์ผ ์ฐธ ๋ง๋ค. (์ ๋ฆฌํ๋ค๊ฐ ๋ช ๋ฒ ์กธ์๋ค. ๐ฅฑ)
๊ทผ๋ฐ ๋ณด๋ฉด ์๊ฒ ์ง๋ง Examples ์น์ ์ ์๋ ๋ด์ฉ์ด ๋ฐ ์ด์์ด๋ค. ์์๊ฐ ๋ค์ํด์ ๋ง์ ๋ณด์ด๋ ๊ฒ์ด์ง, ์ฌ์ฉ๋ฒ๊ณผ ์๋ฆฌ๋ง ์๋ฉด ์์ ๋กญ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
์ ์ผ ์ค์ํ ๊ฑด ๊ฒฝํ์ ํตํด ๊ตฌ์กฐ ๋ถํด๋ฅผ ์ฌ์ฉํ๋ฉด ์ ํฉํ์ง๋ฅผ ์ฒด๋ํ๊ณ ์ ์ฌ์ ์์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
REF
Last updated
Was this helpful?