[javascript] 객체의 프로퍼티 설명자를 설정하는 방법

JavaScript에서 객체의 프로퍼티 설명자를 설정하는 방법은 다양한데, 이러한 설정은 객체 프로퍼티에 대한 다양한 조작을 가능케 합니다. 이를 통해 프로퍼티의 값을 읽기 전용으로 설정하거나, 특정 동작을 추가할 수 있습니다.

프로퍼티 설명자란?

JavaScript 객체의 각 프로퍼티에는 ‘프로퍼티 설명자(Property Descriptor)’라 불리는 내부 설명자가 포함되어 있습니다. 이 설명자는 프로퍼티의 동작을 제어하는 데 사용됩니다. 프로퍼티 설명자에는 프로퍼티 값(value), 쓰기 가능 여부(writable), 열거 가능 여부(enumerable), 설정 가능 여부(configurable) 등의 정보가 포함됩니다.

프로퍼티 설명자 설정하기

Object.defineProperty 메서드

Object.defineProperty 메서드는 객체에 새로운 프로퍼티를 추가하거나, 기존 프로퍼티의 설명자를 수정할 수 있습니다.

// 예시 객체 생성
const obj = {};

// 프로퍼티 설정
Object.defineProperty(obj, 'name', {
  value: 'John',       // 값
  writable: false,     // 쓰기 가능 여부
  enumerable: true,    // 열거 가능 여부
  configurable: false  // 설정 가능 여부
});

// name 프로퍼티가 읽기 전용인지 확인
console.log(Object.getOwnPropertyDescriptor(obj, 'name').writable);  // 출력값: false

접근자 프로퍼티 설정

Object.defineProperty 메서드를 사용하여 접근자 프로퍼티(accessor property)를 설정할 수도 있습니다. 접근자 프로퍼티는 getset 함수를 가지며, 객체의 프로퍼티처럼 보이지만 실제로는 메서드로 동작합니다.

const obj = {
  _name: 'Alice',  // private 프로퍼티
  get name() {
    return this._name;
  },
  set name(newName) {
    this._name = newName;
  }
};

console.log(obj.name);  // 'Alice' 출력
obj.name = 'Bob';
console.log(obj.name);  // 'Bob' 출력

결론

JavaScript에서 Object.defineProperty 메서드를 사용하여 객체의 프로퍼티 설명자를 설정할 수 있습니다. 이를 통해 프로퍼티의 동작을 세밀하게 제어할 수 있으며, 접근자 프로퍼티를 활용하여 더욱 다양한 기능을 구현할 수 있습니다.

더 많은 정보를 원하신다면 MDN 웹 문서 Object.defineProperty을 확인해보세요.