-
Notifications
You must be signed in to change notification settings - Fork 0
16. 프로퍼티 어트리뷰트
자바스크립트 엔진의 구현 알고리즘을 설명하기 위해 ECMAScript 사양에서 사용하는 의사 프로퍼티/ 의사 메서드
- ECMAScript 사양에 등장하는 이중 대괄호 [[]]로 감싼 이름들이 내부 슬롯/메서드 이다
- prototype이 바로 그런 예시이며 이러한 내부 슬롯/메소드는 개발자가 직접 접근할 수 없고 간접적인 수단만 제공한다 (__proto__)
자바스크립트 엔진은 프로퍼티를 생성할 때, 프로퍼티의 상태를 나타내는 프로퍼티 어트리뷰트를 기본값으로 자동 정의한다.
- 프로퍼티의 값 Value
- 값의 갱신 가능 여부 Writable
- 열거 가능 여부 Enumerable
- 재정의 가능 여부 Configurable
어트리뷰트 정보를 제공한다.
키, 값으로 구성된 일반적인 프로퍼티.
자체적인 값은 없고 다른 테이터의 프로퍼티를 읽거나, 저장할 때 호출되는 접근자 함수로 구성된 프로퍼티.
일단 프로퍼티
와 어트리뷰트
가 무슨 뜻인지 구분해야할 것 같습니다.
먼저 제가 이해한 바로는..
프로퍼티
객체가 가지고 있는 값
, 상태
, 데이터
를 추상화한 개념으로 표현할 수 있는 것입니다.
Human.age 에서 age가 Human의 프로퍼티죠.
Human(해당 객체)은 age(나이)라는 프로퍼티를 가지고 있습니다
어트리뷰트
는 한 단계 더 내려와서 그 프로퍼티의 상태
입니다. 프로퍼티의 프로퍼티라고 대충 이해할 수도 있을거 같습니다.
Human.age에서 age라는 프로퍼티는 '값' 이라는 속성(attribute)를 을 가지고 있습니다.
책에서 소개한 4가지 프로퍼티 어트리뷰트인
에서 Value에 해당하죠.
나머지도 다 이 프로퍼티가
- 값인지 아닌지/
- 값이라면 변경이 가능한지 / 불가능한지
- 열거가 가능한지 / 불가능한지
- 재정의가 가능한지 / 불가능한지
등 해당 객체(Human)의 age 속성(프로퍼티)이 값인가?? 변경할 수 있나? 등을 나타내는게 어트리뷰트
입니다.
그렇다면 데이터 프로퍼티는 뭐고, 접근자 프로퍼티는 뭐냐? 라고 한다면 아래와 같이 예시를 들어볼게요
class Human () {
constructor () {
this.age = 25;
}
getA () {
return this.age
}
setA (newAge) {
this.age = newAge
}
}
cosnt man = new Human()
대충 느낌만 비유해보자면 여기서 이 Human이라는 클래스로 생성 될 객체는 age라는 프로퍼티를 갖게 됩니다. 또한 getA, getB도 이 객체의 프로퍼티입니다
man.age / man.getA / man.setA 등으로 접근이 가능하죠
여기서 age가 데이터 프로퍼티입니다. 책에서 설명한대로 키, 값으로 구성된 녀석이죠. 자체적으로 **값(25)**을 가지고 있습니다
나머지 getA, get B는 접근자 프로퍼티입니다. 이 자체로 값을 가지고 있는게 아니라 데이터 프로퍼티인 age의 값을 가져와서 return 해주거나, 그 값을 변경하는 함수 들이죠. 흔히 getter/setter라고 합니다.
이해가 잘 됐으면 좋겠네요 내일 줌에서 다시 한 번 얘기해보져!