DataScience/Data Structure

์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ณต๋ถ€ํ•ด์•ผ ํ•˜๋Š” ์ด์œ ? ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋˜‘๋˜‘ํ•˜๊ฒŒ ์“ฐ๊ธฐ!

Grace 2022. 12. 6. 23:24
๐Ÿ’ก ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ณต๋ถ€ํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ ๋งˆ์Œ๊ฐ€์ง
1. ํ•ญ์ƒ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํ’€์ด ๋ฐฉ๋ฒ•์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.
2. ํ•ญ์ƒ ์˜ˆ์™ธ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค
3. ๋‚ด๊ฐ€ ์ด๋ฏธ ํ‘ผ ๋‹ต์„ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ•ญ์ƒ ๊ณ ๋ฏผํ•ด์•ผ ํ•œ๋‹ค.
4. ํ’€์ง€ ๋ชปํ–ˆ๋˜ ์ฝ”๋“œ ๋˜ํ•œ ๋‚จ๊ฒจ๋‘๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
5. ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ฝ”๋“œ๋ฅผ ๋งŽ์ด ๋ด์•ผ, ๋‚˜์˜ ์ƒ๊ฐ์—์„œ ๋ฒ—์–ด๋‚˜ ์ƒˆ๋กœ์šด ์‚ฌ๊ณ ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.
6. ๋ฌธ์ œ๋ฅผ ์‰ฝ๊ฒŒ ํฌ๊ธฐํ•˜์ง€ ๋ง๊ณ , ๋„์ €ํžˆ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด ๋‹ต์„ ๋ณด๊ณ  ์‹œ๊ฐ„์ด ์ง€๋‚œ ํ›„ ๋‹ค์‹œ ํ’€์–ด๋ณด๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
7. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋งˆ์Šคํ„ฐ๊ฐ€ ๋  ํ•„์š”๋Š” ์—†์ง€๋งŒ, ์ต์ˆ™ํ•ด์ ธ์•ผ ํ•œ๋‹ค.
  - ํšŒ์‚ฌ๋Š” ์—…๋ฌด๋ฅผ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ดˆ ๋Šฅ๋ ฅ์„ ํ™•์ธํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ ํ•ด๊ฒฐ ๋Šฅ๋ ฅ์„ ๊ธฐ๋ฅด๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
  - ์˜ˆ์™ธ์ ์œผ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ค‘์š”ํ•œ ํšŒ์‚ฌ(๊ฒŒ์ž„, ์ธ๊ณต์ง€๋Šฅ ๋“ฑ์˜ ๋ถ„์•ผ)์ธ ๊ฒฝ์šฐ์—๋Š” ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•Œ๊ณ ๋ฆฌ์ฆ˜/์ž๋ฃŒ๊ตฌ์กฐ์— ๋Œ€ํ•ด ๋งŽ์ด ๊ณต๋ถ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
8. ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜์˜ ์ด๋ฆ„์„ ์ž˜ ์ •ํ•ด์•ผํ•˜๋ฉฐ ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.
9. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ•(๊ตฌ์กฐ๋ถ„ํ•ด ํ• ๋‹น, spread ์—ฐ์‚ฐ์ž ๋“ฑ)์„ ์ž˜ ํ™œ์šฉํ•œ๋‹ค.
10. ์ฝ”๋“œ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•œ๋‹ค.

์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๊ถ๊ทน์ ์ธ ๋ชฉํ‘œ๋กœ, ์ƒํ™ฉ์— ๋”ฐ๋ผ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋„๋ก ํŠน์ • ๊ตฌ์กฐ๋ฅผ ์ด๋ฃจ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ž๋ฃŒ ๊ตฌ์กฐ์—๋Š” ์Šคํƒ, ํ, ๊ทธ๋ž˜ํ”„, ํŠธ๋ฆฌ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํŠน์ • ๋ฌธ์ œ๋ฅผ ํšจ์œจ์ ์ด๊ณ  ๋น ๋ฅด๊ฒŒ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ๊ถ๊ทน์ ์ธ ๋ชฉํ‘œ๋กœ ์ •ํ•ด์ง„ ์ผ๋ จ์˜ ์ ˆ์ฐจ๋‚˜ ๋ฐฉ๋ฒ•์„ ๊ณต์‹ํ™”ํ•œ ํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ˆ˜ํ•™์ ์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ƒํ™ฉ์— ๋”ฐ๋ผ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ง„ํƒ์ƒ‰, ์ตœ๋‹จ๊ฑฐ๋ฆฌํƒ์ƒ‰ ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

์‹ค๋ฌด์—์„œ ์ค‘์š”ํ•˜๊ฒŒ ์ƒ๊ฐํ•˜๋Š” ์š”์†Œ๋Š” ๊ธฐ์ดˆ ์ฝ”๋”ฉ ๋Šฅ๋ ฅ, ์ „๋ฌธ ๋ถ„์•ผ ์ง€์‹, ๊ธฐ๋ณธ CS ์ง€์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์„ธ๊ฐ€์ง€ ์ค‘ ๊ธฐ์ดˆ ์ฝ”๋”ฉ ๋Šฅ๋ ฅ์€ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ณต๋ถ€ํ•ด์„œ ๋Šฅ๋ ฅ์„ ํ‚ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋ฌธ์ œ ํ•ด๊ฒฐ ๋Šฅ๋ ฅ์„ ํ‚ค์šธ ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ ํ•ด๊ฒฐ ๋Šฅ๋ ฅ์€ ๋…ผ๋ฆฌ์  ์‚ฌ๊ณ , ์ „์‚ฐํ™” ๋Šฅ๋ ฅ, ์—ฃ์ง€ ์ผ€์ด์Šค ํƒ์ƒ‰ ๋Šฅ๋ ฅ์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋ˆ„๊ฐ€ ๋ด๋„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ๊ณ  ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ทธ ์‚ฌ๊ณ ๋ฅผ ์ปดํ“จํ„ฐ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด๋กœ ์ „์‚ฐํ™” ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, ๊ทธ ์ค‘์—์„œ๋„ ์˜ˆ๊ธฐ์น˜ ๋ชปํ•œ ์˜ˆ์™ธ ์ผ€์ด์Šค๋“ค์„ ์•Œ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ž๋ฃŒ ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ณ€ํ•˜์ง€ ์•Š๊ธฐ ๋–„๋ฌธ์— ์•Œ์•„๋‘๋ฉด ๋‘๊ณ ๋‘๊ณ  ์‚ฌ์šฉํ•˜์‹ค ์ˆ˜ ์žˆ์œผ๋‹ˆ ๊ณต๋ถ€ํ•ด๋‘์‹œ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ 9๊ฐ€์ง€ ์ฝ”๋“œ ํŠธ๋ฆญ

๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น์„ ์ด์šฉํ•œ ๋ณ€์ˆ˜ swap

ES6์˜ ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ๋ณ€์ˆ˜๋ฅผ swap ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

let a = 5, b = 10;
[a, b] = [b, a];
console.log(a, b); *// 10 5*

๋ฐฐ์—ด ์ƒ์„ฑ์œผ๋กœ ๋ฃจํ”„ ์ œ๊ฑฐํ•˜๊ธฐ

๋ณดํ†ต ๋‹จ์ˆœํžˆ ๋ฒ”์œ„ ๋ฃจํ”„๋ฅผ ๋Œ๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

let sum = 0;
for (let i = 5; i < 10; i += 1) {
    sum += i;
}

๋งŒ์•ฝ ๋ฒ”์œ„ ๋ฃจํ”„๋ฅผ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const sum = Array
    .from(new Array(5), (_, k) => k + 5)
    .reduce((acc, cur) => acc + cur, 0);

๋ฐฐ์—ด ๋‚ด ๊ฐ™์€ ์š”์†Œ ์ œ๊ฑฐํ•˜๊ธฐ

Set์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const names = ['Lee', 'Kim', 'Park', 'Lee', 'Kim'];
const uniqueNamesWithArrayFrom = Array.from(new Set(names));
const uniqueNamesWithSpread = [...new Set(names)];

Spread ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•œ ๊ฐ์ฒด ๋ณ‘ํ•ฉ

๋‘ ๊ฐ์ฒด๋ฅผ ๋ณ„๋„ ๋ณ€์ˆ˜์— ํ•ฉ์ณ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const person = {
    name: 'Lee Sun-Hyoup',
    familyName: 'Lee',
    givenName: 'Sun-Hyoup'
};

const company = {
    name: 'Cobalt. Inc.',
    address: 'Seoul'
};

const leeSunHyoup = { ...person, ...company };
console.log(leeSunHyoup);
*// {
//   address: “Seoul”
//     familyName: “Lee”
//   givenName: “Sun-Hyoup”
//   name: "Cobalt. Inc." 
// ๊ฐ™์€ ํ‚ค๋Š” ๋งˆ์ง€๋ง‰์— ๋Œ€์ž…๋œ ๊ฐ’์œผ๋กœ ์ •ํ•ด์ง„๋‹ค.
// }*

&&์™€ || ํ™œ์šฉ

&&์™€ ||๋Š” ์กฐ๊ฑด๋ฌธ ์™ธ์—์„œ๋„ ํ™œ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

*/// ||
// ๊ธฐ๋ณธ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
// participantName์ด 0, undefined, ๋นˆ ๋ฌธ์ž์—ด, null์ผ ๊ฒฝ์šฐ 'Guest'๋กœ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.*
const name = participantName || 'Guest';

*/// &&
// flag๊ฐ€ true์ผ ๊ฒฝ์šฐ์—๋งŒ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.*
flag && func();

*// ๊ฐ์ฒด ๋ณ‘ํ•ฉ์—๋„ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.*
const makeCompany = (showAddress) => {
  return {
    name: 'Cobalt. Inc.',
    ...showAddress && { address: 'Seoul' }
  }
};
console.log(makeCompany(false));
*// { name: 'Cobalt. Inc.' }*console.log(makeCompany(true));
*// { name: 'Cobalt. Inc.', address: 'Seoul' }*

๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น ์‚ฌ์šฉํ•˜๊ธฐ

๊ฐ์ฒด์—์„œ ํ•„์š”ํ•œ ๊ฒƒ๋งŒ ๊บผ๋‚ด ์“ฐ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

const person = {
    name: 'Lee Sun-Hyoup',
    familyName: 'Lee',
    givenName: 'Sun-Hyoup'
    company: 'Cobalt. Inc.',
    address: 'Seoul',
}

const { familyName, givenName } = person;

๊ฐ์ฒด ์ƒ์„ฑ์‹œ ํ‚ค ์ƒ๋žตํ•˜๊ธฐ

๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํ”„๋กœํผํ‹ฐ ํ‚ค๋ฅผ ๋ณ€์ˆ˜ ์ด๋ฆ„์œผ๋กœ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const name = 'Lee Sun-Hyoup';
const company = 'Cobalt';
const person = {
  name,
  company
}
console.log(person);
*// {
//   name: 'Lee Sun-Hyoup'
//   company: 'Cobalt',
// }*

๋น„๊ตฌ์กฐํ™” ํ• ๋‹น ์‚ฌ์šฉํ•˜๊ธฐ

ํ•จ์ˆ˜์— ๊ฐ์ฒด๋ฅผ ๋„˜๊ธธ ๊ฒฝ์šฐ ํ•„์š”ํ•œ ๊ฒƒ๋งŒ ๊บผ๋‚ด ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const makeCompany = ({ name, address, serviceName }) => {
  return {
    name,
    address,
    serviceName
  }
};
const cobalt = makeCompany({ name: 'Cobalt. Inc.', address: 'Seoul', serviceName: 'Present' });

๋™์  ์†์„ฑ ์ด๋ฆ„

ES6์— ์ถ”๊ฐ€๋œ ๊ธฐ๋Šฅ์œผ๋กœ ๊ฐ์ฒด์˜ ํ‚ค๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const nameKey = 'name';
const emailKey = 'email';
const person = {
  [nameKey]: 'Lee Sun-Hyoup',
  [emailKey]: 'kciter@naver.com'
};
console.log(person);
*// {
//   name: 'Lee Sun-Hyoup',
//   email: 'kciter@naver.com'
// }*

!! ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Boolean ๊ฐ’์œผ๋กœ ๋ฐ”๊พธ๊ธฐ

!! ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•˜์—ฌ 0, null, ๋นˆ ๋ฌธ์ž์—ด, undefined, NaN์„ false๋กœ ๊ทธ ์™ธ์—๋Š” true๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

function check(variable) {
  if (!!variable) {
    console.log(variable);
  } else {
    console.log('์ž˜๋ชป๋œ ๊ฐ’');
  }
}
check(null); *// ์ž˜๋ชป๋œ ๊ฐ’*
check(3.14); *// 3.14*
check(undefined); *// ์ž˜๋ชป๋œ ๊ฐ’*
check(0); *// ์ž˜๋ชป๋œ ๊ฐ’*
check('Good'); *// Good*
check(''); *// ์ž˜๋ชป๋œ ๊ฐ’*
check(NaN); *// ์ž˜๋ชป๋œ ๊ฐ’*
check(5); *// 5*