Post

Deep Dive 16. 프로퍼티 어트리뷰트

내부 슬롯과 내부 메서드

내부 슬롯과 내부 메서드는 자바스크립트 엔진의 구현 알고리즘을 설명하기 위해 ECMAScript 사용에서 사용하는 의사 프로퍼티(presudo property)와 의사 메서드(presudo method)다. 내부 슬롯과 내부 메서드는 자바스크립트 엔진의 내부 로직으로 원칙적으로 내부 슬롯과 내부 메서드에 직접적으로 접근하거나 호출할 수 있는 방법을 제공하지 않는다.

단, 일부 내부 슬롯과 내부 메서드에 한하여 간접적으로 호출할 수 있다.(ex. proto)

프로퍼티 어트리뷰트와 프로퍼티 디스크립터 객체

자바스크립트 엔진은 프로퍼티를 생성할 때 프로퍼티의 상태를 나타내는 프로퍼티 어트리뷰트를 기본값으로 자동정의한다.

1
2
3
4
5
6
7
const person = {
  name: 'Lee'
};

// 프로퍼티 어트리뷰트 정보를 제공하는 프로퍼티 디스크립터 객체를 반환한다.
console.log(Object.getOwnPropertyDescriptor(person, 'name'));
// {value: "Lee", writable: true, enumerable: true, configurable: true}

프로퍼티 어트리뷰트는 자바스크립트 엔진이 관리하는 내부 상태 값인 내부 슬롯 [[Value]], [[Writable]], [[Enumerable]], [[Configurable]]이다. Object.getOwnPropertyDescriptor 메서드는 프로퍼티 어트리뷰트 정보를 제공하는 프로퍼티 디스크립터 객체를 반환한다.

데이터 프로퍼티와 접근자 프로퍼티

  • 데이터 프로퍼티 : 키와 값으로 구성된 일반적인 프로퍼티다. 지금까지 살펴본 모든 프로퍼티는 데이터 프로퍼티다.( [[Value]], [[Writable]], [[Enumerable]], [[Configurable]] )
  • 접근자 프로퍼티 : 자체적으로 값을 갖지 않고 다른 데이터 프로퍼티의 값을 읽거나 저장할 때 호출되는 접근자 함수로 구성된 프로퍼티다.( [[Get]], [[Set]], [[Enumerable]], [[Configurable]] )

객체 변경 방지

Object.preventExtensions 메서드는 객체의 확장을 금지한다.

Object.seal 메서드는 객체를 밀봉하여 프로퍼티 추가 및 삭제와 프로퍼티 어트리뷰트 재정의를 금지한다.(읽기, 쓰기 가능)

Object.freeze 메서드는 객체를 동결하여 읽기만 가능하게 한다.

This post is licensed under CC BY 4.0 by the author.