컴포저블: 재사용 가능한 Composition 함수
반응형 로직을 use로 시작하는 컴포저블 함수로 추출해 여러 컴포넌트에서 공유하고, 믹스인과 어떻게 다른지 이해합니다.
컴포저블: 재사용 가능한 Composition 함수은(는) CoddyKit의 무료 Frontend Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Frontend Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Frontend Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
컴포저블이란 무엇입니까?
컴포저블은 Composition API 훅을 사용하여 상태를 가진 로직을 캡슐화하고 재사용하는 함수입니다. 이름 공간 충돌이나 숨은 의존성 없이 믹스인의 역할을 대신하는 Composition API 방식이라고 할 수 있습니다.
기본 컴포저블
반응형 로직을 use로 시작하는 함수로 추출하십시오. setup()과 마찬가지로 ref, computed, watch, 생명주기 훅을 사용할 수 있습니다.
// useCounter.ts
import { ref } from 'vue';
export function useCounter(initial = 0) {
const count = ref(initial);
const increment = () => count.value++;
const decrement = () => count.value--;
const reset = () => (count.value = initial);
return { count, increment, decrement, reset };
}
// Usage in any component:
const { count, increment } = useCounter(10);생명주기 훅을 사용하는 컴포저블
컴포저블은 생명주기 훅을 등록할 수 있습니다. 훅은 해당 컴포저블을 호출한 구성 요소를 기준으로 실행됩니다.
// useOnlineStatus.ts
import { ref, onMounted, onUnmounted } from 'vue';
export function useOnlineStatus() {
const isOnline = ref(navigator.onLine);
const update = () => (isOnline.value = navigator.onLine);
onMounted(() => {
window.addEventListener('online', update);
window.addEventListener('offline', update);
});
onUnmounted(() => {
window.removeEventListener('online', update);
window.removeEventListener('offline', update);
});
return { isOnline };
}비동기 기능이 있는 컴포저블(useFetch)
컴포저블은 비동기 데이터 가져오기에 매우 유용하며, 로딩·오류·데이터 패턴을 캡슐화할 수 있습니다.
// useFetch.ts
export function useFetch<T>(url: MaybeRef<string>) {
const data = ref<T | null>(null);
const loading = ref(true);
const error = ref<string | null>(null);
watchEffect(async (onCleanup) => {
const controller = new AbortController();
onCleanup(() => controller.abort());
loading.value = true;
error.value = null;
try {
const res = await fetch(unref(url), { signal: controller.signal });
data.value = await res.json();
} catch (e: any) {
if (e.name !== 'AbortError') error.value = e.message;
} finally { loading.value = false; }
});
return { data, loading, error };
}매개변수로 Ref 받기
컴포저블은 MaybeRef<T>(= T | Ref<T>)와 unref()를 사용하여 일반 값이나 ref를 인수로 받을 수 있습니다.
import type { MaybeRef } from 'vue';
import { unref } from 'vue';
function useDouble(num: MaybeRef<number>) {
return computed(() => unref(num) * 2);
}컴포저블과 믹스인 비교
믹스인은 명확한 출처 없이 속성을 구성 요소에 주입합니다. 컴포저블은 명시적이므로 반환 값에서 어떤 것을 제공하는지 정확히 알 수 있습니다. 여러 컴포저블을 이름 충돌 없이 사용할 수 있습니다.
구성 요소 간 상태 공유
컴포저블 내부에서 ref()를 호출하면 해당 컴포저블을 호출하는 각 구성 요소가 고유한 상태를 갖습니다. 구성 요소 간에 상태를 공유하려면 모듈 범위(컴포저블 함수 외부)에서 ref()를 호출하십시오.
// Shared state (module-level):
const sharedCount = ref(0);
export function useSharedCounter() {
// All callers share the same sharedCount
return { count: sharedCount, increment: () => sharedCount.value++ };
}컴포저블 라이브러리
VueUse(vueuse.org)는 useLocalStorage, useFetch, useDark, useIntersectionObserver 등 바로 사용할 수 있는 컴포저블을 200개 이상 제공합니다. 처음부터 직접 작성하기 전에 항상 VueUse를 확인하십시오.
컴포저블 테스트
작은 테스트 구성 요소 내부에서 컴포저블을 호출하거나 @vue/test-utils의 mountedApp 패턴을 사용하여 컴포저블을 테스트하십시오. Vitest는 Vue의 반응성 시스템과 잘 통합됩니다.
컴포저블 이름 지정 규칙
항상 use를 접두사로 사용하십시오(useAuth, useFetch, useMediaQuery). 하나의 관심사에 집중하도록 유지하십시오. 서로 관련 없는 작업을 지나치게 많이 수행하는 컴포저블은 피하십시오.
컴포저블 구성
composables/ 폴더를 만드십시오. 컴포저블마다 파일 하나를 사용합니다. 인덱스 파일에서 모든 컴포저블을 다시 내보냅니다. 이는 React 프로젝트에서 사용자 지정 훅을 구성하는 방식과 비슷합니다.
빠른 확인
Vue 믹스인에 비해 컴포저블이 갖는 핵심적인 장점은 무엇입니까?
복습: Vue 컴포저블
컴포저블은 Composition API 훅을 호출하는 use 접두사 함수입니다. 모듈 수준 ref를 사용하지 않는 한 호출할 때마다 독립적인 상태를 얻습니다. MaybeRef와 unref를 사용하여 ref나 값을 받을 수 있습니다. 컴포저블 내부에서 생명주기 훅을 등록하십시오. 직접 작성하기 전에 VueUse를 확인하십시오. 명시적인 반환 값은 믹스인 방식의 이름 공간 오염을 방지합니다.
자주 묻는 질문
“컴포저블: 재사용 가능한 Composition 함수” 강의는 무료인가요?
네 — “컴포저블: 재사용 가능한 Composition 함수” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Frontend Academy 강의 전체를 잠금 해제할 수 있습니다. Frontend Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“컴포저블: 재사용 가능한 Composition 함수”에서 뭘 배우나요?
반응형 로직을 use로 시작하는 컴포저블 함수로 추출해 여러 컴포넌트에서 공유하고, 믹스인과 어떻게 다른지 이해합니다. 브라우저에서 직접 실행하는 실습 코드로 Frontend Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Frontend Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Frontend Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“컴포저블: 재사용 가능한 Composition 함수” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Frontend Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Frontend Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- ref()와 reactive()
- computed()와 watch()
- setup() 함수와 script setup
- 컴포저블: 재사용 가능한 Composition 함수