프로퍼티 어트리뷰트

내부 슬롯과 내부 메소드

  • 내부 슬롯: 자바스크립트 엔진이 객체의 내부 상태를 관리하기 위해 사용하는 숨겨진 저장 공간
    - 예시: [Prototype](프로토타입 체인 관리), [ArrayData]`(배열 요소 저장)
  • 내부 메소드: 자바스크립트 엔진이 객체의 기본 동작을 구현하기 위해 내부적으로 작성된 알고리즘. 개발자가 직접 호출할 수 없다.

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

  • 프로퍼티 어트리뷰트: 자바스크립트 엔진이 프로퍼티의 기본 동작을 정의하고 제어하는 메커니즘
  • 프로퍼티 디스크립터 객체: 프로퍼티 어트리뷰트를 객체 형태로 표현한 것

데이터 프로퍼티와 접근자 프로퍼티의 어트리뷰트

자바스크립트의 모든 프로퍼티는 데이터 프로퍼티와 접근자 프로퍼티로 나뉜다.

  • 데이터 프로퍼티: 값을 직접 저장하는 일반적인 프로퍼티
    1. value: 프로퍼티에 할당된 실제 값
    2. writable: 값 변경 가능 여부 (true/false)
    3. enumerable: for...in 또는 Object.keys()로 열거 가능 여부
    4. configurable: 프로퍼티 삭제 또는 어트리뷰트 재정의 가능 여부
  • 접근자 프로퍼티: 값을 직접 저장하지 않고, getter/setter 함수로 접근을 제어하는 프로퍼티
    1. get: 프로퍼티 값을 읽을 때 호출되는 함수
    2. set: 프로퍼티 값을 설정할 때 호출되는 함수
    3. enumerable: 열거 가능 여부 (데이터 프로퍼티와 동일)
    4. configurable: 재정의 가능 여부 (데이터 프로퍼티와 동일)

핵심 차이점
• 데이터 프로퍼티
→ 실제 값(value)을 저장
writable로 값 변경 제어
• 접근자 프로퍼티
→ 값을 직접 저장하지 않고 계산 로직 사용
get/set 함수로 간접 접근

프로퍼티 정의

프로퍼티 정의란 새로운 프로퍼티를 추가하면서 기존의 프로퍼티 어트리뷰트를 재정의하거나 새로운 값을 정의하는 것을 뜻한다.

메소드: Object.defineProperty(obj, prop, descriptor)
예시:

    const obj = {};
Object.defineProperty(obj, 'readOnly', {
  value: 42,
  writable: false,     // 값 변경 금지
  enumerable: true,    // for...in에 노출
  configurable: false  // 재정의/삭제 불가
});

객체 변경 방지 메소드

  1. Object.preventExtensions() - 확장 금지

객체에 새로운 프로퍼티 추가를 완전히 차단하는 메소드

  1. Object.seal() - 객체 봉인

프로퍼티 추가/삭제를 금지하고, 모든 프로퍼티의 configurable 어트리뷰트를 false로 설정하는 메소드

  1. Object.freeze() - 객체 동결

프로퍼티 추가/삭제/수정을 모두 금지하는 가장 강력한 메소드

profile
개발 공부 내용을 포스팅 중입니다.

0개의 댓글