안녕하세요, 코딩하는곰입니다! 😊
오늘은 Vue 3의 혁신적인 기능인 Composition API에 대해 깊이 있게 알아보려고 합니다.
20년 넘게 Vue.js와 Angular를 다루어 온 저의 경험을 바탕으로, Composition API가 기존 Options API와 어떻게 다른지,
왜 함수 기반 구조가 더 효율적인지 실제 코드 예제와 함께 상세히 설명드리겠습니다.
초보자부터 중급자까지 모두 이해할 수 있도록 차근차근 풀어보겠습니다!
Vue 3에서 도입된 Composition API는 대규모 애플리케이션에서 발생하는 코드 조직화 문제를 해결하기 위해 설계되었습니다.
기존 Options API는 컴포넌트 로직을 props, data, methods 등 미리 정의된 옵션으로 분할하여 작성해야 했는데,
이로 인해 관련 로직이 서로 다른 옵션 사이에 흩어지는 “코드 분산” 현상이 발생했습니다.
// Options API 예시 (문제점)export default {data() {return { count: 0 }},methods: {increment() { this.count++ }},mounted() {console.log('카운트 초기값:', this.count)}}
반면 Composition API는 관련 로직을 함수 단위로 묶어 작성할 수 있습니다.
이를 통해 얻는 주요 이점은 다음과 같습니다:
모든 Composition API 코드는 setup() 함수 내에서 작성됩니다.
이 함수는 컴포넌트가 생성되기 전에 실행되며, props와 context를 매개변수로 받습니다.
import { ref } from 'vue'export default {setup(props, context) {const count = ref(0) // 반응형 변수 생성function increment() {count.value++ // .value로 접근}return { count, increment } // 템플릿에 노출}}
ref(): 기본 타입(숫자, 문자열 등)에 사용. .value로 접근 reactive(): 객체에 사용. 자동으로 깊은 반응성 적용 import { ref, reactive } from 'vue'setup() {const user = reactive({name: '곰돌이',age: 20})const score = ref(100)return { user, score }}
인터넷을 사용할 때 우리가 사용하는 IP는 생각보다 많은 정보를 담고 있습니다. 아이피 기반 위치 조회로 간단히 알아볼 수 있습니다.
Options API의 mounted, updated 등을 onMounted, onUpdated로 대체:
import { onMounted, onUnmounted } from 'vue'setup() {onMounted(() => {console.log('컴포넌트 마운트 완료!')})onUnmounted(() => {console.log('컴포넌트 제거됨')})}
computed: 의존성 추적 자동화 watch: 특정 값 변경 감시 import { computed, watch } from 'vue'setup() {const doubleCount = computed(() => count.value * 2)watch(count, (newVal, oldVal) => {console.log(`카운트 변경: ${oldVal} → ${newVal}`)})}
계산할 때 이전 기록이 필요하다면, 계산 이력 기능이 있는 웹 계산기를 활용해보세요.
오늘은 Vue 3 Composition API의 기본 개념부터 실제 사용 패턴까지 자세히 살펴보았습니다.
처음에는 Options API에 비해 학습 곡선이 가파르게 느껴질 수 있지만,
일단 익숙해지면 더 유연하고 강력한 코드를 작성할 수 있다는 점을 꼭 기억해주세요!
다음 포스팅에서는 Composition API를 이용한 고급 상태 관리 기법에 대해 다룰 예정입니다.
궁금한 점이 있으시면 댓글로 남겨주세요! 여러분의 Vue 개발 여정을 항상 응원합니다. 🚀
코딩하는곰이었습니다! (´• ω •`)ノ
매일 두뇌 운동을 위한 스도쿠 게임이 필요하다면, 한국어 지원과 함께하는 스도쿠 저니를 다운로드하세요.
