Proxy는 가로채고 Reflect는 기본 동작을 보존한다
Proxy는 객체 앞의 관문이고 Reflect는 관문 안에서 원래 객체 연산을 표준 방식으로 이어 주는 도구다.
| 구간 | 역할 | 좋은 사용 | 깨지기 쉬운 지점 |
|---|---|---|---|
| target | 원본 객체와 prototype 규칙 보관 | 실제 데이터는 target에 둠 | proxy와 target을 섞어 전달 |
| handler | 필요한 trap만 정의 | get/set/has/delete 감시 | 모든 연산을 무리하게 가로챔 |
| Reflect | 원래 내부 연산에 위임 | receiver, boolean 반환 규칙 보존 | trap 안에서 proxy를 다시 호출 |
| invariant | 언어 불변식 우선 | non-configurable 규칙 확인 | 숨길 수 없는 속성을 숨기려 함 |
Proxy 코드는 “무엇을 감시할지”와 “기본 동작을 어떻게 유지할지”를 분리해야 안전하다.