JavaScript 객체지향 프로그래밍 객체에 대한 이해

    2018-04-23 16:29:44 작성

    객체에 대한 이해

    • 객체 생성

      객체를 만드는 가장 단순한 방법은 Object의 인스턴스를 만들고 여기에 프로퍼티와 메서드를 만드는 것입니다.

      객체 리터럴 표기법 사용을 권장합니다.

    • 프로퍼티 타입

      person 객체는 name, age 두개의 프로퍼티가 있고, say()라는 메서드가 있습니다.
      이러한 프로퍼티는 모두 자바스크립에서 프로퍼티의 행동을 정의하는 특징에 따라 생성됩니다.
      이들 속성을 자바스크립트 엔진 내부에서 구현하므로 직접 접근할 수 있는 방법은 없습니다.
      프로퍼티에는 데이터 프로퍼티와 접근자 프로퍼티 두가지 타입이 있습니다.

      데이터 서술 속성

      [[Configurable]] 해당 프로퍼티가 삭제하거나 속성을 바꾸거나 접근자 프로퍼티로 변환할 수 있음을 나타냅니다. 기본값 true
      [[Enumerable]] for-in 루프에서 해당 프로퍼티를 반환함을 나타냅니다. 기본값 true
      [[Writable]] 프로퍼티의 값을 바꿀수 있음을 나타냅니다. 기본값 true
      [[Value]] 프로퍼티의 실제 데이터 값입니다. 기본값은 undefined

      여기에서 name이라는 프로퍼티에 값 "John"을 할당했습니다.
      즉 [[Value]] 속성이 "John" 이며 값이 바뀐다면 이위치에 저장됩니다.

    • 데이터 프로퍼티 속성 변경

      기본 프로퍼티의 속성을 바꾸려면 Object.defineProperty() 메서드를 사용해야 합니다.
      이메서드는 3개의 매개변수를 받습니다.

      • 수정할 객체
      • 프로퍼티 이름
      • 서술 객체 : 서술객체의 프로퍼티는 내부속성이 이름과 동일합니다.(configurable, enumerable, writable, value)

      [[Configurable]] 속성을 한번 false로 하면 변경할 수 없으며 다시 true로 변경하려 한다면 예외가 발생합니다.

    • 접근자 프로퍼티

      접근자 프로퍼티란 실제 값이 없고 get(),set() 메서드를 정의하여 값을 저장하고 반환하게 하는 프로퍼티 입니다.

      [[Configurable]] 해당 프로퍼티가 삭제하거나 속성을 바꾸거나 접근자 프로퍼티로 변환할 수 있음을 나타냅니다. 기본값 true
      [[Enumerable]] for-in 루프에서 해당 프로퍼티를 반환함을 나타냅니다. 기본값 true
      [[Get]] 프로퍼티를 읽을때 호출할 함수입니다. 기본값 undefined
      [[Set]] 프로퍼티를 바꿀때 호출할 함수입니다. 기본값은 undefined
    • 접근자 프로퍼티 속성 변경

      접근자 프로퍼티는 명시적으로 정의할 수 없으며 Object.defineProperty() 메서드를 사용해야 합니다.
      서술객체의 프로퍼티는 내부속성 이름과 동일합니다.(configurable, enumerable, get, set)

    • 다중 프로퍼티 정의

      여러개의 프로퍼티를 동시에 수정할 수 있는 메서드입니다..
      Object.defineProperties() 메서드를 사용하며, 서술객체를 이용해 여러 프로퍼티를 한번에 정의 합니다.

    • 프로퍼티 속성 읽기

      Object.getOwnPropertyDescriptor() 함수를 사용하여 프로퍼티의 서술 속성을 읽을 수 있습니다. 이메서드는 2개의 매개변수를 받습니다.

      • 읽어올 객체
      • 서술객체를 가져올 프로퍼티 이름