Front-End/JavaScript

[Javascript] ๋น„๊ตฌ์กฐํ™”(๊ตฌ์กฐ๋ถ„ํ•ด) ํ• ๋‹น ๋ฏธ์„ธ(?) ํŒ

Splin 2022. 12. 27.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‹ค๋ฃจ๋‹ค๋ณด๋ฉด ๋น„๊ตฌ์กฐํ™” ํ• ๋‹น์€ ๋งŽ์ด ์ ‘ํ•ด๋ณด์…จ์œผ๋ฆฌ๋ผ ์ƒ๊ฐ๋ฉ๋‹ˆ๋‹ค.

๋ฆฌ์•กํŠธ ์Šคํ„ฐ๋”” ์ค‘ mdn web docs ๋ฅผ ๋ณด๋Š”๋ฐ, ๊ธฐ๋ณธ์ ์ธ ๋น„๊ตฌ์กฐํ™” ํ• ๋‹น์— ๋Œ€ํ•œ ๊ธ€์€ ๋งŽ์ด ๋ดค์ง€๋งŒ ์•„๋ž˜ ๋‚ด์šฉ์— ๊ด€ํ•œ ๊ธ€์€ ๋ณธ ๊ธฐ์–ต์ด ์—†์–ด์„œ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. 

(์ œ๊ฐ€ ๋ชป ๋ณธ ๊ฑธ ์ˆ˜๋„,,,)

 

 

์„ ์–ธ ์—†๋Š” ํ• ๋‹น

var a, b;
({a, b} = {a: 1, b: 2});

ํ• ๋‹น ๋ฌธ์„ ๋‘˜๋Ÿฌ์‹ผ ๊ด„ํ˜ธ()๋Š” ์„ ์–ธ ์—†์ด ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด(object literal) ๋น„๊ตฌ์กฐํ™” ํ• ๋‹น์„ ์‚ฌ์šฉํ•  ๋•Œ ํ•„์š”ํ•œ ๊ตฌ๋ฌธ์ž…๋‹ˆ๋‹ค.

{a, b} = {a:1, b:2}๋Š” ์œ ํšจํ•œ ๋…๋ฆฝ ๊ตฌ๋ฌธ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ขŒ๋ณ€์˜ {a, b}์ด ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์ด ์•„๋‹Œ ๋ธ”๋ก์œผ๋กœ ๊ฐ„์ฃผ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ, ({a, b} = {a:1, b:2})๋Š” ์œ ํšจํ•œ๋ฐ, ํ•ด๋‹น ๋ฌธ๋ฒ•์€ var {a, b} = {a:1, b:2}์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ด„ํ˜ธ() ํ‘œํ˜„์‹ ์•ž์—๋Š” ์„ธ๋ฏธ์ฝœ๋ก ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์„ ๊ฒฝ์šฐ ์ด์ „ ์ค„๊ณผ ์—ฐ๊ฒฐ๋˜์–ด ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋Š”๋ฐ ์ด์šฉ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด(object literal) ?
๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์ด๋ž€ ์ค‘๊ด„ํ˜ธ{}๋กœ ๊ฐ์‹ธ์ง„ ์†์„ฑ๋“ค(์†์„ฑ์ด ์—†๊ฑฐ๋‚˜ ์—ฌ๋Ÿฌ๊ฐœ ์ผ ์ˆ˜ ์žˆ์Œ)์˜ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.
const object1 = {} ์˜ ์˜ค๋ฅธ์ชฝ ํ•ญ์ธ {}๋„ ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์ด๋ฉฐ,
const object2 = { a: 'a', b: 'b' } ์˜ ์˜ค๋ฅธ์ชฝ ํ•ญ์ธ { a: 'a', b: 'b' }๋„ ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์ž…๋‹ˆ๋‹ค.

 

 

ํ•จ์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ธฐ๋ณธ ๊ฐ’ ์„ค์ •ํ•˜๊ธฐ

ES5 ๋ฒ„์ „

ES5 ๋ฒ„์ „์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ธฐ๋ณธ๊ฐ’์„ ์„ค์ •ํ•˜๋ ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์—ฌ๋Ÿฌ ์ค„์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

function drawES5Chart(options) {
  options = options === undefined ? {} : options;
  var size = options.size === undefined ? 'big' : options.size;
  var cords = options.cords === undefined ? { x: 0, y: 0 } : options.cords;
  var radius = options.radius === undefined ? 25 : options.radius;
  console.log(size, cords, radius);
  // ์ด์ œ ๋“œ๋””์–ด ์ฐจํŠธ ๊ทธ๋ฆฌ๊ธฐ ์ˆ˜ํ–‰
}

drawES5Chart({
  cords: { x: 18, y: 30 },
  radius: 30
});

 

ES6 ๋ฒ„์ „

ํ•˜์ง€๋งŒ ES6 ๋ฒ„์ „์˜ ๊ตฌ์กฐ๋ถ„ํ•ด ํ• ๋‹น์„ ์ด์šฉํ•˜๋ฉด ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ธฐ๋ณธ๊ฐ’์„ ์•„๋ž˜์™€ ๊ฐ™์ด ๊ฐ„๋‹จํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

function drawES2015Chart({size = 'big', cords = { x: 0, y: 0 }, radius = 25} = {}) {
  console.log(size, cords, radius);
  // ์ฐจํŠธ ๊ทธ๋ฆฌ๊ธฐ ์ˆ˜ํ–‰
}

drawES2015Chart({
  cords: { x: 18, y: 30 },
  radius: 30
});

์œ„์˜ drawES2015Chart ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์—์„œ ๊ตฌ์กฐ ๋ถ„ํ•ด๋œ ์ขŒ์ธก ํ•ญ์— ๋นˆ ์˜ค๋ธŒ์ ํŠธ ๋ฆฌํ„ฐ๋Ÿด์„ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. โžก๏ธ {size = 'big', cords = {x: 0, y: 0}, radius = 25} = {}
์ง€๊ธˆ์˜ ํ˜•ํƒœ์™€ ๊ฐ™์€(์šฐ์ธก ํ•ญ์— ๋นˆ ์˜ค๋ธŒ์ ํŠธ ๋ฆฌํ„ฐ๋Ÿด์„ ํ• ๋‹น) ํ˜•์‹์€ ๋‹จ์ˆœํžˆ drawES2015Chart()์™€ ๊ฐ™์ด ์–ด๋–ค ๋งค๊ฐœ๋ณ€์ˆ˜ ์—†์ด๋„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์šฐ๋ณ€์˜ ๋นˆ ์˜ค๋ธŒ์ ํŠธ ํ• ๋‹น์„ ์—†์•ค๋‹ค๋ฉด, ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์ ์–ด๋„ ํ•˜๋‚˜์˜ ์ธ์ž๊ฐ€ ์ œ๊ณต๋˜์–ด์•ผ๋งŒ ํ•ฉ๋‹ˆ๋‹ค.
์ด ํ•จ์ˆ˜๊ฐ€ ์–ด๋– ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜ ์—†์ด๋„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๊ธธ ์›ํ•œ๋‹ค๋ฉด ์ง€๊ธˆ ํ˜•ํƒœ๊ฐ€ ์œ ์šฉํ•˜๊ณ , ๋ฌด์กฐ๊ฑด ๊ฐ์ฒด๋ฅผ ๋„˜๊ธฐ๊ธธ ์›ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋นˆ ๋ฆฌํ„ฐ๋Ÿด ๊ฐ์ฒด ํ• ๋‹น์„ ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

์ค‘์ฒฉ๋œ ๊ฐ์ฒด ๋ฐ ๋ฐฐ์—ด์˜ ๊ตฌ์กฐ ๋ถ„ํ•ด

var metadata = {
    title: "Scratchpad",
    translations: [
       {
        locale: "de",
        localization_tags: [ ],
        last_edit: "2014-04-14T08:43:37",
        url: "/de/docs/Tools/Scratchpad",
        title: "JavaScript-Umgebung"
       }
    ],
    url: "/en-US/docs/Tools/Scratchpad"
};

// translations๋Š” ์ค‘์ฒฉ๋œ ๊ฐ์ฒด๋ฅผ ๊ตฌ์กฐ ๋ถ„ํ•ดํ•œ ๊ฒฐ๊ณผ
var { title: englishTitle, translations: [{ title: localeTitle }] } = metadata;

console.log(englishTitle); // "Scratchpad"
console.log(localeTitle);  // "JavaScript-Umgebung"

๊ฐ์ฒด ์•ˆ์— ๊ฐ์ฒด๊ฐ€ ์žˆ๋Š” ์ค‘์ฒฉ๋œ ๊ฐ์ฒด ๋ฐ ๋ฐฐ์—ด๋„ ๊ตฌ์กฐ ๋ถ„ํ•ดํ•˜์—ฌ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

var { title: englishTitle, translations: [{ title: localeTitle }] } = metadata; ์— ๋Œ€ํ•œ ์„ค๋ช…์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • title: englishTitle โžก๏ธ ๊ฐ์ฒด์— ์žˆ๋Š” title์„ englishTitle์˜ ์ด๋ฆ„์œผ๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค.
  • translations: [{ title: localeTitle }] โžก๏ธ ์šฐ์„  ๊ฐ์ฒด์— ์žˆ๋Š” translations๋ฅผ ๋ฐ›๊ณ  [{ }] ๊ตฌ์กฐ์— ๋“ค์–ด์žˆ๋Š” ๊ฐ’ title์„ localeTitle์˜ ์ด๋ฆ„์œผ๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค.

 

 

๊ณ„์‚ฐ๋œ ์†์„ฑ ์ด๋ฆ„๊ณผ ๊ตฌ์กฐ ๋ถ„ํ•ด

์•„๋ž˜์™€ ๊ฐ™์ด ๋ณ€์ˆ˜์— ๊ฐ์ฒด ์†์„ฑ ์ด๋ฆ„์„ ๋„ฃ์–ด์„œ ๊ตฌ์กฐ ๋ถ„ํ•ดํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

let key = "z";
let { [key]: foo } = { z: "bar" };

console.log(foo); // "bar"

 

์œ„ ์ฝ”๋“œ์˜ { [key]: foo } ๋ถ€๋ถ„์ด ์ฒ˜์Œ์—๋Š” ์ดํ•ด๊ฐ€ ์ž˜ ๋˜์ง€ ์•Š์•˜์ง€๋งŒ, ๊ฐ์ฒด ์†์„ฑ์˜ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const a = { b: "b", c: "c" } ๋ผ๋Š” ๊ฐ์ฒด๊ฐ€ ์žˆ๋‹ค๋ฉด, ํ•ด๋‹น ๊ฐ์ฒด ์†์„ฑ aใ…‡์˜ ์ ‘๊ทผ ๋ฐฉ์‹์€ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์˜จ์ .๋กœ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹ : a.b
  2. ๋ฐฐ์—ด์˜ index ์ ‘๊ทผ ๋ฐฉ์‹๊ณผ ๊ฐ™์€ ๋ฐฉ์‹ : a["b"]
    • ๋‹ค๋งŒ ํ•ด๋‹น ๋Œ€๊ด„ํ˜ธ[] ์•ˆ์—๋Š” ๋ฌธ์ž์—ด์ด ๋“ค์–ด๊ฐ€์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์œ„์˜ 2๋ฒˆ์งธ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌ์กฐ๋ถ„ํ•ด ์ฝ”๋“œ์˜ { [key]: foo } ๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์œ„ ๋ฐฉ์‹์€ Javascript์˜ ๋ฐฐ์—ด๋„ ๊ฒฐ๊ตญ ๋ฐฐ์—ด์„ ํ‰๋‚ด๋‚ธ ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•œ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. (์ด ๋ถ€๋ถ„์— ๊ด€๋ จ๋œ ๋‚ด์šฉ์€ Javascript ๋ฐฐ์—ด ๊ฐ์ฒด ๊ฐ™์€ ํ‚ค์›Œ๋“œ๋กœ ๊ตฌ๊ตด๋ง ํ•ด๋ณด์‹œ๋ฉด ์‰ฝ๊ฒŒ ์ฐพ์•„๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

 

๋Œ“๊ธ€