October 17, 2021
아시다시피 객체엔 프로퍼티가 저장됩니다.
지금까진 프로퍼티를 단순히 ‘키-값’ 쌍의 관점에서만 다뤘습니다. 그런데 사실 프로퍼티는 우리가 생각했던 것보다 더 유연하고 강력한 자료구조입니다.
이 챕터에선 객체 프로퍼티 추가 구성 옵션 몇 가지를 다루고, 이어지는 챕터에선 이 옵션들을 이용해 손쉽게 getter나 setter 함수를 만드는 법을 알아보겠습니다.
객체 프로퍼티는 값(value)
과 함께 플래그(flag)라 불리는 특별한 속성 세 가지를 갖습니다.
writable
– true
이면 값을 수정할 수 있습니다. 그렇지 않다면 읽기만 가능합니다.enumerable
– true
이면 반복문을 사용해 나열할 수 있습니다. 그렇지 않다면 반복문을 사용해 나열할 수 없습니다.configurable
– true
이면 프로퍼티 삭제나 플래그 수정이 가능합니다. 그렇지 않다면 프로퍼티 삭제와 플래그 수정이 불가능합니다.프로퍼티 플래그는 특별한 경우가 아니고선 다룰 일이 없기 때문에 여기서 처음 소개하게 되었습니다. 지금까지 해왔던 '평범한 방식’으로 프로퍼티를 만들면 해당 프로퍼티의 플래그는 모두 true
가 됩니다. 이렇게 true
로 설정된 플래그는 언제든 수정할 수 있습니다.
writable
플래그를 사용해 user.name
에 값을 쓰지 못하도록(non-writable) 해봅시다.
let user = {
name: "John"
};
Object.defineProperty(user, "name", {
*writable: false*});
*user.name = "Pete"; // Error: Cannot assign to read only property 'name'*
이제 defineProperty
를 사용해 writable
플래그를 true
로 변경하지 않는 한 그 누구도 객체의 이름을 변경할 수 없게 되었습니다.