10.1 κ°μ²΄λž€?

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 객체(object) 기반의 ν”„λ‘œκ·Έλž˜λ° 언어이며, μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό κ΅¬μ„±ν•˜λŠ” 거의 λͺ¨λ“  것이 객체닀. μ›μ‹œ νƒ€μž…μ€ 단 ν•˜λ‚˜μ˜ κ°’λ§Œ λ‚˜νƒ€λ‚΄μ§€λ§Œ, 객체 νƒ€μž…μ€ λ‹€μ–‘ν•œ νƒ€μž…μ˜ 값을 ν•˜λ‚˜μ˜ λ‹¨μœ„λ‘œ κ΅¬μ„±ν•œ 볡합적인 μžλ£Œκ΅¬μ‘°μ΄λ‹€. λ˜ν•œ μ›μ‹œ νƒ€μž…μ˜ κ°’, 즉 μ›μ‹œ 값은 λ³€κ²½ λΆˆκ°€λŠ₯ν•œ κ°’μ΄μ§€λ§Œ 객체 νƒ€μž…μ˜ κ°’, 즉 κ°μ²΄λŠ” λ³€κ²½ κ°€λŠ₯ν•œ 값이닀.

κ°μ²΄λŠ” 0개 μ΄μƒμ˜ ν”„λ‘œνΌν‹°λ‘œ κ΅¬μ„±λœ 집합이며, ν”„λ‘œνΌν‹°λŠ” ν‚€(key)와 κ°’(value)으둜 κ΅¬μ„±λœλ‹€.μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” λͺ¨λ“  값은 ν”„λ‘œνΌν‹° 값이 될 수 μžˆλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ ν•¨μˆ˜λŠ” 일급 객체 μ΄λ―€λ‘œ 값이 될 수 있으며 일급객체인 ν•¨μˆ˜λ˜ν•œ ν”„λ‘œνΌν‹° κ°’μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλ‹€.

ν”„λ‘œνΌν‹° 값이 ν•¨μˆ˜μΌ 경우, 일반 ν•¨μˆ˜μ™€ κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄ λ©”μ„œλ“œ(method)라 λΆ€λ₯Έλ‹€.

  • ν”„λ‘œνΌν‹° : 객체의 μƒνƒœλ₯Ό λ‚˜νƒ€λ‚΄λŠ” κ°’(data)
  • λ©”μ„œλ“œ : ν”„λ‘œνΌν‹°(μƒνƒœ 데이터)λ₯Ό μ°Έμ‘°ν•˜κ³  μ‘°μž‘ν•  수 μžˆλŠ” λ™μž‘

🧐 객체와 ν•¨μˆ˜?

ν•¨μˆ˜λ‘œ 객체λ₯Ό μƒμ„±ν•˜κΈ°λ„ ν•˜λ©°, ν•¨μˆ˜ μžμ²΄κ°€ 객체이기도 ν•˜λ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ κ°μ²΄λŠ” λΆ„λ¦¬ν•΄μ„œ 생각할 수 μ—†λŠ” κ°œλ…μ΄λ‹€. 즉 객체λ₯Ό 이해해야 ν•¨μˆ˜λ₯Ό μ œλŒ€λ‘œ 이해할 수 있고, λ°˜λŒ€λ‘œ ν•¨μˆ˜λ₯Ό 이해해야 객체λ₯Ό μ •ν™•νžˆ 이해할 수 μžˆλ‹€.


10.2 객체 λ¦¬ν„°λŸ΄μ— μ˜ν•œ 객체 생성

C++μ΄λ‚˜ μžλ°” 같은 클래슀 기반 객체지ν–₯ μ–Έμ–΄λŠ” 클래슀λ₯Ό 사전에 μ •μ˜ν•˜κ³  ν•„μš”ν•œ μ‹œμ μ— new μ—°μ‚°μžμ™€ ν•¨κ»˜ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜μ—¬ μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜λŠ” λ°©μ‹μœΌλ‘œ 객체λ₯Ό μƒμ„±ν•œλ‹€.

🧐 μΈμŠ€ν„΄μŠ€?

μΈμŠ€ν„΄μŠ€λž€ ν΄λž˜μŠ€μ— μ˜ν•΄ μƒμ„±λ˜μ–΄ λ©”λͺ¨λ¦¬μ— μ €μž₯된 싀체λ₯Ό μ˜λ―Έν•œλ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” ν”„λ‘œν† νƒ€μž… 기반 객체지ν–₯ μ–Έμ–΄λ‘œμ„œ λ‹€μŒκ³Όκ°™μ€ 객체생성 방법을 μ§€μ›ν•œλ‹€.

  • 객체 λ¦¬ν„°λŸ΄
  • Object μƒμ„±μž ν•¨μˆ˜
  • μƒμ„±μž ν•¨μˆ˜
  • Object.create λ©”μ„œλ“œ
  • 클래슀 ES6

객체 생성 λ°©λ²•μ€‘μ—μ„œ κ°€μž₯ κ°„λ‹¨ν•œ 방법인 객체 λ¦¬ν„°λŸ΄μ€ μ€‘κ΄„ν˜Έ({...}) 내에 0개 μ΄μƒμ˜ ν”„λ‘œνΌν‹°λ₯Ό μ •μ˜ν•œλ‹€. λ³€μˆ˜μ— ν• λ‹Ήλ˜λŠ” μ‹œμ μ— μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 객체 λ¦¬ν„°λŸ΄μ„ 해석해 객체λ₯Ό μƒμ„±ν•œλ‹€.

객체 λ¦¬ν„°λŸ΄μ˜ μ€‘κ΄„ν˜ΈλŠ” μ½”λ“œ 블둝을 μ˜λ―Έν•˜μ§€ μ•ŠλŠ”λ‹€. λ”°λΌμ„œ μ½”λ“œλΈ”λ‘μ˜ λ‹«λŠ” μ€‘κ΄„ν˜Έ λ’€μ—λŠ” μ„Έλ―Έμ½œλ‘ μ„ 뢙이지 μ•Šμ§€λ§Œ 객체 λ¦¬ν„°λŸ΄μ˜ λ‹«λŠ” μ€‘κ΄„ν˜Έ λ’€μ—λŠ” μ„Έλ―Έμ½œλ‘ μ„ 뢙인닀.

  var person = {
    name: 'Lee',
    sayHello: function () {
      console.log(`Hello! My name is ${this.name}.`);
    }
  };

  console.log(typeof person); // object
  console.log(person); // {name: "Lee", sayHello: Ζ’}

10.3 ν”„λ‘œνΌν‹°

κ°μ²΄λŠ” ν”„λ‘œνΌν‹°μ˜ 집합이며 ν”„λ‘œνΌν‹°λŠ” 킀와 κ°’μœΌλ‘œ κ΅¬μ„±λœλ‹€.

  var person = {
    // ν”„λ‘œνΌν‹° ν‚€λŠ” name, ν”„λ‘œνΌν‹° 값은 'Lee'
    name: 'Lee',
    // ν”„λ‘œνΌν‹° ν‚€λŠ” age, ν”„λ‘œνΌν‹° 값은 20
    age: 20
  };

ν”„λ‘œνΌν‹°λ₯Ό λ‚˜μ—΄ν•  λ•ŒλŠ” μ‰Όν‘œ(,)둜 κ΅¬λΆ„ν•œλ‹€. ν”„λ‘œνΌν‹° 킀와 ν”„λ‘œνΌν‹° κ°’μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλŠ” 값은 λ‹€μŒκ³Ό κ°™λ‹€.

  • ν”„λ‘œνΌν‹° ν‚€ : 빈 λ¬Έμžμ—΄μ„ ν¬ν•¨ν•˜λŠ” λͺ¨λ“  λ¬Έμžμ—΄ λ˜λŠ” μ‹¬λ²Œκ°’
  • ν”„λ‘œνΌν‹° κ°’ : μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” λͺ¨λ“  κ°’

10.4 λ©”μ„œλ“œ

ν•¨μˆ˜λŠ” κ°’μœΌλ‘œ μ·¨κΈ‰ν•  수 있기 λ•Œλ¬Έμ— ν”„λ‘œνΌν‹° κ°’μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλ‹€. ν”„λ‘œνΌν‹° 값이 ν•¨μˆ˜μΌ 경우 일반 ν•¨μˆ˜μ™€ κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄ λ©”μ„œλ“œλΌ λΆ€λ₯Έλ‹€.

  var circle = {
    radius: 5, // ← ν”„λ‘œνΌν‹°

    // μ›μ˜ 지름
    getDiameter: function () { // ← λ©”μ„œλ“œ
      return 2 * this.radius; // thisλŠ” circle을 가리킨닀.
    }
  };

  console.log(circle.getDiameter()); // 10

10.5 ν”„λ‘œνΌν‹° μ ‘κ·Ό

  • 마침포 ν”„λ‘œνΌν‹° μ ‘κ·Ό μ—°μ‚°μž(.)λ₯Ό μ‚¬μš©ν•˜λŠ” λ§ˆμΉ¨ν‘œ 포기법
  • λŒ€κ΄„ν˜Έ ν”„λ‘œνΌν‹° μ ‘κ·Ό μ—°μ‚°μž([...])λ₯Ό μ‚¬μš©ν•˜λŠ” λŒ€κ΄„ν˜Έ ν‘œκΈ°λ²•

객체에 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” ν”„λ‘œνΌν‹°μ— μ ‘κ·Όν•˜λ©΄ undefinedλ₯Ό λ°˜ν™˜ν•œλ‹€.

  var person = {
    name: 'Lee'
  };

  // λ§ˆμΉ¨ν‘œ ν‘œκΈ°λ²•μ— μ˜ν•œ ν”„λ‘œνΌν‹° μ ‘κ·Ό
  console.log(person.name); // Lee

  // λŒ€κ΄„ν˜Έ ν‘œκΈ°λ²•μ— μ˜ν•œ ν”„λ‘œνΌν‹° μ ‘κ·Ό
  console.log(person['name']); // Lee

  // undefined λ°˜ν™˜
  console.log(person.age)

10.6 ν”„λ‘œνΌν‹° κ°’ κ°±μ‹ 

이미 μ‘΄μž¬ν•˜λŠ” ν”„λ‘œνΌν‹°μ— 값을 ν• λ‹Ήν•˜λ©΄ ν”„λ‘œνΌν‹° 값이 κ°±μ‹ λœλ‹€.

  var person = {
    name: 'Lee'
  };

  // person 객체에 name ν”„λ‘œνΌν‹°κ°€ μ‘΄μž¬ν•˜λ―€λ‘œ name ν”„λ‘œνΌν‹°μ˜ 값이 κ°±μ‹ λœλ‹€.
  person.name = 'Kim';

  console.log(person);  // {name: "Kim"}

10.7 ν”„λ‘œνΌν‹° 동적 생성

  var person = {
    name: 'Lee'
  };

  // person κ°μ²΄μ—λŠ” age ν”„λ‘œνΌν‹°κ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€.
  // λ”°λΌμ„œ person 객체에 age ν”„λ‘œνΌν‹°κ°€ λ™μ μœΌλ‘œ μƒμ„±λ˜κ³  값이 ν• λ‹Ήλœλ‹€.
  person.age = 20;

  console.log(person); // {name: "Lee", age: 20}

10.8 ν”„λ‘œνΌν‹° μ‚­μ œ

deleteμ—°μ‚°μžλ₯Ό μ‚¬μš©ν•΄ 객체의 ν”„λ‘œνΌν‹°λ₯Ό μ‚­μ œν•œλ‹€.

  var person = {
    name: 'Lee'
  };

  // ν”„λ‘œνΌν‹° 동적 생성
  person.age = 20;

  // person 객체에 age ν”„λ‘œνΌν‹°κ°€ μ‘΄μž¬ν•œλ‹€.
  // λ”°λΌμ„œ delete μ—°μ‚°μžλ‘œ age ν”„λ‘œνΌν‹°λ₯Ό μ‚­μ œν•  수 μžˆλ‹€.
  delete person.age;

  // person 객체에 address ν”„λ‘œνΌν‹°κ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€.
  // λ”°λΌμ„œ delete μ—°μ‚°μžλ‘œ address ν”„λ‘œνΌν‹°λ₯Ό μ‚­μ œν•  수 μ—†λ‹€. μ΄λ•Œ μ—λŸ¬κ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€.
  delete person.address;

  console.log(person); // {name: "Lee"}

10.9 ES6μ—μ„œ μΆ”κ°€λœ 객체 λ¦¬ν„°λŸ΄μ˜ ν™•μž₯ κΈ°λŠ₯

10.9.1 ν”„λ‘œνΌν‹° μΆ•μ•½ ν‘œν˜„

ν”„λ‘œνΌν‹° κ°’μœΌλ‘œ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 경우 λ³€μˆ˜ 이름과 ν”„λ‘œνΌν‹° ν‚€κ°€ λ™μΌν•œ 이름일 λ•Œ ν”„λ‘œνΌν‹° ν‚€λ₯Ό μƒλž΅ν•  수 μžˆλ‹€.

  // ES5
  var x = 1, y = 2;
  var obj = {
    x: x,
    y: y
  };

  console.log(obj); // {x: 1, y: 2}

  // ES6
  let x = 1, y = 2;

  // ν”„λ‘œνΌν‹° μΆ•μ•½ ν‘œν˜„
  const obj = { x, y };

  console.log(obj); // {x: 1, y: 2}

10.9.2 κ³„μ‚°λœ ν”„λ‘œνΌν‹° 이름

λ¬Έμžμ—΄ λ˜λŠ” λ¬Έμžμ—΄λ‘œ νƒ€μž… λ³€ν™˜ν•  수 μžˆλŠ” κ°’μœΌλ‘œ ν‰κ°€λ˜λŠ” ν‘œν˜„μ‹μ„ μ‚¬μš©ν•΄ ν”„λ‘œνΌν‹° ν‚€λ₯Ό λ™μ μœΌλ‘œ 생성할 μˆ˜λ„ μžˆλ‹€. 이λ₯Ό κ³„μ‚°λœ ν”„λ‘œνΌν‹°λΌκ³  ν•œλ‹€.

  // ES5
  var prefix = 'prop';
  var i = 0;
  var obj = {};

  // κ³„μ‚°λœ ν”„λ‘œνΌν‹° μ΄λ¦„μœΌλ‘œ ν”„λ‘œνΌν‹° ν‚€ 동적 생성
  obj[prefix + '-' + ++i] = i;
  obj[prefix + '-' + ++i] = i;
  obj[prefix + '-' + ++i] = i;

  console.log(obj); // {prop-1: 1, prop-2: 2, prop-3: 3}

  // ES6
  const prefix = 'prop';
  let i = 0;

  // 객체 λ¦¬ν„°λŸ΄ λ‚΄λΆ€μ—μ„œ κ³„μ‚°λœ ν”„λ‘œνΌν‹° μ΄λ¦„μœΌλ‘œ ν”„λ‘œνΌν‹° ν‚€ 동적 생성
  const obj = {
    [`${prefix}-${++i}`]: i,
    [`${prefix}-${++i}`]: i,
    [`${prefix}-${++i}`]: i
  };

  console.log(obj); // {prop-1: 1, prop-2: 2, prop-3: 3}

10.9.3 λ©”μ„œλ“œ μΆ•μ•½ ν‘œν˜„

λ©”μ„œλ“œλ₯Ό μ •μ˜ν•  λ•Œ function ν‚€μ›Œλ“œλ₯Ό μƒλž΅ν•œ μΆ•μ•½ ν‘œν˜„μ„ μ‚¬μš©ν•  수 μžˆλ‹€.

  // ES5
  var obj = {
    name: 'Lee',
    sayHi: function() {
      console.log('Hi! ' + this.name);
    }
  };

  obj.sayHi(); // Hi! Lee

  // ES6
  const obj = {
    name: 'Lee',
    // λ©”μ„œλ“œ μΆ•μ•½ ν‘œν˜„
    sayHi() {
      console.log('Hi! ' + this.name);
    }
  };

  obj.sayHi(); // Hi! Lee
profile
μ΄μ‚¬μ€‘μž…λ‹ˆλ‹€!🌟https://velog.io/@devkyoung2

0개의 λŒ“κΈ€

κ΄€λ ¨ μ±„μš© 정보