B26: ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น : object๋ฅผ ๋ณ€์ˆ˜๋กœ ๋ถ„ํ•ดํ•˜๊ธฐ

2025. 8. 26. 19:57ใ†Front-end/JavaScript

๋ฐ˜์‘ํ˜•

๋ชฉ์ฐจ

1. ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น

2. ๋ฐฐ์—ด ๋ถ„ํ•ด

3. ๊ฐ์ฒด ๋ถ„ํ•ด

4. ์ค‘์ฒฉ ๊ตฌ์กฐ ๋ถ„ํ•ด (nested destructuring)

5. ํ•จ์ˆ˜์™€ ๊ตฌ์กฐ ๋ถ„ํ•ด

    5-1. ํ•จ์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜

    5-2. ํ•จ์ˆ˜ ๋ฐ˜ํ™˜๊ฐ’

6. ์˜ˆ์‹œ


1. ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น

ํ•จ์ˆ˜์— ๊ฐ์ฒด/๋ฐฐ์—ด์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ์˜ ์ผ๋ถ€๋งŒ ์ „๋‹ฌํ•˜๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ, ๋ฐฐ์—ด์„ ๋ณ€์ˆ˜๋กœ ๋ถ„ํ•ดํ•˜์—ฌ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ˜น์€ ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์ด๊ฑฐ๋‚˜, ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ธฐ๋ณธ๊ฐ’์ด ํ•„์š”ํ•  ๋•Œ๋„ ๊ตฌ์กฐ ๋ถ„ํ•ด๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น (destructuring assignment)์€๊ฐ์ฒด/๋ฐฐ์—ด์„ ์†์„ฑ์„ ํ•ด์ฒดํ•˜์—ฌ ๋ณ€์ˆ˜์— ๋‹ด์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๋ฌธ๋ฒ•(ํ‘œํ˜„์‹)์ด๋‹ค.

 

ํ•ด์ฒดํ•œ๋‹ค๊ณ  ํ•ด์„œ ์›๋ณธ ๊ฐ์ฒด/๋ฐฐ์—ด์ด ์ˆ˜์ •๋˜๊ฑฐ๋‚˜ ํŒŒ๊ดด๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

์›๋ณธ์„ ๋ณต์‚ฌํ•œ "์ดํ›„"์— ๋ถ„ํ•ด๋ฅผ ํ•˜๋Š” ๊ฒƒ์œผ๋กœ,

๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ ์ง์ ‘ ๋ณ€์ˆ˜์— ํ•˜๋‚˜ํ•˜๋‚˜ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ๋งŒ ๋‹ค๋ฅด๋‹ค


2. ๋ฐฐ์—ด ๋ถ„ํ•ด

๋ฐฐ์—ด์„ ํ•ด์ฒดํ•ด์„œ ๋ณ€์ˆ˜์— ๋‹ด๋Š” ์˜ˆ์ œ๋ฅผ ์‚ดํŽด๋ณด์ž.

let arr = ["DY", "Bang"];	// ๋ฐฐ์—ด

let [firstName, surName] = arr;
// firstName = arr[0]
// surName = arr[1]

console.log(firstName);	// DY
console.log(surName);	// Bang

 

โœ… split()๊ฐ™์ด ๋ฐฐ์—ด์ด ๋ฐ˜ํ™˜๊ฐ’์ธ ๋ฉ”์„œ๋“œ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

let [first, second] = "DY Bang".split(' ');

 

 

โœ… ์‰ผํ‘œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•„์š”ํ•˜์ง€ ์•Š์€ ์š”์†Œ๋Š” ๋ฒ„๋ฆด ์ˆ˜ ์žˆ๋‹ค.

let [first, , third] = ["A", "B", "C", "D"];

console.log(third);	// C

๋‘๋ฒˆ์งธ ์š”์†Œ๋Š” ์‰ผํ‘œ์— ์˜ํ•ด ์ƒ๋žต๋˜์—ˆ๋‹ค.

๋„ค๋ฒˆ์งธ ์š”์†Œ๋Š” ํ• ๋‹นํ•  ๋ณ€์ˆ˜๊ฐ€ ์—†์–ด ์ƒ๋žต๋˜์—ˆ๋‹ค.

 

โœ… ํ• ๋‹น ์—ฐ์‚ฐ์ž ์ขŒ์ธก์—๋Š” "ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋ผ๋ฉด ๋ญ๋“ ์ง€ ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

let user = {};
[user.name, user.surname] = "DY Bang".split(' ');

console.log(user.name) // DY

 

 

โœ… .entries() ๋ฉ”์„œ๋“œ์— ๊ตฌ์กฐ ๋ถ„ํ•ด๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ์ˆœํšŒํ•ด ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค.

let user = {
  name: "John",
  age: 30
};

// ๊ฐ์ฒด user์˜ ํ‚ค, ๊ฐ’ ์ˆœํšŒํ•˜๊ธฐ
for (let [key, value] of Object.entries(user)) {  // Object.entries๋กœ user๋ฅผ [ํ‚ค,๊ฐ’] ๋ฐฐ์—ด๋กœ ๋งŒ๋“ฆ
  alert(`${key}:${value}`);	// name:John, age:30
}
let user = new Map();
user.set("name", "John");
user.set("age", "30");

for(let [key, value] of user) {	// map์„ ๊ตฌ์กฐ๋ถ„ํ•ด ํ•ด๋ณธ ์˜ˆ์ œ
  alert(`${key}:${value}`);
}

 

โœ… ๋‘ ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ๊ฐ’์„ ๊ตํ™˜ํ•  ๋•Œ ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

let guest = "Jane";
let admin = "Pete";
[guest, admin] = [admin, guest];

alert(`${guest} ${admin}`);	// Pete Jane

 

โœ… ...๋กœ ๋‚˜๋จธ์ง€ ์š”์†Œ๋“ค์„ ๋ชจ๋‘ ๊ฐ€์ ธ์™€ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค. (๋ฐฐ์—ด ์ƒ์„ฑ)

let [first, second, ...rest] = ["A", "B", "C", "D"];

console.log(first);	// "A"
console.log(second);  // "B"

console.log(rest[0]);	// "C"
console.log(rest[1]);	// "D"
console.log(rest.length);  // 2

์  ์„ธ๊ฐœ(...)๋ฅผ ๋ถ™์ธ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋‚˜๋จธ์ง€ ์š”์†Œ๋“ค์„ ์ €์žฅํ•œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์ด ๋งŒ๋“ค์–ด์ง„๋‹ค.

 

โœ… ๊ธฐ๋ณธ๊ฐ’์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ• ๋‹นํ•  ๊ฐ’์ด ์—†์œผ๋ฉด undefined๋กœ ์ทจ๊ธ‰๋œ๋‹ค.

let [first, second] = [];

console.log(first);	// undefined
console.log(second);	// undefined

 

'='์„ ์ด์šฉํ•˜์—ฌ ํ• ๋‹นํ•  ๊ฐ’์ด ์—†์„ ๋•Œ ๊ธฐ๋ณธ์œผ๋กœ ํ• ๋‹นํ•ด์ค„ ๊ฐ’์ธ ๊ธฐ๋ณธ๊ฐ’์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’์—๋Š” ์›์‹œํ˜•๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ‘œํ˜„์‹, ํ•จ์ˆ˜ ํ˜ธ์ถœ๋„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

let [id = "Guest", from = prompt('๊ตญ๊ฐ€๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.')] = ["Potato"];

console.log(id);	// Potato
console.log(from);	// prompt๋กœ ์ž…๋ ฅํ•œ ๊ฐ’

 


3. ๊ฐ์ฒด ๋ถ„ํ•ด

๊ฐ์ฒด๋ฅผ ๋ถ„ํ•ดํ•˜๋Š” ๊ธฐ๋ณธ ๋ฌธ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

let {var1, var2} = {var1:..., var2:...};
// ์ƒ์‘ํ•˜๋Š” ๊ฐ์ฒด ํ”„๋กœํผํ‹ฐ์˜ 'ํŒจํ„ด' = ๋ถ„ํ•ดํ•˜๊ณ ์žํ•˜๋Š” ๊ฐ์ฒด

 

๊ฐ์ฒด ํ”„๋กœํผํ‹ฐ์˜ ํ‚ค ๋ชฉ๋ก์„ ํŒจํ„ด์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ์‹œ๋ฅผ ๋ณด์ž.

๊ฐ ํ‚ค์— ์ €์žฅ๋œ ๊ฐ’์ด ์ƒ์‘ํ•˜๋Š” ๋ณ€์ˆ˜์— ํ• ๋‹น๋˜๋ฉฐ, ์ˆœ์„œ๋Š” ์ƒ๊ด€์ด ์—†๋‹ค.

let options = {
  title: "Menu",
  width: 100,
  height: 200
};

let { title, width, height } = options;

console.log(title); // Menu
console.log(width); // 100
console.log(height); // 200
let {height, width, title} = {title:"Menu", height: 200, width: 100};

console.log(title); // Menu
console.log(width); // 100
console.log(height); // 200

 

 

โœ… ์ฝœ๋ก (:)์„ ์‚ฌ์šฉํ•˜์—ฌ ํ‚ค์™€ ๋‹ค๋ฅธ ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋ณ€์ˆ˜์— ์›ํ•˜๋Š” ๋Œ€๋กœ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฝœ๋ก ์€ ๋ถ„ํ•ด ๋Œ€์ƒ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ: ๋ชฉํ‘œ ๋ณ€์ˆ˜์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

let options = {
  title: "Menu",
  width: 100,
  height: 200
};

let {width:w, height: h, title} = options;
// width -> w
// height -> h

alert(title);	// Menu
alert(w);	// 100
alert(h);	// 200

 

 

โœ… ํ”„๋กœํผํ‹ฐ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ =์„ ์‚ฌ์šฉํ•ด ๊ธฐ๋ณธ๊ฐ’์„ ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

let options = {
  title: "Menu"
};

let (width: w = 100, height = prompt("width?"), title} = options;

console.log(w);  // 100
console.log(height);  // prompt๋กœ ์ž…๋ ฅํ•œ ๊ฐ’
console.log(title);  // Menu

 

โœ… ๋‚˜๋จธ์ง€ ํŒจํ„ด(...)์„ ์‚ฌ์šฉํ•ด์„œ ๋‚˜๋จธ์ง€ ํ”„๋กœํผํ‹ฐ๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค.

let options = {
  title: "Menu",
  width: 100,
  height: 200
};

let {title, ...rest} = options;
// title = "Menu"
// rest = {width: 100, height: 200}

console.log(rest.width);  // 100
console.log(rest.height);  // 200

 


4. ์ค‘์ฒฉ ๊ตฌ์กฐ ๋ถ„ํ•ด (nested destructuring)

๊ฐ์ฒด/๋ฐฐ์—ด์ด ๋‹ค๋ฅธ ๊ฐ์ฒด/๋ฐฐ์—ด์„ ํฌํ•จํ•  ๊ฒฝ์šฐ, ์ค‘์ฒฉ ๊ตฌ์กฐ ๋ถ„ํ•ด๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค. 

let options = {
  size: {
    width: 100,
    height: 200
  },
  items: ["Cake", "Cookie"],
  nuts: true
};

// ์ฝ”๋“œ๋ฅผ ์—ฌ๋Ÿฌ ์ค„์— ๊ฑธ์ณ ์ž‘์„ฑํ•ด ์˜๋„ํ•˜๋Š” ๋ฐ”๋ฅผ "๋ช…ํ™•ํžˆ" ๋“œ๋Ÿฌ๋ƒ„
let {
  size: {
    width,
    height
  },
  items: [item1, item2],
  title = "Menu"
} = options;

 

 


5. ํ•จ์ˆ˜์™€ ๊ตฌ์กฐ ๋ถ„ํ•ด

1. ํ•จ์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜

ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ค‘ ์ƒ๋‹น์ˆ˜๋Š” ์„ ํƒ์ ์œผ๋กœ ์“ฐ์ด๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

// ๋ฆฌํŒฉํ† ๋ง ์ด์ „ ํ•จ์ˆ˜
// ์ธ์ˆ˜์˜ ์ˆœ์„œ๊ฐ€ ํ‹€๋ฆฌ๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
function showMenu(title = "Untitled", width = 200, height = 100, items = []) {
  // ...
}

// ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง„๋‹ค
showMenu("My Menu", undefined, undefined, ["Cake", "Cookie"]);

 

์œ„์˜ ํ•จ์ˆ˜๋ฅผ ๊ตฌ์กฐ ๋ถ„ํ•ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฆฌํŒฉํ† ๋ง ํ•ด๋ณด์ž.

โœ… ๊ฐ์ฒด๋ฅผ ์ธ์ˆ˜๋กœ ๋„˜๊ธฐ๋ฉด ๋งค๊ฐœ๋ณ€์ˆ˜์— ๊ตฌ์กฐ๋ถ„ํ•ด๊ฐ€ ๋˜์–ด ๋” ๊ฐ€๋…์„ฑ ์ข‹์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

let options = {
  title: "My Menu",
  items: ["Cake", "Cookie"]
};

function showMenu({title="Undefined", width=100, height=200, items=[]) {
  // ...
}

showMenu(options);

 

 

โœ… ์ค‘์ฒฉ ๊ฐ์ฒด์™€ ์ฝœ๋ก ์„ ์กฐํ•ฉํ•˜์—ฌ ๋” ๋ณต์žกํ•œ ๋ถ„ํ•ด๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

let options = {
  title: "My menu",
  items: ["Item1", "Item2"]
};

function showMenu({
  title = "Untitled",
  width: w = 100,
  height: h = 200,
  items: [item1, item2]
}) {
  // ...
};

showMenu(options);

 

โœ… ๋ชจ๋“  ๋งค๊ฐœ๋ณ€์ˆ˜์— ๊ธฐ๋ณธ๊ฐ’์„ ํ• ๋‹นํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋นˆ ๊ฐ์ฒด๋ฅผ ๋ช…์‹œํ•˜๋ฉด ๋œ๋‹ค.

// โŒ ์—๋Ÿฌ ๋ฐœ์ƒ
showMenu();

// โญ• ๋ชจ๋“  ์ธ์ˆ˜์— ๊ธฐ๋ณธ๊ฐ’ ์ „๋‹ฌ
showMenu({});

// โญ• ๋นˆ ๊ฐ์ฒด๋ฅผ ์ธ์ˆ˜ ์ „์ฒด์˜ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •
function showMenu({ title="Menu",width=100,height=200 } = {}) {
  // ...
}

showMenu();

 

 

2. ํ•จ์ˆ˜ ๋ฐ˜ํ™˜๊ฐ’

ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜๊ฐ’์— ๊ตฌ์กฐ ๋ถ„ํ•ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋‹ค.

function foo() {
  return [1, 2, 3];
}

let a, b;
[a, ...b] = foo();

console.log(a);	// 1
console.log(b);	// [2, 3]

 

 


6. ์˜ˆ์‹œ

1. ์›น ๋งํฌ ๊ตฌ์กฐ๋ถ„ํ•ดํ•˜๊ธฐ

์ •๊ทœ ํ‘œํ˜„์‹์˜ exec() ๋ฉ”์„œ๋“œ๋Š” ์ผ์น˜ํ•˜๋Š” ๋ถ€๋ถ„์„ ์ฐพ์œผ๋ฉด [์ผ์น˜ํ•˜๋Š” ๋ถ€๋ถ„ ์ „์ฒด, ์ •๊ทœ์‹์—์„œ ๊ด„ํ˜ธ๋กœ ๋ฌถ์ธ ๊ฐ ๊ทธ๋ฃน๊ณผ ์ผ์น˜ํ•˜๋Š” ๋ถ€๋ถ„, ...]์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

function parseProtocol(url) {
  let parsedURL = /^(\w+)\:\/\/([^\/]+)\/(.*)$/.exec(url);
  if(!parsedURL) {
    return false;
  }
  console.log(parsedURL);
  // [ 
  //    "https://develper.mozilla.org/en-US/Web/JavaScript",
  //    "https",
  //    "developer.mozilla.org",
  //    "en-US/Web/JavaScript"
  // ]
  
  let [, protocol, fullhost, fullpath] = parsedURL;
  return protocol;
}

console.log(parseProtocol("https://developer.mozilla.org/en-US/Web/JavaScript"),);
// "https"

 

2. for..of๋ฌธ ๊ฐ™์ด ์จ๋ณด๊ธฐ

function People(name, mother, father, sister, brother, age) {
  this.name = name;
  this.family = {
    mother,
    father,
    sister,
    brother,
  };
  this.age = age;
};

let Tom = new People("Tom", "Mr. Smith", "Mrs. Smith", "Anna", "Bob", 25);
let Jane = new People("Jane", "Mr. Brown", "Mrs. Brown", "Lucy", null, 23);

let people = [Tom, Jane];

for(let {
  name,
  family: {father},
} of people) {
  console.log(`Name: ${name}, Father: ${father}`);
}
// Name: Tom, Father: Mr.Smith"
// Name: Jane, Father: Mr.Brown"

 

 

 

 

์ฐธ๊ณ 

๋ฐ˜์‘ํ˜•