프론트엔드 개발 · 중급
Vue 컴포넌트에서 'computed' 속성과 'watch' 옵션(또는 watch effect)은 모두 반응형 데이터의 변화에 따라 특정 로직을 수행할 수 있습니다. 이 둘의 주요 차이점을 설명하고, 각각 어떤 상황에 더 적합한지 실무 예시를 들어 설명해주세요.
힌트 · computed는 종속성에 기반한 캐시된 파생 상태를 만들 때, watch는 특정 상태 변화에 대한 부수 효과를 수행할 때 사용합니다.
캐싱부수 효과종속성성능 최적화비동기
모범답안
네, Vue 컴포넌트에서 computed와 watch는 모두 반응형 데이터 변화에 반응하지만, 목적과 동작 방식에 차이가 있습니다.
computed는 종속성을 기반으로 계산된 값을 반환합니다. 즉, 종속된 데이터가 변경될 때만 다시 계산되고, 결과는 캐싱됩니다. 따라서 성능 최적화에 유리하며, 템플릿에서 데이터를 표시하거나 다른 computed 속성의 종속성으로 사용될 때 적합합니다. 예를 들어, 상품 가격과 할인율을 기반으로 최종 가격을 계산하는 경우에 computed를 사용하면 됩니다.
반면 watch는 특정 데이터의 변화를 감지하고, 그에 따른 부수 효과(side effect)를 수행합니다. 데이터 변경 시마다 실행되며, 비동기 작업이나 API 호출, 로깅 등과 같이 데이터 변경에 따라 다른 작업을 수행해야 할 때 유용합니다. 예를 들어, 검색어 입력 시 API를 호출하여 검색 결과를 업데이트하는 경우에 watch를 사용할 수 있습니다.
요약하자면, computed는 값을 계산하고 캐싱하는 데, watch는 데이터 변화에 따른 부수 효과를 처리하는 데 더 적합합니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 Vue.js / Nuxt 면접 질문
- Vue.js에서 사용자 인터랙션(클릭, 입력 등)을 처리하기 위해 `v-on` 디렉티브를 어떻게 사용하는지 설명해 주세요. 이벤트 수식어(event modifiers)의 역할도 함께 설명해 주세요.
- Vue.js에서 컴포넌트 기반 개발의 이점은 무엇이며, 하나의 컴포넌트는 일반적으로 어떤 구조(template, script, style)로 이루어져 있는지 설명해 주세요.
- Vue 3 Composition API에서 'ref'와 'reactive'는 반응형 데이터를 생성하는 데 사용됩니다. 이 두 함수의 주요 차이점은 무엇이며, 각각 어떤 상황에서 사용하는 것이 더 적절한지 구체적인 예시와 함께 설명해주세요.
- Vue 컴포넌트 간 통신에서 'props'와 'emit'은 기본적인 부모-자식 통신 방식입니다. 이 외에 복잡한 컴포넌트 트리에서 부모-자식 관계가 아닌 컴포넌트 간 효율적인 통신 방법들(예: provide/inject, Pinia/Vuex)을 설명하고, 각 방법의 장단점을 비교해주세요.
- Vue Router의 내비게이션 가드(Navigation Guards)는 무엇이며, 어떤 종류(전역, 라우트별, 컴포넌트 내)가 있고 각각 어떤 시점에 호출되는지 설명하고 실제 애플리케이션에서 활용 사례를 들어주세요.
- Vue 컴포넌트에서 'slot'을 사용하는 목적은 무엇이며, 'named slot'과 'scoped slot'의 차이점을 구체적인 예시와 함께 설명해주세요.