[javascript] 기본 프로퍼티 디스크립터와 defineProperty() 메소드의 차이점

자바스크립트에서 객체의 속성을 정의할 때, 기본적인 방법은 객체 리터럴을 사용하여 속성을 정의하거나, 객체의 프로토타입에 속성을 추가하는 것입니다. 하지만 때로는 더 세밀한 제어를 위해 프로퍼티 디스크립터와 defineProperty() 메소드를 사용해야 합니다.

기본 프로퍼티 디스크립터

객체의 속성을 정의할 때, 기본 프로퍼티 디스크립터를 사용할 수 있습니다. 이 디스크립터는 다음과 같은 속성을 가지고 있습니다.

const obj = {
  prop: 'value'
};

Object.defineProperty(obj, 'prop', {
  value: 'new value',
  writable: false,
  enumerable: true,
  configurable: false
});

이 방식을 사용하면 기존 속성을 업데이트하거나 변경할 수 있습니다. 하지만 객체의 여러 속성에 대해 반복적으로 설정해야 하기 때문에 번거로울 수 있습니다.

defineProperty() 메소드

defineProperty() 메소드를 사용하면 객체에 새로운 속성을 추가하거나 기존 속성을 업데이트할 수 있습니다. 이 메소드는 다음과 같은 매개변수를 가집니다.

const obj = {};

Object.defineProperty(obj, 'prop', {
  value: 'value',
  writable: true,
  enumerable: true,
  configurable: true
});

defineProperty() 메소드는 기본 프로퍼티 디스크립터와 동일한 속성을 사용하며, 객체에 새로운 속성을 추가하는 데 편리합니다.

결론

기본 프로퍼티 디스크립터와 defineProperty() 메소드는 객체의 속성을 정의하고 업데이트하는 데 사용됩니다. 기본 프로퍼티 디스크립터는 객체 리터럴이나 프로토타입에 직접 속성을 정의할 때 사용되며, defineProperty() 메소드는 객체에 새로운 속성을 추가하거나 기존 속성을 업데이트할 때 사용됩니다.