이 글은 JavaScript의 프로퍼티 디스크립터와 객체 상속에 대해 자세히 설명합니다.
JavaScript에서 객체는 프로퍼티의 집합으로 표현됩니다. 각 프로퍼티는 이름(key)과 값(value)으로 구성됩니다. 프로퍼티의 특징을 제어하기 위해 프로퍼티 디스크립터를 사용할 수 있습니다.
프로퍼티 디스크립터는 프로퍼티의 속성을 정의하는 객체입니다. 다음과 같은 속성을 가질 수 있습니다:
configurable
:true
일 경우 프로퍼티를 삭제하거나 속성을 변경할 수 있습니다.false
일 경우 해당 작업이 금지됩니다.enumerable
:true
일 경우 해당 프로퍼티는for...in
반복문이나Object.keys()
메서드 등을 통해 열거될 수 있습니다.value
: 프로퍼티의 값입니다.writable
:true
일 경우 프로퍼티의 값을 변경할 수 있습니다.false
일 경우 변경이 금지됩니다.get
:get
접근자 함수입니다.set
:set
접근자 함수입니다.
이러한 속성을 사용하여 프로퍼티의 동작을 제어할 수 있습니다. 예를 들어, configurable
속성을 false
로 설정하면 해당 프로퍼티를 삭제하거나 속성을 변경할 수 없게 됩니다.
객체 상속은 객체를 다른 객체로부터 상속받는 개념입니다. 이를 통해 코드의 재사용성과 구조화를 할 수 있습니다. JavaScript에서 객체 상속은 프로토타입 체인을 통해 이루어집니다.
객체 상속에서 프로퍼티 디스크립터는 중요한 역할을 합니다. 상속받은 프로퍼티는 프로토타입 체인을 따라 찾아갈 때 해당 프로퍼티의 디스크립터를 확인하고, 해당 디스크립터의 속성에 따라 프로퍼티의 동작이 결정됩니다.
const parentObj = {
name: "Parent Object"
}
const childObj = Object.create(parentObj, {
age: {
value: 10,
writable: true,
configurable: false
}
})
console.log(childObj.name); // "Parent Object"
console.log(childObj.age); // 10
delete childObj.age; // Error: 삭제할 수 없는 프로퍼티입니다.
childObj.age = 20; // 값 변경이 가능합니다.
위의 코드는 parentObj
라는 객체를 childObj
라는 객체에서 상속받는 예시입니다. childObj
에는 age
라는 프로퍼티가 추가되는데, 이 프로퍼티는 configurable
속성이 false
로 설정되어 있기 때문에 삭제나 변경이 불가능합니다.
프로퍼티 디스크립터와 객체 상속은 JavaScript에서 중요한 개념입니다. 이를 이해하고 활용하여 객체의 동작을 세밀하게 제어할 수 있습니다.
참조: