Skip to content

16. 프로퍼티 어트리뷰트

DD edited this page Jul 24, 2021 · 2 revisions

프로퍼티 어트리뷰트

내부 슬롯(internal slot) / 내부 메서드(internal method)

자바스크립트 엔진의 구현 알고리즘을 설명하기 위해 ECMAScript 사양에서 사용하는 의사 프로퍼티/ 의사 메서드

  • ECMAScript 사양에 등장하는 이중 대괄호 [[]]로 감싼 이름들이 내부 슬롯/메서드 이다
  • prototype이 바로 그런 예시이며 이러한 내부 슬롯/메소드는 개발자가 직접 접근할 수 없고 간접적인 수단만 제공한다 (__proto__)

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

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

프로퍼티의 상태 / 프로퍼티 어트리뷰트

프로퍼티 디스크립터

어트리뷰트 정보를 제공한다.

프로퍼티

데이터 프로퍼티

키, 값으로 구성된 일반적인 프로퍼티.

접근자 프로퍼티

자체적인 값은 없고 다른 테이터의 프로퍼티를 읽거나, 저장할 때 호출되는 접근자 함수로 구성된 프로퍼티.




프로퍼티 어트리뷰트, 데이터 프로퍼티, 접근자 프로퍼티가 뭔지 잘 이해가 안간다는 질문에 내가 작성한 답글


일단 프로퍼티어트리뷰트가 무슨 뜻인지 구분해야할 것 같습니다.

먼저 제가 이해한 바로는..

프로퍼티 객체가 가지고 있는 , 상태, 데이터를 추상화한 개념으로 표현할 수 있는 것입니다. 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라고 합니다.



이해가 잘 됐으면 좋겠네요 내일 줌에서 다시 한 번 얘기해보져!