[javascript] 프로퍼티 디스크립터를 이용한 프로퍼티 열거 가능 여부 설정

목차

프로퍼티 디스크립터란?

프로퍼티 디스크립터는 JavaScript 객체의 프로퍼티에 대한 속성을 정의하는데 사용됩니다. 프로퍼티 디스크립터는 프로퍼티의 값, 열거 가능 여부, 쓰기 가능 여부, 설정 가능 여부 등을 설정할 수 있습니다.

프로퍼티 디스크립터는 Object.defineProperty() 메서드를 사용하여 설정할 수 있습니다.

프로퍼티 열거 가능 여부 설정

프로퍼티 디스크립터를 이용하여 프로퍼티의 열거 가능 여부를 설정할 수 있습니다. 열거 가능한 프로퍼티는 for...in 루프나 Object.keys() 메서드 등을 사용하여 객체의 프로퍼티를 열거할 때 포함되는지 여부를 결정합니다.

프로퍼티의 디스크립터 객체에서 enumerable 속성을 true로 설정하면 프로퍼티는 열거 가능하게 됩니다. false로 설정하면 열거할 수 없게 됩니다.

다음은 프로퍼티 디스크립터를 이용하여 프로퍼티의 열거 가능 여부를 설정하는 예제 코드입니다.

const obj = {};
Object.defineProperty(obj, 'name', {
  value: 'John',
  enumerable: false
});

for (const key in obj) {
  console.log(key); // name 프로퍼티는 열거되지 않음
}

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

console.log(Object.getOwnPropertyDescriptor(obj, 'name'));
// { value: 'John', writable: false, enumerable: false, configurable: false }

위 예제 코드에서 name 프로퍼티의 enumerable 속성을 false로 설정하여 프로퍼티가 열거되지 않도록 설정하였습니다. for...in 루프나 Object.keys() 메서드를 사용하여 열거할 때 name 프로퍼티는 포함되지 않습니다.

Object.getOwnPropertyDescriptor() 메서드를 사용하여 프로퍼티의 디스크립터를 확인해보면 enumerable 속성이 false로 설정되어 있는 것을 확인할 수 있습니다.

이렇게 프로퍼티 디스크립터를 이용하여 프로퍼티의 열거 가능 여부를 설정하면 객체의 프로퍼티를 열거할 때 특정 프로퍼티들을 제외할 수 있습니다.

참고