Proxy와 Reflect는 객체 동작을 감싸는 쌍이다
Proxy가 연산을 멈춰 세우고, Reflect가 같은 연산의 기본 경로를 호출한다. 둘을 함께 보면 메타프로그래밍의 경계가 선명하다.
| 객체 동작 | Proxy가 하는 일 | Reflect가 하는 일 | 주의점 |
|---|---|---|---|
| property read | get trap으로 관찰 | Reflect.get으로 기본 읽기 | receiver this 바인딩 |
| property write | set trap으로 검증 | Reflect.set으로 기본 쓰기 | boolean 반환 |
| membership | has trap으로 제한 | Reflect.has로 in 동작 유지 | 숨겨도 불변식은 유지 |
| delete | deleteProperty로 통제 | Reflect.deleteProperty 위임 | 삭제 실패 처리 |
Proxy를 쓸 때는 “무엇을 바꿀지”보다 “무엇을 그대로 보존할지”가 먼저 정해져야 한다.