[JS] ๊ฐ์ฒด

๊ฐ์ฒด

JavaScript์—์„œ๋Š” ์›์‹œ ๊ฐ’์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๊ฒƒ์ด ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

์›์‹œ ๊ฐ’๊ฐ์ฒด
๋ณ€๊ฒฝ ๋ถˆ๊ฐ€ํ•œ ๊ฐ’๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๊ฐ’
๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์—†์Œ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ
๊ฐ’์— ์˜ํ•œ ์ „๋‹ฌ์ฐธ์กฐ์— ์˜ํ•œ ์ „๋‹ฌ

๊ฐ์ฒด๋Š” ํ”„๋กœํผํ‹ฐ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ํ”„๋กœํผํ‹ฐ๋Š” Key์™€ Value๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

Key๋Š” ์ค‘๋ณต ์„ ์–ธ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ๊ฒฝ์šฐ ๋งˆ์ง€๋ง‰ ์„ ์–ธ๋œ ๊ฐ’์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜ ์–ธ์–ด

C++์ด๋‚˜ Java์™€ ๊ฐ™์€ ์–ธ์–ด๋Š” ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ์–ธ์–ด์ด๋ฉฐ, ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
๋ฐ˜๋ฉด JavaScript๋Š” ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜ ์–ธ์–ด์ž…๋‹ˆ๋‹ค.

๊ฐ์ฒด๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ”„๋กœํ† ํƒ€์ž…์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์ฒด๋Š” ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ƒ์†๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ›„์ˆ ํ•  Object.create ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const person = {
  name: 'John Doe',
  age: 30,
  address: '123 Main Street',
  greet: function() {
    console.log('Hello, my name is ' + this.name);
  }
};

const student = Object.create(person);
student.name = 'Jane Doe';
student.grade = 'A';

์ด ์˜ˆ์ œ์˜ ๊ฒฝ์šฐ student ๊ฐ์ฒด๋Š” person ๊ฐ์ฒด๋ฅผ ํ”„๋กœํ† ํƒ€์ž…์œผ๋กœ ์ง€์ •ํ•˜์˜€์œผ๋ฏ€๋กœ
person ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ƒ์†๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœํผํ‹ฐ ์ ‘๊ทผ

์  ํ‘œ๊ธฐ๋ฒ•

์  ํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const person = {
  name: 'John Doe',
  age: 30,
  address: '123 Main Street',
  greet: function() {
    console.log('Hello, my name is ' + this.name);
  }
};

console.log(person.name); // John Doe

๋Œ€๊ด„ํ˜ธ ํ‘œ๊ธฐ๋ฒ•

์ด์™ธ์—๋„ ๋Œ€๊ด„ํ˜ธ ํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const person = {
  name: 'John Doe',
  age: 30,
  address: '123 Main Street',
  greet: function() {
    console.log('Hello, my name is ' + this.name);
  }
};

console.log(person['name']); // John Doe

๋Œ€๊ด„ํ˜ธ ํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” Key๋ฅผ ๋ฌธ์ž์—ด๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœํผํ‹ฐ ์‚ญ์ œ

delete ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const person = {
  name: 'John Doe',
  age: 30,
  address: '123 Main Street',
  greet: function() {
    console.log('Hello, my name is ' + this.name);
  }
};

delete person.age;

ํ”„๋กœํผํ‹ฐ ์กด์žฌ ํ™•์ธ

in ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœํผํ‹ฐ์˜ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const person = {
  name: 'John Doe',
  age: 30,
  address: '123 Main Street',
  greet: function() {
    console.log('Hello, my name is ' + this.name);
  }
};

console.log('name' in person); // true
console.log('age' in person); // true
console.log('email' in person); // false

ํ”„๋กœํผํ‹ฐ ์—ด๊ฑฐ

for...in ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ์—ด๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const person = {
  name: 'John Doe',
  age: 30,
  address: '123 Main Street',
  greet: function() {
    console.log('Hello, my name is ' + this.name);
  }
};

for (const key in person) {
  console.log(key + ': ' + person[key]);
}

ํ”„๋กœํผํ‹ฐ ๋™์  ์ƒ์„ฑ

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

const person = {};
person.name = 'John Doe';
person.age = 30;
person.address = '123 Main Street';
person.greet = function() {
  console.log('Hello, my name is ' + this.name);
};

๊ฐ์ฒด ์ƒ์„ฑํ•˜๊ธฐ

๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด

์ค‘๊ด„ํ˜ธ {}๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

const person = {
  name: 'John Doe',
  age: 30,
  address: '123 Main Street',
  greet: function() {
    console.log('Hello, my name is ' + this.name);
  }
};

๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋Š” new ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ
Key: Value ํ˜•ํƒœ๋กœ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

Object ์ƒ์„ฑ์ž ํ•จ์ˆ˜

Object ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const person = new Object();
person.name = 'John Doe';
person.age = 30;
person.address = '123 Main Street';
person.greet = function() {
  console.log('Hello, my name is ' + this.name);
};

์ƒ์„ฑ์ž ํ•จ์ˆ˜

์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

function Person(name, age, address) {
  this.name = name;
  this.age = age;
  this.address = address;
  this.greet = function() {
    console.log('Hello, my name is ' + this.name);
  };
}

const person = new Person('John Doe', 30, '123 Main Street');

์ƒ์„ฑ์ž ํ•จ์ˆ˜๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•จ๊ณผ ๋™์‹œ์— ์ดˆ๊ธฐํ™”๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Object.create ๋ฉ”์„œ๋“œ

Object.create ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const person = Object.create({
  name: 'John Doe',
  age: 30,
  address: '123 Main Street',
  greet: function() {
    console.log('Hello, my name is ' + this.name);
  }
});

Object.create ๋ฉ”์„œ๋“œ๋Š” ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌ๋ฐ›๊ณ 
๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const person = Object.create({
  greet: function() {
    console.log('Hello, my name is ' + this.name);
  }
}, {
  name: {
    value: 'John Doe',
    writable: true,
    enumerable: true,
    configurable: true
  },
  age: {
    value: 30,
    writable: true,
    enumerable: true,
    configurable: true
  },
  address: {
    value: '123 Main Street',
    writable: true,
    enumerable: true,
    configurable: true
  }
});

์ž์„ธํ•œ ๋‚ด์šฉ์€ MDN์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

ํด๋ž˜์Šค

ES6์—์„œ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

class Person {
  constructor(name, age, address) {
    this.name = name;
    this.age = age;
    this.address = address;
  }

  greet() {
    console.log('Hello, my name is ' + this.name);
  }
}

const person = new Person('John Doe', 30, '123 Main Street');

JavaScript๋Š” ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜ ์–ธ์–ด์ด๋ฏ€๋กœ ํด๋ž˜์Šค๋Š” ์‚ฌ์‹ค ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

class ํ‚ค์›Œ๋“œ๋Š” ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ , constructor ๋ฉ”์„œ๋“œ๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.