ES6 Reflect

agnusdei·2023년 7월 11일
0

ES6에서 도입된 Reflect 객체는 JavaScript의 내장 객체로, 객체와 관련된 동작을 수행하기 위한 정적 메소드를 제공합니다. Reflect 객체의 메소드는 주로 객체의 프로퍼티 접근, 속성 설정, 메소드 호출 등의 작업을 보다 명확하고 간편하게 처리할 수 있도록 도와줍니다.

Reflect 객체의 주요 메소드와 간단한 설명은 다음과 같습니다:

  1. Reflect.get(target, property [, receiver]): target 객체에서 property 이름의 속성 값을 가져옵니다. 선택적으로 receiver 객체를 지정하여 메소드 실행 컨텍스트를 변경할 수 있습니다.
  2. Reflect.set(target, property, value [, receiver]): target 객체의 property 이름의 속성 값을 value로 설정합니다. 선택적으로 receiver 객체를 지정하여 메소드 실행 컨텍스트를 변경할 수 있습니다.
  3. Reflect.has(target, property): target 객체에 property 이름의 속성이 존재하는지 여부를 확인합니다. 속성이 존재하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
  4. Reflect.deleteProperty(target, property): target 객체에서 property 이름의 속성을 삭제합니다. 속성이 성공적으로 삭제되면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
  5. Reflect.construct(target, argumentsList [, newTarget]): target 생성자 함수를 사용하여 새로운 객체를 생성합니다. argumentsList는 생성자 함수에 전달될 인수의 목록입니다. 선택적으로 newTarget을 지정하여 생성자의 new.target 값을 변경할 수 있습니다.
  6. Reflect.apply(target, thisArgument, argumentsList): target 함수를 thisArgument를 사용하여 호출합니다. argumentsList는 함수에 전달될 인수의 목록입니다.

그 외에도 Reflect 객체에는 defineProperty, getOwnPropertyDescriptor, getPrototypeOf, setPrototypeOf, isExtensible, preventExtensions 등의 메소드가 있습니다. 이러한 메소드는 객체 조작과 관련된 다양한 작업을 수행하는 데 유용합니다.

Reflect 객체의 장점은 다음과 같습니다:

  1. 명시적이고 일관된 동작: Reflect 메소드는 객체 조작 작업을 수행하는 데 일관된 API를 제공합니다. 이로 인해 코드의 가독성과 유지 보수성이 향상됩니다.
  2. 프록시와 함께 사용 가능: Reflect 메소드는 프록시 객체와 함께 사용될 때 강력한 도구로 작용합니다. 프록시는 객체에 대한 간접 접근을 제공하고 동작을 가로채는데 사용되는데, Reflect 메소드는 이러한 프록시 객체와 함께 사용하여 객체 조작을 더욱 세밀하게 제어할 수 있습니다.
  3. 기존 동작의 래핑: Reflect 메소드는 기존에 존재하는 동작을 래핑하여 확장하고 변경할 수 있는 유연성을 제공합니다. 예를 들어, Reflect.getReflect.set 메소드를 사용하여 객체의 속성 접근 동작을 변경하거나 확장할 수 있습니다.

다음은 Reflect 객체의 사용 예시입니다:

const person = {
  name: 'John',
  age: 25
};

console.log(Reflect.get(person, 'name')); // "John"

Reflect.set(person, 'age', 30);
console.log(person.age); // 30

console.log(Reflect.has(person, 'name')); // true

Reflect.deleteProperty(person, 'age');
console.log(person.age); // undefined

const obj = Reflect.construct(Array, [1, 2, 3]);
console.log(obj instanceof Array); // true

Reflect.apply(console.log, console, ['Hello, Reflect!']); // "Hello, Reflect!"

위의 예시에서 Reflect.get 메소드를 사용하여 person 객체의 name 속성 값을 가져오고, Reflect.set 메소드를 사용하여 person 객체의 age 속성 값을 변경합니다. Reflect.has를 사용하여 속성의 존재 여부를 확인하고, Reflect.deleteProperty를 사용하여 person 객체의 age 속성을 삭제합니다.

또한, Reflect.construct를 사용하여 Array 생성자 함수를 호출하여 새로운 배열 객체를 생성하고, Reflect.apply를 사용하여 console.log 함수를 console 객체를 컨텍스트로 사용하여 호출합니다.

이와 같이 Reflect 객체는 객체 조작에 유용한 메소드를 제공하여 코드를 단순화하고 유연성을 높여줍니다.

0개의 댓글