[javascript] 프로퍼티 디스크립터의 속성 종류

프로퍼티 디스크립터는 자바스크립트 객체의 속성에 대한 정보를 담고 있는 객체입니다. 프로퍼티 디스크립터의 속성은 다양한 종류가 있으며, 각각의 속성은 해당 속성이 적용되는 시나리오를 나타냅니다. 이번 포스트에서는 주요한 프로퍼티 디스크립터의 속성 종류를 살펴보겠습니다.

1. 프로퍼티 속성

1.1 value

value 속성은 프로퍼티에 저장되는 값입니다. 이 속성을 통해 값을 설정하거나 가져올 수 있습니다.

const obj = {
  foo: 42
};

console.log(obj.foo); // 42

1.2 writable

writable 속성은 프로퍼티가 변경 가능한지를 나타냅니다. false로 설정하면 값을 변경할 수 없게 됩니다.

const obj = {
  foo: 42
};

obj.foo = 50; // 변경 가능
console.log(obj.foo); // 50

Object.defineProperty(obj, 'foo', { writable: false });
obj.foo = 60; // 변경 불가능
console.log(obj.foo); // 50

2. 접근자 속성

2.1 get

get 속성은 프로퍼티 값을 가져올 때 호출되는 함수입니다.

const obj = {
  _value: 42,
  get value() {
    console.log('Getting value');
    return this._value;
  }
};

console.log(obj.value); // Getting value + 42

2.2 set

set 속성은 프로퍼티 값을 설정할 때 호출되는 함수입니다.

const obj = {
  _value: 42,
  set value(newValue) {
    console.log('Setting value', newValue);
    this._value = newValue;
  }
};

obj.value = 50; // Setting value 50
console.log(obj.value); // 50

3. 속성 설명자 메서드

3.1 enumerable

enumerable 속성은 프로퍼티가 for...in 루프와 Object.keys() 메서드에서 나타나는지를 결정합니다.

const obj = { foo: 42 };

console.log(Object.keys(obj)); // ["foo"]

3.2 configurable

configurable 속성은 프로퍼티가 변경 가능한지 및 삭제 가능한지를 나타냅니다. false로 설정하면 프로퍼티를 변경하거나 삭제할 수 없게 됩니다.

const obj = { foo: 42 };

delete obj.foo; // 삭제 가능
console.log(obj.foo); // undefined

Object.defineProperty(obj, 'foo', { configurable: false });
delete obj.foo; // 삭제 불가능
console.log(obj.foo); // 42

프로퍼티 디스크립터의 속성 종류에 대해 간단히 살펴보았습니다. 이러한 속성들을 통해 객체의 속성에 대한 제어를 할 수 있습니다. 자세한 내용은 MDN 문서를 참고하시기 바랍니다.