Proxy와 Reflect는 객체 동작을 감싸는 쌍이다

Proxy가 연산을 멈춰 세우고, Reflect가 같은 연산의 기본 경로를 호출한다. 둘을 함께 보면 메타프로그래밍의 경계가 선명하다.

객체 동작Proxy가 하는 일Reflect가 하는 일주의점
property readget trap으로 관찰Reflect.get으로 기본 읽기receiver this 바인딩
property writeset trap으로 검증Reflect.set으로 기본 쓰기boolean 반환
membershiphas trap으로 제한Reflect.has로 in 동작 유지숨겨도 불변식은 유지
deletedeleteProperty로 통제Reflect.deleteProperty 위임삭제 실패 처리

Proxy를 쓸 때는 “무엇을 바꿀지”보다 “무엇을 그대로 보존할지”가 먼저 정해져야 한다.