[javascript] 프로퍼티 디스크립터의 일반적인 용도와 활용 범위
- value: 프로퍼티에 할당될 값입니다.
- writable: 값의 변경 가능 여부를 나타내는 불리언 값입니다. true로 설정되면 값이 변경될 수 있고, false로 설정되면 값이 변경되지 않습니다.
- enumerable: 프로퍼티의 열거 가능 여부를 나타내는 불리언 값입니다. true로 설정되면 for…in 루프 및 Object.keys() 메서드와 같은 열거 기능에서 해당 프로퍼티를 가져올 수 있습니다.
- configurable: 프로퍼티의 구성 가능 여부를 나타내는 불리언 값입니다. true로 설정되면 프로퍼티를 삭제하거나 속성을 변경할 수 있습니다. false로 설정되면 삭제하거나 속성을 변경할 수 없습니다.
프로퍼티 디스크립터의 활용은 다양합니다. 예를 들어, 객체의 프로퍼티를 상수로 정의하고 싶을 때 writable 속성을 false로 설정하여 값을 변경할 수 없도록 할 수 있습니다. 또한, 객체의 프로퍼티를 숨기고 싶을 때 enumerable 속성을 false로 설정하여 해당 프로퍼티가 열거되지 않도록 할 수 있습니다. 이를 통해 객체의 내부 상태를 보호하고 외부에 노출시키지 않을 수 있습니다.
프로퍼티 디스크립터는 Object.defineProperty() 메서드를 사용하여 프로퍼티를 정의할 때 적용할 수 있습니다. 이 메서드는 객체, 프로퍼티 이름, 및 프로퍼티 디스크립터를 인자로 받아 해당 프로퍼티를 정의합니다.
const obj = {};
Object.defineProperty(obj, 'x', {
value: 10,
writable: false,
enumerable: true,
configurable: false
});
console.log(obj.x); // 10
obj.x = 20; // 에러 발생, writable이 false로 설정되어 있어 값을 변경할 수 없음
console.log(obj.x); // 10
for (let key in obj) {
console.log(key); // x
}
프로퍼티 디스크립터를 사용하면 JavaScript 객체의 프로퍼티를 세밀하게 제어할 수 있으며, 객체의 내부 상태를 보호하거나 외부에 노출시키지 않을 수 있습니다.