ECMAScript6 길들이기 - 5 리플렉트 API 구현

자바스크립트에도 자바처럼 리플렉션 기능이 있는데 ES6는 객체 리플렉션 가능한 새 리플렉션 API를 도입했음.

ES5 시절에도 있었지만 체계가 없었고 실패하면 예외가 발생했다. ES6 리플렉션에서는 성공 여부로 true/false를 반환한다.


Reflect 객체

ES6 전역 Reflect 객체에 객체 리플렉션에 대한 모든 메소드가 있다.

함수 객체가 아니므로 호출할 수 없고 new 연산자를 붙여 사용할 수도 없다.


Reflect 객체의 메소드에 대해 하나씩 살펴본다.


Reflect.apply(function, this, args)

- function : 타깃 함수

- this : 타깃 함수 내부의 this값

- args : 타깃 함수의 인자를 지정한 배열 객체


주어진 this 값으로 타깃 함수 function을 args 인자와 함께 호출한다.


Reflect.construct(construct, args, prototype)

- construct : 타깃 생성자

- args : 타깃 생성자의 인자 배열

- prototype : 타깃 생성자의 prototype으로 사용할 생성자


함수를 생성자로 실행하는 메소드

new 연산자와 비슷함. new 대신 쓰는 이유는 경우에 따라 한 생성자의 prototype과 다른 생성자의 prototype을 매치시켜야 하기 때문.


Reflect.defineProperty(object, property, descriptor)

- object : 프로퍼티를 정의/수정할 객체

- property : 정의/수정할 프로퍼티명 또는 심볼

- descriptor : 정의/수정할 프로퍼티의 서술


객체에 새 프로퍼티를 정의하거나 기존 프로퍼티를 수정하는 메소드


데이터 프로퍼티와 접근자 프로퍼티

ES5부터 모든 객체의 프로퍼티는 데이터 프로퍼티, 접근자 프로퍼티 둘 중 하나다.

데이터 프로퍼티는 쓰기 가능 또는 불가 상태 값을 가지고

접근자 프로퍼티는 게터-세터 함수를 가진다.


Reflect.deleteProperty(object, property)

- object : 타깃 객체

- property : 삭제할 프로퍼티명


객체 프로퍼티를 삭제한다. 성공 여부 true/false 반환


Reflect.enumerate(object)

- object : 타깃 객체


주어진 객체 자신의 열거 가능한 프로퍼티와 상속받은 열거 가능 프로퍼티를 이터레이터 객체로 반환


Reflect.get(object, property, this)

- object : 타깃 객체

- property : 프로퍼티명

- this : 프로퍼티가 접근자 프로퍼티일 경우 get 함수 내부의 this값 지정


프로퍼티 값을 조회하는 메소드


Reflect.set(object, property, value, this)

- object : 타깃 객체

- property : 프로퍼티명

- value : 프로퍼티 값

- this : 접근자 프로퍼티일 경우 get 함수 내부의 this값 지정


객체 프로퍼티 값을 지정하는 메소드


Reflect.getOwnPropertyDescriptor(object, property)

- object : 타깃 객체

- property : 프로퍼티명


객체 프로퍼티의 서술자를 조회하는 메소드


Reflect.getPrototypeOf(object)

객체 프로토타입 값을 조회하는 메소드


Reflect.setPrototypeOf

내부 [[prototype]] 값을 지정하는 메소드


Reflect.has(object, property)

주어진 객체에 어떤 프로퍼티가 존재하는지 true/false로 반환한다


Reflect.isExtensible(object)

확장 가능한 객체인지(이 객체에 새로운 프로퍼티를 추가할 수 있는지) 확인, true/false 반환


Reflect.preventExtensions(object)

객체를 확장할 수 없게 하는 메소드


Reflect.ownKeys(object)

객체 자신의 프로퍼티 키를 원소로 담은 배열을 반환

상속한 프로퍼티는 무시함