(프로토타입 체인 관리), [ArrayData]`(배열 요소 저장) 자바스크립트의 모든 프로퍼티는 데이터 프로퍼티와 접근자 프로퍼티로 나뉜다.
value: 프로퍼티에 할당된 실제 값writable: 값 변경 가능 여부 (true/false)enumerable: for...in 또는 Object.keys()로 열거 가능 여부configurable: 프로퍼티 삭제 또는 어트리뷰트 재정의 가능 여부get: 프로퍼티 값을 읽을 때 호출되는 함수set: 프로퍼티 값을 설정할 때 호출되는 함수enumerable: 열거 가능 여부 (데이터 프로퍼티와 동일)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 // 재정의/삭제 불가
});
객체에 새로운 프로퍼티 추가를 완전히 차단하는 메소드
프로퍼티 추가/삭제를 금지하고, 모든 프로퍼티의 configurable 어트리뷰트를 false로 설정하는 메소드
프로퍼티 추가/삭제/수정을 모두 금지하는 가장 강력한 메소드