Skip to content

Latest commit

ย 

History

History
321 lines (232 loc) ยท 8.96 KB

36__study_heeso.md

File metadata and controls

321 lines (232 loc) ยท 8.96 KB

๋””์ŠคํŠธ๋Ÿญ์ฒ˜๋ง ํ• ๋‹น

๋””์ŠคํŠธ๋Ÿญ์ฒ˜๋ง ํ• ๋‹น = ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น ์€ ๊ตฌ์กฐํ™”๋œ ๋ฐฐ์—ด๊ณผ ๊ฐ™์€ ์ดํ„ฐ๋Ÿฌ๋ธ” ๋˜๋Š” ๊ฐ์ฒด๋ฅผ ๋น„๊ตฌ์กฐํ™”ํ•˜์—ฌ 1๊ฐœ ์ด์ƒ์˜ ๋ณ€์ˆ˜์— ๊ฐœ๋ณ„์ ์œผ๋กœ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋ฐฐ์—ด๊ณผ ๊ฐ™์€ ์ดํ„ฐ๋Ÿฌ๋ธ” ๋˜๋Š” ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์—์„œ ํ•„์š”ํ•œ ๊ฐ’๋งŒ ์ถ”์ถœํ•˜์—ฌ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.

36.1 ๋ฐฐ์—ด ๋””์ŠคํŠธ๋Ÿญ์ฒ˜๋ง ํ• ๋‹น

๊ตฌ์กฐํ™”๋œ ๋ฐฐ์—ด์„ ๋””์ŠคํŠธ๋Ÿญ์ฒ˜๋ง ( ๋น„๊ตฌ์กฐํ™” )ํ•˜์—ฌ 1๊ฐœ ์ด์ƒ์˜ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•ด๋ณด์ž.

์˜ˆ์ œ 36-01 : ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น ์ด์ „
// ES5
var arr = [1, 2, 3];

var one   = arr[0];
var two   = arr[1];
var three = arr[2];

console.log(one, two, three); // 1 2 3
์˜ˆ์ œ 36-02 : ๋ฐฐ์—ด ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น
const arr = [1, 2, 3];

// ES6 ๋ฐฐ์—ด ๋””์ŠคํŠธ๋Ÿญ์ฒ˜๋ง ํ• ๋‹น
// ๋ณ€์ˆ˜ one, two, three๋ฅผ ์„ ์–ธํ•˜๊ณ  ๋ฐฐ์—ด arr์„ ๋””์ŠคํŠธ๋Ÿญ์ฒ˜๋งํ•˜์—ฌ ํ• ๋‹นํ•œ๋‹ค.
// ์ด๋•Œ ํ• ๋‹น ๊ธฐ์ค€์€ ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋‹ค.
const [one, two, three] = arr;

console.log(one, two, three); // 1 2 3

ํ• ๋‹น๋ฌธ์˜ ์šฐ๋ณ€์— ์žˆ๋Š” ํ• ๋‹น์˜ ๋Œ€์ƒ์€ ์ดํ„ฐ๋Ÿฌ๋ธ”์ด์–ด์•ผํ•œ๋‹ค. ํ• ๋‹น ๊ธฐ์ค€์€ ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค์ด๋‹ค. = ์ˆœ์„œ๋Œ€๋กœ ํ• ๋‹น๋œ๋‹ค.

์˜ˆ์ œ 36-03
const [x, y] = [1, 2];

์—ฐ์‚ฐ์ž ์™ผ์ชฝ์— ๊ฐ’์„ ํ• ๋‹น๋ฐ›์„ ๋ณ€์ˆ˜๋ฅผ ๋ฐฐ์—ด ๋ฆฌํ„ฐ๋Ÿด ํ˜•ํƒœ๋กœ ์„ ์–ธํ•œ๋‹ค.

์˜ˆ์ œ 36-04
const [x, y]; // SyntaxError: Missing initializer in destructuring declaration

const [a, b] = {}; // TypeError: {} is not iterable

์šฐ๋ณ€์— ์ดํ„ฐ๋Ÿฌ๋ธ”์„ ํ• ๋‹นํ•˜์ง€ ์•Š์œผ๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

์˜ˆ์ œ 36-05 : ์„ ์–ธ๊ณผ ํ• ๋‹น ๋ถ„๋ฆฌ
let x, y;
[x, y] = [1, 2];

const ํ‚ค์›Œ๋“œ๋กœ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์—†์–ด์„œ ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

์˜ˆ์ œ 36-06
const [a, b] = [1, 2];
console.log(a, b); // 1 2

const [c, d] = [1];
console.log(c, d); // 1 undefined

const [e, f] = [1, 2, 3];
console.log(e, f); // 1 2

const [g, , h] = [1, 2, 3];
console.log(g, h); // 1 3

๋ฐฐ์—ด ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น์€ ๋ฐฐ์—ด์˜ ์ˆœ์„œ๋Œ€๋กœ ํ• ๋‹น๋œ๋‹ค. ๋ณ€์ˆ˜์˜ ๊ฐœ์ˆ˜์™€ ์ดํ„ฐ๋Ÿฌ๋ธ”์˜ ์š”์†Œ ๊ฐœ์ˆ˜๊ฐ€ ๋ฐ˜๋“œ์‹œ ์ผ์น˜ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

์˜ˆ์ œ 36-07 : ๊ธฐ๋ณธ๊ฐ’ ์„ค์ •
// ๊ธฐ๋ณธ๊ฐ’
const [a, b, c = 3] = [1, 2];
console.log(a, b, c); // 1 2 3

// ๊ธฐ๋ณธ๊ฐ’๋ณด๋‹ค ํ• ๋‹น๋œ ๊ฐ’์ด ์šฐ์„ ํ•œ๋‹ค.
const [e, f = 10, g = 3] = [1, 2];
console.log(e, f, g); // 1 2 3

์ขŒ๋ณ€์˜ ๋ณ€์ˆ˜์— ๊ธฐ๋ณธ๊ฐ’์„ ์„ค์ •ํ•ด์ฃผ์—ˆ๋‹ค. c ํ• ๋‹น๋œ ๊ฐ’์ด ์šฐ์„ ์ˆœ์œ„์ด๋‹ค. f

์˜ˆ์ œ 36-08 : URL ํŒŒ์‹ฑํ•ด protocol, host, path ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ–๋Š” ๊ฐ์ฒด ์ƒ์„ฑํ•ด ๋ฐ˜ํ™˜
// url์„ ํŒŒ์‹ฑํ•˜์—ฌ protocol, host, path ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ–๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด ๋ฐ˜ํ™˜ํ•œ๋‹ค.
function parseURL(url = '') {
  // '://' ์•ž์˜ ๋ฌธ์ž์—ด(protocol)๊ณผ '/' ์ด์ „์˜ '/'์œผ๋กœ ์‹œ์ž‘ํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ž์—ด(host)๊ณผ '/' ์ดํ›„์˜ ๋ฌธ์ž์—ด(path)์„ ๊ฒ€์ƒ‰ํ•œ๋‹ค.
  const parsedURL = url.match(/^(\w+):\/\/([^/]+)\/(.*)$/);
  console.log(parsedURL);
  /*
  [
    'https://developer.mozilla.org/ko/docs/Web/JavaScript',
    'https',
    'developer.mozilla.org',
    'ko/docs/Web/JavaScript',
    index: 0,
    input: 'https://developer.mozilla.org/ko/docs/Web/JavaScript',
    groups: undefined
  ]
  */

  if (!parsedURL) return {};

  // ๋ฐฐ์—ด ๋””์ŠคํŠธ๋Ÿญ์ฒ˜๋ง ํ• ๋‹น์„ ์‚ฌ์šฉํ•˜์—ฌ ์ดํ„ฐ๋Ÿฌ๋ธ”์—์„œ ํ•„์š”ํ•œ ์š”์†Œ๋งŒ ์ถ”์ถœํ•œ๋‹ค.
  const [, protocol, host, path] = parsedURL;
  return { protocol, host, path };
}

const parsedURL = parseURL('https://developer.mozilla.org/ko/docs/Web/JavaScript');
console.log(parsedURL);
/*
{
  protocol: 'https',
  host: 'developer.mozilla.org',
  path: 'ko/docs/Web/JavaScript'
}
*/

์ดํ„ฐ๋Ÿฌ๋ธ”์—์„œ ํ•„์š”ํ•œ ์š”์†Œ๋งŒ ์ถ”์ถœํ•˜์—ฌ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์œ ์šฉํ•˜๋‹ค.

์˜ˆ์ œ 36-09 : Rest ์š”์†Œ ์‚ฌ์šฉ
// Rest ์š”์†Œ
const [x, ...y] = [1, 2, 3];
console.log(x, y); // 1 [ 2, 3 ]

Rest ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ์œ ์‚ฌํ•˜๊ฒŒ Rest Element ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. Rest ์š”์†Œ๋Š” Rest ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๊ฐ™๊ฒŒ ๋ฐ˜๋“œ์‹œ ๋งˆ์ง€๋ง‰์— ์œ„์น˜ํ•ด์•ผ ํ•œ๋‹ค.



36.2 ๊ฐ์ฒด ๋””์ŠคํŠธ๋Ÿญ์ฒ˜๋ง ํ• ๋‹น

๊ฐ์ฒด์˜ ๊ฐ ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ ๋””์ŠคํŠธ๋Ÿญ์ฒ˜๋งํ•˜์—ฌ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•ด๋ณด์ž.

์˜ˆ์ œ 36-10 : ES5 ํ”„๋กœํผํ‹ฐ ํ‚ค ์‚ฌ์šฉ
// ES5
var user = { firstName: 'Ungmo', lastName: 'Lee' };

var firstName = user.firstName;
var lastName  = user.lastName;

console.log(firstName, lastName); // Ungmo Lee
์˜ˆ์ œ 36-11 : ES6 ๋””์ŠคํŠธ๋Ÿญ์ฒ˜๋ง ํ• ๋‹น
const user = { firstName: 'Ungmo', lastName: 'Lee' };

// ES6 ๊ฐ์ฒด ๋””์ŠคํŠธ๋Ÿญ์ฒ˜๋ง ํ• ๋‹น
// ๋ณ€์ˆ˜ lastName, firstName์„ ์„ ์–ธํ•˜๊ณ  user ๊ฐ์ฒด๋ฅผ ๋””์ŠคํŠธ๋Ÿญ์ฒ˜๋งํ•˜์—ฌ ํ• ๋‹นํ•œ๋‹ค.
// ์ด๋•Œ ํ”„๋กœํผํ‹ฐ ํ‚ค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋””์ŠคํŠธ๋Ÿญ์ฒ˜๋ง ํ• ๋‹น์ด ์ด๋ฃจ์–ด์ง„๋‹ค. ์ˆœ์„œ๋Š” ์˜๋ฏธ๊ฐ€ ์—†๋‹ค.
const { lastName, firstName } = user;

console.log(firstName, lastName); // Ungmo Lee

ํ• ๋‹น ๊ธฐ์ค€์ด ํ”„๋กœํผํ‹ฐ ํ‚ค์ด๊ธฐ ๋•Œ๋ฌธ์— ์ˆœ์„œ๋Š” ์˜๋ฏธ๊ฐ€ ์—†๊ณ  ์„ ์–ธ๋œ ๋ณ€์ˆ˜ ์ด๋ฆ„๊ณผ ํ”„๋กœํผํ‹ฐ ํ‚ค๊ฐ€ ์ผ์น˜ํ•˜๋ฉด ํ• ๋‹น๋œ๋‹ค.

์˜ˆ์ œ 36-12
const { lastName, firstName } = { firstName: 'Ungmo', lastName: 'Lee' };

ํ• ๋‹น ์—ฐ์‚ฐ์ž ์™ผ์ชฝ์— ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ํ• ๋‹น๋ฐ›์„ ๋ณ€์ˆ˜ ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด ํ˜•ํƒœ๋กœ ์„ ์–ธํ•ด์•ผ ํ•œ๋‹ค.

์˜ˆ์ œ 36-13
const { lastName, firstName };
// SyntaxError: Missing initializer in destructuring declaration

const { lastName, firstName } = null;
// TypeError: Cannot destructure property 'lastName' of 'null' as it is null.

์šฐ๋ณ€์— ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•˜์ง€ ์•Š์œผ๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๊ฐ์ฒด๋กœ ํ‰๊ฐ€๋  ์ˆ˜ ์žˆ๋Š” ํ‘œํ˜„์‹ ( ๋ฌธ์ž์—ด, ์ˆซ์ž, ๋ฐฐ์—ด ๋“ฑ )๋„ ํฌํ•จ๋œ๋‹ค.

์˜ˆ์ œ 36-14 : ํ”„๋กœํผํ‹ฐ ์ถ•์•ฝ ํ‘œํ˜„์„ ํ†ตํ•ด ์„ ์–ธ
const { lastName, firstName } = user;
// ์œ„์™€ ์•„๋ž˜๋Š” ๋™์น˜๋‹ค.
const { lastName: lastName, firstName: firstName } = user;
์˜ˆ์ œ 36-15
const user = { firstName: 'Ungmo', lastName: 'Lee' };

// ํ”„๋กœํผํ‹ฐ ํ‚ค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋””์ŠคํŠธ๋Ÿญ์ฒ˜๋ง ํ• ๋‹น์ด ์ด๋ฃจ์–ด์ง„๋‹ค.
// ํ”„๋กœํผํ‹ฐ ํ‚ค๊ฐ€ lastName์ธ ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ln์— ํ• ๋‹นํ•˜๊ณ ,
// ํ”„๋กœํผํ‹ฐ ํ‚ค๊ฐ€ firstName์ธ ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ fn์— ํ• ๋‹นํ•œ๋‹ค.
const { lastName: ln, firstName: fn } = user;

console.log(fn, ln); // Ungmo Lee

๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ ํ‚ค์™€ ๋‹ค๋ฅธ ๋ณ€์ˆ˜ ์ด๋ฆ„์œผ๋กœ ํ• ๋‹น๋ฐ›๋Š”๋‹ค.

์˜ˆ์ œ 36-16 : ๊ธฐ๋ณธ๊ฐ’ ์„ค์ •
const { firstName = 'Ungmo', lastName } = { lastName: 'Lee' };
console.log(firstName, lastName); // Ungmo Lee

const { firstName: fn = 'Ungmo', lastName: ln } = { lastName: 'Lee' };
console.log(fn, ln); // Ungmo Lee

๊ธฐ๋ณธ๊ฐ’์„ ์„ค์ •ํ•ด์ฃผ์—ˆ๋‹ค. firstname fn, ln

์˜ˆ์ œ 36-17
const str = 'Hello';
// String ๋ž˜ํผ ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ length ํ”„๋กœํผํ‹ฐ๋งŒ ์ถ”์ถœํ•œ๋‹ค.
const { length } = str;
console.log(length); // 5

const todo = { id: 1, content: 'HTML', completed: true };
// todo ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ id ํ”„๋กœํผํ‹ฐ๋งŒ ์ถ”์ถœํ•œ๋‹ค.
const { id } = todo;
console.log(id); // 1

๊ฐ์ฒด์—์„œ ํ”„๋กœํผํ‹ฐ ํ‚ค๋กœ ํ•„์š”ํ•œ ํ”„๋กœํผํ‹ฐ ๊ฐ’๋งŒ ์ถ”์ถœํ•˜์—ฌ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์œ ์šฉํ•˜๋‹ค.

์˜ˆ์ œ 36-18
function printTodo(todo) {
  console.log(`ํ• ์ผ ${todo.content}์€ ${todo.completed ? '์™„๋ฃŒ' : '๋น„์™„๋ฃŒ'} ์ƒํƒœ์ž…๋‹ˆ๋‹ค.`);
}

printTodo({ id: 1, content: 'HTML', completed: true });
// ํ• ์ผ HTML์€ ์™„๋ฃŒ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

๊ฐ์ฒด๋ฅผ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›๋Š” ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์—๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ์ œ 36-19
function printTodo({ content, completed }) {
  console.log(`ํ• ์ผ ${content}์€ ${completed ? '์™„๋ฃŒ' : '๋น„์™„๋ฃŒ'} ์ƒํƒœ์ž…๋‹ˆ๋‹ค.`);
}

printTodo({ id: 1, content: 'HTML', completed: true });
// ํ• ์ผ HTML์€ ์™„๋ฃŒ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

๊ฐ์ฒด๋ฅผ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜ todo์— ๊ฐ์ฒด ๋””์ŠคํŠธ๋Ÿญ์ฒ˜๋ง ํ• ๋‹น์„ ์‚ฌ์šฉํ•˜๋ฉด ๋” ๊ฐ„๋‹จํ•˜๊ณ  ๊ฐ€๋…์„ฑ์ด ์ข‹๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ์ œ 36-20
const todos = [
  { id: 1, content: 'HTML', completed: true },
  { id: 2, content: 'CSS', completed: false },
  { id: 3, content: 'JS', completed: false }
];

// todos ๋ฐฐ์—ด์˜ ๋‘ ๋ฒˆ์งธ ์š”์†Œ์ธ ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ id ํ”„๋กœํผํ‹ฐ๋งŒ ์ถ”์ถœํ•œ๋‹ค.
const [, { id }] = todos;
console.log(id); // 2

๋ฐฐ์—ด์˜ ์š”์†Œ๊ฐ€ ๊ฐ์ฒด์ผ ๋•Œ ๋ฐฐ์—ด ๋””์ŠคํŠธ๋Ÿญ์ฒ˜๋ง ํ• ๋‹น๊ณผ ๊ฐ์ฒด ๋””์ŠคํŠธ๋Ÿญ์ฒ˜๋ง ํ• ๋‹น์„ ํ˜ผ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ์ œ 36-21 : ์ค‘์ฒฉ ๊ฐ์ฒด
const user = {
  name: 'Lee',
  address: {
    zipCode: '03068',
    city: 'Seoul'
  }
};

// address ํ”„๋กœํผํ‹ฐ ํ‚ค๋กœ ๊ฐ์ฒด๋ฅผ ์ถ”์ถœํ•˜๊ณ  ์ด ๊ฐ์ฒด์˜ city ํ”„๋กœํผํ‹ฐ ํ‚ค๋กœ ๊ฐ’์„ ์ถ”์ถœํ•œ๋‹ค.
const { address: { city } } = user;
console.log(city); // 'Seoul'
์˜ˆ์ œ 36-22 : Rest ํŒŒ๋ผ๋ฏธํ„ฐ ์‚ฌ์šฉ
// Rest ํ”„๋กœํผํ‹ฐ
const { x, ...rest } = { x: 1, y: 2, z: 3 };
console.log(x, rest); // 1 { y: 2, z: 3 }

Rest ํ”„๋กœํผํ‹ฐ ... ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. Rest ํŒŒ๋ผ๋ฏธํ„ฐ๋‚˜ Rest ์š”์†Œ๊ฐ™์ด ๋ฐ˜๋“œ์‹œ ๋งจ ๋งˆ์ง€๋ง‰์— ์œ„์น˜ํ•ด์•ผ ํ•œ๋‹ค.