728x90
Vue3는 성능 향상과 개발 편의성을 위해 반응형 시스템을 대폭 개선했습니다. 그 중심에는 ref와 reactive라는 두 가지 함수가 있습니다. 이 두 함수는 모두 데이터의 변화를 추적하고, 이에 따라 뷰를 자동으로 업데이트하는 역할을 수행하지만, 각각 다른 특징과 사용 용도를 가지고 있습니다. 본 글에서는 Vue3의 반응형 시스템에서 ref와 reactive의 차이점과 공통점을 깊이 있게 살펴보고, 각각의 장단점과 효과적인 활용 방법에 대해 자세히 알아보겠습니다.
728x90
ref와 reactive: 왜 두 가지가 필요할까?
Vue3는 데이터의 변화를 감지하고 뷰를 업데이트하는 반응형 시스템을 기반으로 합니다. 이때, 데이터의 종류에 따라 ref와 reactive를 적절히 사용해야 합니다. 왜 두 가지 함수가 필요할까요? 그 이유는 JavaScript의 데이터 타입이 원시 값(primitive)과 객체(object)로 나뉘기 때문입니다.
- 원시 값: 문자열, 숫자, 불리언 등 값 자체가 변하지 않는 데이터입니다.
- 객체: 여러 값을 하나의 단위로 묶은 복합적인 데이터입니다. (배열도 객체의 일종입니다.)
ref는 주로 원시 값을 감싸서 반응형으로 만들 때 사용하고, reactive는 객체나 배열과 같은 복합 데이터를 감싸서 반응형으로 만들 때 사용합니다.
ref와 reactive의 차이점
특징 | ref | reactive |
감싸는 데이터 | 원시 값, 객체, 배열 | 객체, 배열 |
반응형 만들기 | .value 프로퍼티를 통해 접근 | 직접 접근 가능 |
깊은 반응성 | 객체 내부 값도 반응형 | 객체 내부 값도 반응형 |
TypeScript 지원 | TS 타입 추론 지원 | TS 타입 추론 지원 |
- ref:
- 원시 값을 감싸서 반응형으로 만들 때 사용합니다.
- 값에 접근할 때 .value 프로퍼티를 사용해야 합니다.
- 객체를 감싸면 내부 값도 자동으로 반응형이 됩니다.
- TypeScript와의 호환성이 좋습니다.
- reactive:
- 객체나 배열을 감싸서 반응형으로 만들 때 사용합니다.
- 값에 직접 접근할 수 있습니다.
- 내부 값도 반응형이므로 객체 내부의 값이 변경될 때마다 뷰가 업데이트됩니다.
- TypeScript와의 호환성이 좋습니다.
ref와 reactive의 공통점
- 반응형 시스템: 둘 다 데이터의 변화를 추적하고, 이에 따라 뷰를 자동으로 업데이트하는 역할을 합니다.
- Vue3 컴포넌트에서 사용: Vue3 컴포넌트 내에서 상태 관리를 위해 사용됩니다.
- TypeScript 지원: TypeScript와 함께 사용하여 타입 안전성을 높일 수 있습니다.
언제 어떤 것을 사용해야 할까?
- ref:
- 단순한 값(숫자, 문자열, 불리언 등)을 관리할 때
- 객체를 단일 값으로 취급하고 싶을 때
- reactive:
- 객체나 배열과 같이 복잡한 데이터 구조를 관리할 때
- 객체 내부의 여러 값이 연관되어 변경될 때
예시
728x90
import { ref, reactive } from 'vue';
const count = ref(0); // 원시 값 (숫자)을 감싸는 ref
const person = reactive({ name: 'John Doe', age: 30 }); // 객체를 감싸는 reactive
// 템플릿에서 사용
<template>
<div>
<p>Count: {{ count.value }}</p>
<p>Name: {{ person.name }}, Age: {{ person.age }}</p>
</div>
</template>
결론
ref와 reactive는 Vue3의 핵심적인 반응형 시스템을 구성하는 두 가지 함수입니다. 각각의 특징과 용도를 이해하고, 적절하게 사용하면 더욱 효율적이고 유연한 Vue 애플리케이션을 개발할 수 있습니다.
728x90
'Vue.js 를 배워보자' 카테고리의 다른 글
Vue.js와 Node.js를 활용한 실시간 주식 시세 표시 웹 애플리케이션 개발 가이드: RESTful API, WebSocket, 차트 라이브러리 통합 (0) | 2024.12.18 |
---|---|
Vue.js를 이용한 사용자 로그인 구현: 단계별 가이드 및 심층 분석 (0) | 2024.12.18 |
Vue와 Electron으로 데스크탑 앱 만들기: 웹 기술로 다양한 플랫폼을 정복하다 (0) | 2024.12.13 |
Nuxt에서 포트 고정값으로 설정하기 (0) | 2024.12.12 |
Nuxt.js 프로젝트 생성 (0) | 2024.12.12 |