Vue.js 주니어 코딩 면접
새 면접Q. Vue.js에서 이벤트 수식어(Event Modifiers)의 종류와 사용 목적을 설명하고, .prevent, .stop, .once 수식어가 각각 어떤 기능을 하는지 설명해주세요. 또한 이벤트 수식어를 체이닝해서 사용할 수 있는지 여부도 포함해주세요.
.prevent는 event.preventDefault()를 호출하여 기본 동작을 막습니다(예: form submit 방지). .stop은 event.stopPropagation()을 호출하여 이벤트 버블링을 중단합니다. .once는 이벤트 리스너가 한 번만 실행되도록 합니다. 이벤트 수식어는 체이닝이 가능하며 @click.stop.prevent처럼 여러 개를 함께 사용할 수 있습니다. 이를 통해 이벤트 핸들러 함수 내부에서 별도의 처리 없이 선언적으로 이벤트를 제어할 수 있습니다.
- • .prevent는 기본 동작 방지(preventDefault)
- • .stop은 이벤트 버블링 중단(stopPropagation)
- • .once는 단 한 번만 실행
- • 수식어 체이닝 가능
.capture, .self, .passive 수식어는 각각 어떤 상황에서 사용하며, .passive 수식어가 성능 최적화에 어떻게 기여하는지 설명해주세요.
Q. Vue.js에서 v-bind를 사용하여 여러 개의 속성을 한 번에 바인딩하는 방법을 설명하고, class와 style 바인딩 시 객체 문법과 배열 문법의 차이점 및 각각의 사용 사례를 설명해주세요.
v-bind 없이 객체를 직접 전달하면 여러 속성을 한 번에 바인딩할 수 있습니다(예: v-bind='objectOfAttrs'). class 바인딩에서 객체 문법은 조건부 클래스 적용에 유리하며(:class='{active: isActive}'), 배열 문법은 여러 클래스를 동적으로 조합할 때 사용합니다(:class='[baseClass, activeClass]'). style 바인딩도 동일하게 객체 문법은 여러 스타일 속성을 한 번에 정의할 때, 배열 문법은 여러 스타일 객체를 병합할 때 사용합니다. 객체와 배열 문법을 혼합해서 사용할 수도 있습니다.
- • v-bind='object' 형태로 여러 속성 한 번에 바인딩
- • 객체 문법은 조건부 적용에 유리
- • 배열 문법은 동적 조합에 유리
- • 객체와 배열 혼합 사용 가능
Vue 3에서 여러 v-bind를 사용할 때 속성 병합 순서가 어떻게 되는지, 그리고 동일한 속성이 중복될 경우 우선순위는 어떻게 결정되는지 설명해주세요.
Q. Vue.js에서 provide/inject 패턴이 무엇인지 설명하고, props drilling 문제를 어떻게 해결하는지 설명해주세요. 또한 provide/inject 사용 시 반응성을 유지하려면 어떻게 해야 하는지도 포함해주세요.
provide/inject는 부모 컴포넌트가 모든 하위 컴포넌트에게 데이터를 제공할 수 있는 의존성 주입 패턴입니다. 중간 컴포넌트들이 props를 전달만 하는 props drilling 문제를 해결하여, 깊이 중첩된 컴포넌트에 직접 데이터를 전달할 수 있습니다. 기본적으로 provide/inject는 반응성이 없지만, Vue 3에서는 ref나 reactive로 감싼 값을 provide하면 반응성이 유지됩니다. 전역 상태 관리가 필요 없는 중소규모 컴포넌트 트리에서 유용하지만, 남용하면 데이터 흐름 추적이 어려워질 수 있습니다.
- • 의존성 주입 패턴으로 깊은 컴포넌트에 데이터 전달
- • props drilling 문제 해결
- • ref/reactive로 감싸면 반응성 유지
- • 데이터 흐름 추적 어려움 주의
provide/inject와 Vuex(또는 Pinia) 같은 상태 관리 라이브러리 중 어떤 것을 선택해야 하는 기준을 제시하고, 각각의 적합한 사용 사례를 설명해주세요.
Q. Vue 3 Composition API에서 watchEffect와 watch의 차이점을 설명하고, 각각 어떤 상황에서 사용하는 것이 적절한지 설명해주세요. 또한 watchEffect의 실행 시점과 의존성 추적 방식도 포함해주세요.
watch는 명시적으로 감시할 데이터 소스를 지정해야 하고, 이전 값과 새 값을 모두 받을 수 있습니다. watchEffect는 콜백 함수 내부에서 사용된 반응형 데이터를 자동으로 추적하여 의존성을 수집합니다. watchEffect는 컴포넌트 마운트 시점에 즉시 실행되며, 내부에서 접근한 반응형 속성이 변경될 때마다 재실행됩니다. 특정 데이터의 변화만 감시하고 이전 값이 필요한 경우 watch를, 여러 반응형 데이터를 사용하는 부수 효과(side effect)를 자동으로 동기화하려면 watchEffect를 사용합니다.
- • watch는 명시적 데이터 소스 지정, 이전/새 값 접근 가능
- • watchEffect는 자동 의존성 추적
- • watchEffect는 즉시 실행됨
- • 특정 데이터 감시는 watch, 자동 동기화는 watchEffect
watchEffect의 cleanup 함수는 어떻게 등록하고 언제 실행되는지 설명하고, 이를 활용한 실무 사례(예: API 요청 취소)를 제시해주세요.
Q. Vue.js에서 v-once, v-memo 디렉티브가 각각 어떤 최적화 기법인지 설명하고, 정적 콘텐츠와 조건부 렌더링이 많은 컴포넌트에서 이들을 활용하여 성능을 개선하는 방법을 설명해주세요. v-memo는 Vue 3.2에서 도입된 기능임을 고려해주세요.
v-once는 엘리먼트와 컴포넌트를 한 번만 렌더링하고 이후 업데이트를 건너뛰어 정적 콘텐츠 최적화에 사용됩니다. v-memo는 Vue 3.2에서 도입된 디렉티브로, 의존성 배열을 받아 배열 값이 변경되지 않으면 해당 서브트리의 재렌더링을 건너뜁니다. v-once는 초기화 후 절대 변하지 않는 콘텐츠(로고, 정적 텍스트)에 사용하고, v-memo는 v-for와 함께 사용하여 특정 조건에서만 리스트 아이템을 업데이트하도록 제어할 수 있습니다. 두 디렉티브 모두 Virtual DOM 비교 연산을 줄여 렌더링 성능을 향상시킵니다.
- • v-once는 한 번만 렌더링, 이후 업데이트 스킵
- • v-memo는 의존성 배열 기반 조건부 업데이트 스킵
- • v-once는 완전 정적 콘텐츠에 사용
- • v-memo는 v-for와 함께 리스트 최적화에 유용
- • Virtual DOM 비교 연산 감소로 성능 향상
대규모 리스트에서 v-memo를 사용할 때 의존성 배열을 어떻게 설계해야 하는지, 그리고 v-memo 사용 시 주의해야 할 메모리 트레이드오프를 설명해주세요.
아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!