프론트엔드 개발 · 심화
JavaScript의 Proxy와 Reflect의 용도와 사용법에 대해 설명해주세요.
힌트 · 객체 동작 가로채기와 Vue.js의 반응성 시스템을 생각해보세요.
메타 프로그래밍객체 프록시트랩(Trap)기본 동작 제어Reflect API
모범답안
Proxy와 Reflect는 JavaScript에서 메타 프로그래밍을 가능하게 해주는 도구입니다.
Proxy는 객체의 기본적인 동작(속성 접근, 할당, 삭제 등)을 가로채고 제어할 수 있게 해줍니다. 마치 객체에 대한 '대리인' 역할을 하는 것이죠. Proxy를 사용하면 객체에 접근하거나 수정할 때 특정 로직을 실행할 수 있습니다. 예를 들어, 속성 접근 시 로그를 남기거나, 특정 속성에 대한 접근을 막는 등의 작업을 할 수 있습니다.
Reflect는 객체의 기본적인 동작을 수행하는 메서드들을 제공합니다. Proxy의 트랩(Trap) 내에서 원래 객체의 동작을 수행해야 할 때 Reflect API를 사용합니다. Reflect를 사용하면 객체의 기본 동작을 보다 안전하고 명확하게 제어할 수 있습니다.
Vue.js의 반응성 시스템도 Proxy를 활용하여 데이터 변경을 감지하고 UI를 업데이트합니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 JavaScript 면접 질문
- JavaScript의 실행 컨텍스트(Execution Context)와 스코프 체인에 대해 설명해주세요.
- JavaScript의 WeakMap과 WeakSet의 특징과 사용 사례를 설명해주세요.
- JavaScript의 이터레이터(Iterator)와 제너레이터(Generator)에 대해 설명해주세요.
- for 루프 안에서 setTimeout 콜백이 모두 같은 값을 출력하는 고전적인 문제를 var로 작성했을 때 왜 발생하는지, 그리고 let으로 바꾸면 왜 의도대로 동작하는지를 블록 스코프와 클로저 캡처 관점에서 설명해주세요.
- 메모이제이션 캐시나 카운터를 클로저로 구현할 때, 시간이 지나면서 의도치 않게 메모리가 계속 점유되는 상황이 생길 수 있습니다. 클로저가 참조를 붙잡는 방식이 GC와 어떻게 상호작용하는지, 그리고 이를 어떻게 완화할 수 있을지 설명해주세요.
- 화살표 함수의 this와 일반 함수의 this는 결정 시점과 규칙이 다릅니다. 객체 메서드를 화살표 함수로 정의했을 때 흔히 발생하는 버그와, 반대로 콜백에서 화살표 함수가 유리한 경우를 각각 예를 들어 설명해주세요.