안녕하세요. 주니어 백엔드 개발자 입니다.
심바 블로그
안녕하세요. 주니어 백엔드 개발자 입니다.
>> Github 바로가기
  • 분류 전체보기 (31)
    • AWS (3)
    • DATABASE (2)
    • Docker (1)
    • Architecture (3)
    • GraphQL (5)
    • JS (1)
    • NestJS (8)
    • 테스트 코드 (3)
    • 세미나 (4)
    • 기타 (1)
    • 이전 블로그 자료들 (0)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
안녕하세요. 주니어 백엔드 개발자 입니다.

심바 블로그

JS

Reflect API

2023. 5. 19. 09:21
반응형

Reflect API는 Reflection이라는 개념(런타임 시점에 사용되는 자신의 구조와 행위를 관리하고 수정하는 개념)이 들어간 자바스크립트 내장 객체로 Proxy와 같이 자바스크립트 명령 중간에 실행할 수 있는 기능이다. 

 

1. Reflect.get, Reflect.set

대표적인 Reflect api로는 get, set이 있다. 먼저 MDN에 나와있는 Reflect.get 예제 코드를 보게 되면 아래와 같다

 

1-1. Reflect.get

// Reflect.get(target, propertyKey, receiver?)

// MDN 예제 코드

const object1 = {
  x: 1,
  y: 2
};

console.log(Reflect.get(object1, 'x'));
// Expected output: 1

const array1 = ['zero', 'one'];

console.log(Reflect.get(array1, 1));
// Expected output: "one"

 

일단 Reflect api는 객체가 아닌 다른 타입에 접근하면 에러를 리턴한다. 위의 예제 코드처럼 'target' 파라미터로 객체에 접근해서 'propertyKey'로 원하는 키값에 접근할 수 있다. (자바스크립트에서 배열은 객체로 분류되기 때문에 배열의 인덱스 값으로 접근이 가능함)

 

 

1-2. Reflect.set

마찬가지로 MDN에 나와있는 예제 코드를 보면 아래와 같다.

// Reflect.set(target, propertyKey, value, receiver?)

// MDN 예제 코드

const object1 = {};
Reflect.set(object1, 'property1', 42);

console.log(object1.property1);
// Expected output: 42

const array1 = ['duck', 'duck', 'duck'];
Reflect.set(array1, 2, 'goose');

console.log(array1[2]);
// Expected output: "goose"

예제 코드를 보면  'target' 파라미터로 원하는 객체에 접근해서 'propertyKey' 파라미터를 키값으로 'value' 파라미터로 원하는 벨류 값을 집어넣는다. 배열일 경우에는 원하는 인덱스에 집어넣을 수 있다.

 

2. 그외 Reflect api 들

get, set 말고도 아래와 같은 메서드들을 제공한다.

 

has() : 객체 내부에 값을 판별하여 boolean 값으로 리턴하는 메서드

deleteProperty() : 객체 내부의 특정 키값의 벨류값을 undefinded로 변경

apply() : 함수 호출

constructor : 생성자 호출

getPrototypeOf : Object.getPrototypeOf

setPrototypeOf : Object.setPrototypeOf

preventExtensions: Object.preventExtensions

getOwnPropertyDescriptor : Object.getOwnPropertyDescriptor

ownKeys : Object.getOwnPropertyNames | Object.getOwnPropertySymbols

isExtensible : Object.isExtensible

반응형
    안녕하세요. 주니어 백엔드 개발자 입니다.
    안녕하세요. 주니어 백엔드 개발자 입니다.

    티스토리툴바