2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

Vue.js에서 watch 속성은 무엇인가요?

_____
Q1: Vue.js에서 watch 속성은 무엇인가요?
A1: watch 속성은 Vue 인스턴스나 컴포넌트 내에서 특정 데이터(reactive data)의 변화를 감지하고, 그 변화가 발생할 때마다 지정한 콜백 함수를 실행하도록 하는 옵저버(감시자) 역할을 합니다.

Q2: watch를 언제 사용하나요?
A2: 데이터가 변할 때마다 비동기 작업을 하거나, 데이터 변화를 기반으로 부가적인 로직을 실행해야 할 때 사용합니다. 예를 들어, 사용자가 입력한 값을 감지해 API를 호출하거나, 데이터 변화를 감지해 컴포넌트 상태를 업데이트하는 경우에 적합합니다.

Q3: watch와 computed의 차이는 무엇인가요?
A3: computed는 종속된 데이터가 변경될 때 계산된 값을 반환하며, 주로 템플릿 렌더링에 사용됩니다. 반면, watch는 데이터 변경을 감지해 부수 효과(side effect)를 실행하는 데 사용됩니다. 즉, computed는 값의 계산에, watch는 변화에 따른 동작에 초점을 맞춥니다.

Q4: watch 속성 사용법은 어떻게 되나요?
A4: Vue 인스턴스나 컴포넌트의 옵션에 `watch` 객체를 추가하고, 감시할 데이터 이름을 키로, 콜백 함수를 값으로 작성합니다.

```js
new Vue({
data() {
return { count: 0 }
},
watch: {
count(newVal, oldVal) {
console.log(`count가 ${oldVal}에서 ${newVal}로 변경되었습니다.`);
}
}
})
```

Q5: watch 콜백 함수에서 어떤 매개변수를 받을 수 있나요?
A5: 첫 번째 매개변수는 변경된 후의 새로운 값(newVal), 두 번째 매개변수는 변경되기 전의 이전 값(oldVal)입니다.

Q6: deep 옵션이란 무엇인가요?
A6: 객체나 배열 내부의 중첩된 속성까지 감지하려면 watch 옵션에 `{ deep: true }`를 추가해야 합니다. 이 옵션이 없으면 객체나 배열 전체가 변경될 때만 감지합니다.

```js
watch: {
user: {
handler(newVal) { /* 내부 속성 변화 감지 가능 */ },
deep: true
}
}
```

Q7: immediate 옵션은 무엇인가요?
A7: immediate 옵션은 watch가 등록되자마자 즉시 콜백 함수를 호출하도록 하는 설정입니다. 초기값에 대한 작업이 필요할 때 유용합니다.

```js
watch: {
count: {
handler(newVal) { /* 콜백 로직 */ },
immediate: true
}
}
```

Q8: 여러 데이터 속성을 동시에 감시할 수 있나요?
A8: watch 객체 내에 감시할 각 속성마다 별도의 콜백 함수를 작성해야 합니다. 여러 데이터 변화를 한 함수에서 처리하려면 computed 속성 등을 활용하거나, 복합 데이터(객체, 배열)를 감시해야 합니다.

Q9: Vue 3에서의 watch 사용법은 어떻게 달라졌나요?
A9: Vue 3에서는 Composition API를 도입하며, `watch` 함수가 별도로 제공됩니다. reactive 변수나 ref를 직접 감시할 수 있으며, 사용법이 함수 호출 방식으로 변경되었습니다.

```js
import { ref, watch } from 'vue';

const count = ref(0);

watch(count, (newVal, oldVal) => {
console.log(`count changed from ${oldVal} to ${newVal}`);
});
```

Q10: watch를 사용할 때 주의할 점은 무엇인가요?
A10: 자주 변경되는 데이터를 과도하게 감시하면 성능 저하가 발생할 수 있으므로, 필요한 데이터에만 watch를 적용하고, deep 감시는 꼭 필요한 경우에만 사용하는 것이 좋습니다. 또한 비동기 콜백 내에서 상태 관리에 주의해야 합니다.
Vue.js에서 `watch` 속성은 Vue 인스턴스의 <a href='https://sangseek.com/sangseeks/데이터 속성/ko'>데이터 속성</a>이나 계산된 속성(computed properties)의 변화를 감지하고, 그 변화에 따라 특정 작업을 수행할 수 있도록 해주는 기능입니다. `watch`는 주로 비동기 작업이나 데이터의 변화를 기반으로 한 로직을 처리할 때 유용하게 사용됩니다. 기본 개념 Vue.js는 반응형 시스템을 기반으로 하며, 데이터가 변경되면 UI가 자동으로 업데이트됩니다. 그러나 때때로 데이터가 변경될 때 특정 작업을 수행해야 할 필요가 있습니다. 이럴 때 `watch` 속성을 사용합니다. `watch`는 특정 데이터 속성을 감시하고, 그 값이 변경될 때마다 지정된 콜백 함수를 실행합니다. 사용법 `watch` 속성은 Vue 인스턴스의 옵션 중 하나로, 객체 형태로 정의됩니다. 각 속성은 감시할 데이터 속성의 이름을 키로 하고, 그 속성이 변경될 때 실행할 함수를 값으로 가집니다. ```javascript new Vue({ el: ' app', data: { question: '', answer: '질문을 입력하세요.' }, watch: { question: function (newQuestion) { this.answer = '생각 중...'; this.getAnswer(newQuestion); } }, methods: { getAnswer: function (question) { // 비동기 API 호출 또는 복잡한 로직을 수행 <a href='https://sangseek.com/sangseeks/setTimeout/ko'>setTimeout</a>(() => { this.answer = '답변: ' + question; }, 1000); } } }); ``` 위의 예제에서 `question` 데이터 속성이 변경될 때마다 `watch` 속성에 정의된 함수가 호출됩니다. 이 함수는 새로운 질문을 받아서 `answer` 속성을 업데이트합니다. 여러 데이터 속성 감시하기 `watch` 속성은 여러 데이터 속성을 동시에 감시할 수 있습니다. 각 속성에 대해 별도의 콜백 함수를 정의하면 됩니다. ```javascript watch: { question: function (newQuestion) { // question이 변경될 때의 로직 }, anotherProperty: function (newValue) { // anotherProperty가 변경될 때의 로직 } } ``` 깊은 감시 (Deep Watch) 객체나 배열과 같은 복잡한 데이터 구조를 감시할 때는 `deep` 옵션을 사용할 수 있습니다. 이 옵션을 `true`로 설정하면, 해당 데이터 구조의 모든 속성이나 요소의 변화를 감지할 수 있습니다. ```javascript data: { user: { name: '', age: 0 } }, watch: { user: { handler: function (newUser) { console.log('User data changed:', newUser); }, deep: true } } ``` 위의 예제에서 `user` 객체의 속성이 변경될 때마다 `handler` 함수가 호출됩니다. 즉시 실행 (Immediate Watch) `watch` 속성의 콜백 함수는 기본적으로 데이터가 변경될 때만 호출됩니다. 그러나 `immediate` 옵션을 사용하면, 감시를 시작할 때 즉시 한 번 호출되도록 설정할 수 있습니다. ```javascript watch: { question: { handler: function (newQuestion) { this.answer = '생각 중...'; this.getAnswer(newQuestion); }, immediate: true } } ``` 이렇게 설정하면, Vue 인스턴스가 생성될 때 `question`의 현재 값에 대해 `handler`가 즉시 실행됩니다. 결론 Vue.js의 `watch` 속성은 데이터의 변화를 감지하고 그에 따라 특정 작업을 수행할 수 있는 강력한 도구입니다. 비동기 작업, API 호출, 복잡한 로직 처리 등 다양한 상황에서 유용하게 활용될 수 있습니다. `watch`를 적절히 사용하면 Vue 애플리케이션의 반응성을 더욱 향상시킬 수 있습니다.
작성자: 김서진 [비회원] | 작성일자: 1년 전 2024-09-14 17:14:40
조회수: 126 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.