JavaScript Objects, Square Brackets and Algorithms - Lee-hyuna/33-js-concepts-kr GitHub Wiki

원문 좜처 : https://www.freecodecamp.org/news/javascript-objects-square-brackets-and-algorithms-e9a2916dc158/

by Dmitri Grabov

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ κ°€μž₯ κ°•λ ₯ν•œ μΈ‘λ©΄ 쀑 ν•˜λ‚˜λŠ” 개체의 속성을 λ™μ μœΌλ‘œ μ°Έμ‘°ν•  수 μžˆλ‹€λŠ” 것이닀. 이 κΈ€μ—μ„œ μš°λ¦¬λŠ” 이것이 μ–΄λ–»κ²Œ μž‘λ™ν•˜λŠ”μ§€ 그리고 이것이 μš°λ¦¬μ—κ²Œ μ–΄λ–€ 이점을 쀄 수 μžˆλŠ”μ§€λ₯Ό μ‚΄νŽ΄λ³Ό 것이닀. μš°λ¦¬λŠ” 컴퓨터 κ³Όν•™μ—μ„œ μ‚¬μš©λ˜λŠ” 데이터 ꡬ쑰 쀑 일뢀λ₯Ό κ°„λ‹¨νžˆ μ‚΄νŽ΄λ³Ό 것이닀. λ˜ν•œ μš°λ¦¬λŠ” μ•Œκ³ λ¦¬μ¦˜μ˜ μ„±λŠ₯을 μ„€λͺ…ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” Big O ν‘œκΈ°λ²•μ΄λΌκ³  λΆˆλ¦¬λŠ” 것을 μ‚΄νŽ΄λ³Ό 것이닀.

Object intro

μš°μ„  μžλ™μ°¨λ₯Ό λŒ€ν‘œν•˜λŠ” κ°„λ‹¨ν•œ 물체λ₯Ό λ§Œλ“œλŠ” 것뢀터 μ‹œμž‘ν•©μ‹œλ‹€. 각 λ¬Όμ²΄λŠ” 속성이라고 λΆˆλ¦¬λŠ” 것을 가지고 μžˆλ‹€. 속성은 물체에 μ†ν•˜λŠ” λ³€μˆ˜λ‹€. 우리의 μžλ™μ°¨ λ¬Όμ²΄λŠ” μ„Έ 가지 νŠΉμ„±μ„ κ°€μ§ˆ 것이닀: make, model, color

μ–΄λ–€ λͺ¨μŠ΅μΌμ§€ λ³΄μ‹œμ£ .

const car = {  make: 'Ford',  model: 'Fiesta',  color: 'Red'};

μš°λ¦¬λŠ” 점 ν‘œκΈ°λ²•μ„ μ‚¬μš©ν•˜μ—¬ 물체의 κ°œλ³„ 속성을 μ–ΈκΈ‰ν•  수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄, λ§Œμ•½ μš°λ¦¬κ°€ 우리 차의 색이 무엇인지 μ•Œκ³  μ‹Άλ‹€λ©΄, μš°λ¦¬λŠ” car.color와 같은 점 ν‘œκΈ°λ²•μ„ μ‚¬μš©ν•  수 μžˆλ‹€.

console.logλ₯Ό μ‚¬μš©ν•˜μ—¬ 좜λ ₯ν•  μˆ˜λ„ μžˆλ‹€.

console.log(car.color); //outputs: Red

속성을 μ°Έμ‘°ν•˜λŠ” 또 λ‹€λ₯Έ 방법은 μ‚¬κ°ν˜• λΈŒλΌμΌ“ ν‘œκΈ°λ²•μ„ μ‚¬μš©ν•˜λŠ” 것이닀.

console.log(car['color']); //outputs: Red

μœ„μ˜ μ˜ˆμ—μ„œλŠ” 속성 이름을 λŒ€κ΄„ν˜Έ μ•ˆμ˜ λ¬Έμžμ—΄λ‘œ μ‚¬μš©ν•˜μ—¬ ν•΄λ‹Ή 속성 이름에 ν•΄λ‹Ήν•˜λŠ” 값을 μ–»λŠ”λ‹€.
μ‚¬κ°ν˜• λΈŒλΌμΌ“ ν‘œκΈ°λ²•μ˜ μœ μš©ν•œ 점은 λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ™μ μœΌλ‘œ 속성을 얻을 수 μžˆλ‹€λŠ” 것이닀.

즉, νŠΉμ • 속성 이름을 ν•˜λ“œμ½”λ”©ν•˜λŠ” 것이 μ•„λ‹ˆλΌ λ³€μˆ˜μ—μ„œ λ¬Έμžμ—΄λ‘œ 지정할 수 μžˆλ‹€.

const propertyName = 'color';const console.log(car[propertyName]); //outputs: Red

사각 λΈŒλž˜ν‚· ν‘œκΈ°λ²•κ³Ό ν•¨κ»˜ 동적 lookup μ‚¬μš©

이것을 μ΄μš©ν•  수 μžˆλŠ” 예λ₯Ό 보자.
λ ˆμŠ€ν† λž‘μ„ μš΄μ˜ν•˜λ©΄μ„œ 메뉴에 μžˆλŠ” ν’ˆλͺ©μ˜ 가격을 얻을 수 있기λ₯Ό μ›ν•œλ‹€κ³  ν•˜μž.
이것을 ν•˜λŠ” ν•œ 가지 방법은 if/else λ¬Έμž₯을 μ‚¬μš©ν•˜λŠ” 것이닀.

ν’ˆλͺ©λͺ…을 μˆ˜λ½ν•˜κ³  가격을 λ°˜ν™˜ν•˜λŠ” κΈ°λŠ₯을 μ“°μž.

function getPrice(itemName){  if(itemName === 'burger') {    return 10;  } else if(itemName === 'fries') {    return 3;  } else if(itemName === 'coleslaw') {    return 4;  } else if(itemName === 'coke') {    return 2;  } else if(itemName === 'beer') {    return 5;  }}

μœ„μ˜ 접근방식은 νš¨κ³Όκ°€ μžˆμ§€λ§Œ, 이상적이지 μ•Šλ‹€.
μš°λ¦¬λŠ” 우리 μ½”λ“œμ— 메뉴λ₯Ό ν•˜λ“œμ½”λ”©ν–ˆλ‹€. 이제 우리의 메뉴가 λ°”λ€Œλ©΄ μš°λ¦¬λŠ” μ½”λ“œλ₯Ό λ‹€μ‹œ μ“°κ³  λ‹€μ‹œ 배포해야 ν•  것이닀. κ²Œλ‹€κ°€, μš°λ¦¬λŠ” κΈ΄ 메뉴λ₯Ό κ°€μ§ˆ 수 있고 이 μ½”λ“œλ₯Ό λͺ¨λ‘ 써야 ν•˜λŠ” 것은 번거둜울 것이닀.

더 λ‚˜μ€ 접근법은 우리의 데이터와 논리λ₯Ό λΆ„λ¦¬ν•˜λŠ” 것이닀.
κ·Έ μžλ£Œμ—λŠ” 우리의 메뉴가 포함될 것이고 κ·Έ λ…Όλ¦¬λŠ” κ·Έ λ©”λ‰΄μ—μ„œ 가격을 올릴 것이닀.

μš°λ¦¬λŠ” 메뉴λ₯Ό ν‚€λ‘œ μ•Œλ €μ§„ 속성 이름이 값에 ν•΄λ‹Ήν•˜λŠ” 객체둜 λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€.이 경우 μ—΄μ‡ λŠ” ν’ˆλͺ©λͺ…이고 값은 ν’ˆλͺ©κ°€κ²©μ΄λ‹€.

const menu = {  burger: 10,  fries: 3,  coleslaw: 4,  coke: 2,  beer: 5};

μ‚¬κ°ν˜• λΈŒλΌμΌ“ ν‘œκΈ°λ²•μ„ μ‚¬μš©ν•˜μ—¬ λ‹€μŒ 두 가지 인수λ₯Ό μˆ˜μš©ν•˜λŠ” ν•¨μˆ˜λ₯Ό λ§Œλ“€ 수 μžˆλ‹€.

  • a menu object
  • a string with item name

ν•΄λ‹Ή ν’ˆλͺ©μ˜ 가격을 λ°˜ν™˜ν•˜μ‹­μ‹œμ˜€.

const menu = {  burger: 10,  fries: 3,  coleslaw: 4,  coke: 2,  beer: 5};
function getPrice(itemName, menu){  const itemPrice = menu[itemName];  return itemPrice;}
const priceOfBurger = getPrice('burger', menu);console.log(priceOfBurger); // outputs: 10

이 μ ‘κ·Όλ°©μ‹μ˜ λ‹¨μ •ν•œ 점은 우리의 λ…Όλ¦¬λ‘œλΆ€ν„° 우리의 데이터λ₯Ό λΆ„λ¦¬ν–ˆλ‹€λŠ” 것이닀.
이 μ˜ˆμ—μ„œ, λ°μ΄ν„°λŠ” 우리의 μ½”λ“œμ— μ‘΄μž¬ν•˜μ§€λ§Œ, 그것은 λ°μ΄ν„°λ² μ΄μŠ€λ‚˜ APIμ—μ„œ μ‰½κ²Œ λ‚˜μ˜¬ 수 μžˆλ‹€.

그것은 더 이상 ν’ˆλͺ©λͺ…을 ν’ˆλͺ©κ°€κ²©μœΌλ‘œ λ°”κΎΈλŠ” 우리의 룩업 논리와 λ°€μ ‘ν•˜κ²Œ μ—°κ΄€λ˜μ–΄ μžˆμ§€ μ•Šλ‹€.

Datastructures and algorithms

컴퓨터 κ³Όν•™ μš©μ–΄μ˜ μ§€λ„λŠ” 각 ν‚€κ°€ ν•΄λ‹Ή 값에 λ§€ν•‘λ˜λŠ” ν‚€/κ°’ 쌍의 집합인 데이터 ꡬ쑰닀. μš°λ¦¬λŠ” 그것을 νŠΉμ •ν•œ 킀에 ν•΄λ‹Ήν•˜λŠ” 값을 보기 μœ„ν•΄ μ‚¬μš©ν•  수 μžˆλ‹€. 이것이 μ•žμ˜ μ˜ˆμ—μ„œ μš°λ¦¬κ°€ ν•˜κ³  μžˆλŠ” 일이닀. μš°λ¦¬λŠ” ν’ˆλͺ© 이름인 ν‚€λ₯Ό 가지고 있고 μš°λ¦¬λŠ” 우리의 메뉴 였브젝트λ₯Ό μ‚¬μš©ν•˜μ—¬ κ·Έ ν’ˆλͺ©μ˜ μƒμ‘ν•˜λŠ” 가격을 μ°Ύμ•„λ³Ό 수 μžˆλ‹€. μš°λ¦¬λŠ” 지도 데이터 ꡬ쑰λ₯Ό κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ μ–΄λ–€ 물체λ₯Ό μ‚¬μš©ν•˜κ³  μžˆλ‹€.

μ™œ μš°λ¦¬κ°€ 지도λ₯Ό μ‚¬μš©ν•˜κΈ°λ₯Ό μ›ν•˜λŠ”μ§€ 예λ₯Ό 보자. μ„œμ μ„ μš΄μ˜ν•˜λ©° μ±… λͺ©λ‘μ„ 가지고 μžˆλ‹€κ³  ν•˜μž. 각 μ±…μ—λŠ” 13자리 숫자인 κ΅­μ œν‘œμ€€μ„œμ λ²ˆν˜Έ(ISBN)λΌλŠ” λ…νŠΉν•œ λ“€μ—¬μ“°κΈ°κ°€ μžˆλ‹€. μš°λ¦¬λŠ” 책을 λ°°μ—΄λ‘œ μ €μž₯ν•˜κ³  ISBN을 μ΄μš©ν•˜μ—¬ 찾을 수 있기λ₯Ό μ›ν•œλ‹€.

μ΄λ ‡κ²Œ ν•˜λŠ” ν•œ 가지 방법은 배열을 μˆœν™˜μ‹œμΌœ 각 μ±…μ˜ ISBN 값을 ν™•μΈν•˜κ³  λ°˜ν™˜ν•˜λŠ” 것과 μΌμΉ˜ν•˜λŠ”μ§€ ν™•μΈν•˜λŠ” 것이닀.

const books = [{  isbn: '978-0099540946',  author: 'Mikhail Bulgakov',  title: 'Master and Margarita'}, {  isbn: '978-0596517748',  author: 'Douglas Crockford',  title: 'JavaScript: The Good Parts'}, {  isbn: '978-1593275846',  author: 'Marijn Haverbeke',  title: 'Eloquent JavaScript'}];
function getBookByIsbn(isbn, books){  for(let i = 0; i < books.length; i++){    if(books[i].isbn === isbn) {      return books[i];    }  }}
const myBook = getBookByIsbn('978-1593275846', books);

이 μ˜ˆμ—μ„œλŠ” 책이 μ„Έ κΆŒλ°–μ— μ—†κΈ° λ•Œλ¬Έμ— 잘 λœλ‹€. ν•˜μ§€λ§Œ μš°λ¦¬κ°€ μ•„λ§ˆμ‘΄μ΄λΌλ©΄ 수백만 ꢌ μ΄μƒμ˜ 책을 λ°˜λ³΅ν•˜λŠ” 것은 맀우 느리고 κ³„μ‚°μ μœΌλ‘œ λΉ„μŒ€ 수 μžˆλ‹€.

컴퓨터 κ³Όν•™μ—μ„œ Big O ν‘œκΈ°λ²•μ€ μ•Œκ³ λ¦¬μ¦˜μ˜ μ„±λŠ₯을 μ„€λͺ…ν•˜λŠ” 데 μ‚¬μš©λœλ‹€. 예λ₯Ό λ“€μ–΄, n이 우리 μ»¬λ ‰μ…˜μ˜ μ±… 수라면, μ΅œμ•…μ˜ 경우 μ‹œλ‚˜λ¦¬μ˜€(μš°λ¦¬κ°€ μ°ΎλŠ” 책은 λͺ©λ‘μ˜ λ§ˆμ§€λ§‰μ΄λ‹€)μ—μ„œ 책을 μ°ΎλŠ” 데 λ°˜λ³΅μ„ μ‚¬μš©ν•˜λŠ” λΉ„μš©μ€ O(n)κ°€ 될 것이닀. 그것은 μš°λ¦¬κ°€ μˆ˜μ§‘ν•œ μ±…λ“€μ˜ μˆ˜κ°€ 두 배둜 μ¦κ°€ν•œλ‹€λ©΄, λ°˜λ³΅μ„ μ‚¬μš©ν•˜μ—¬ 책을 μ°ΎλŠ” λΉ„μš©λ„ 두 λ°°κ°€ 될 κ²ƒμ΄λΌλŠ” 것을 μ˜λ―Έν•œλ‹€.

λ‹€λ₯Έ 데이터 ꡬ쑰λ₯Ό μ‚¬μš©ν•˜μ—¬ μ•Œκ³ λ¦¬μ¦˜μ„ 보닀 효율적으둜 λ§Œλ“€ 수 μžˆλŠ” 방법을 μ‚΄νŽ΄λ΄…μ‹œλ‹€.

λ…Όμ˜λœ 바와 같이, 지도가 킀에 ν•΄λ‹Ήν•˜λŠ” 값을 μ°ΎλŠ” 데 μ‚¬μš©λ  수 μžˆλ‹€. μš°λ¦¬λŠ” 객체λ₯Ό μ΄μš©ν•˜μ—¬ 배열이 μ•„λ‹Œ μ§€λ„λ‘œμ„œ 데이터λ₯Ό ꡬ쑰할 수 μžˆλ‹€.

ν‚€λŠ” ISBN이고 값은 ν•΄λ‹Ή λ„μ„œ 객체가 λœλ‹€.

const books = {  '978-0099540946':{    isbn: '978-0099540946',    author: 'Mikhail Bulgakov',    title: 'Master and Margarita'  },  '978-0596517748': {    isbn: '978-0596517748',    author: 'Douglas Crockford',    title: 'JavaScript: The Good Parts'  },  '978-1593275846': {    isbn: '978-1593275846',    author: 'Marijn Haverbeke',    title: 'Eloquent JavaScript'  }};
function getBookByIsbn(isbn, books){  return books[isbn];}
const myBook = getBookByIsbn('978-1593275846', books);

μš°λ¦¬λŠ” 이제 λ°˜λ³΅μ„ μ‚¬μš©ν•˜λŠ” λŒ€μ‹ μ— ISBN의 κ°„λ‹¨ν•œ 지도 쑰회λ₯Ό μ΄μš©ν•˜μ—¬ 우리의 κ°€μΉ˜λ₯Ό 얻을 수 μžˆλ‹€. μš°λ¦¬λŠ” 더 이상 각 개체의 ISBN 값을 확인할 ν•„μš”κ°€ μ—†λ‹€. μš°λ¦¬λŠ” ν‚€λ₯Ό μ‚¬μš©ν•˜μ—¬ μ§€λ„μ—μ„œ 직접 값을 μ–»λŠ”λ‹€.

μ„±λŠ₯ λ©΄μ—μ„œ, 지도 μ‘°νšŒλŠ” λ°˜λ³΅μ— λΉ„ν•΄ μ—„μ²­λ‚œ ν–₯상을 μ œκ³΅ν•  것이닀. μ§€λ„μ‘°νšŒλŠ” 계산에 μžˆμ–΄ λΉ„μš©μ΄ μΌμ •ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. μ΄λŠ” Big O ν‘œκΈ°λ²•μ„ O(1)둜 ν‘œκΈ°ν•˜μ—¬ μ“Έ 수 μžˆλ‹€. 300만 ꢌ의 책이 μžˆμ–΄λ„ 상관없고, μš°λ¦¬λŠ” ISBN ν‚€λ₯Ό μ‚¬μš©ν•˜μ—¬ 지도λ₯Ό μ‘°μ‚¬ν•¨μœΌλ‘œμ¨ μš°λ¦¬κ°€ μ›ν•˜λŠ” 책을 빨리 얻을 수 μžˆλ‹€.