# [[Composition API]] ## ๐Ÿ“Œ Brief Summary Vue 3 Composition API๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ์˜ต์…˜(`data`, `methods`, `computed` ๋“ฑ)์ด ์•„๋‹Œ '๋…ผ๋ฆฌ์  ๊ด€์‹ฌ์‚ฌ(Logical concerns)'๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ์กฐ์งํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์ด๋‹ค [1]. ๋ฐ˜์‘ํ˜• ์›์‹œ ํƒ€์ž…(`ref`, `reactive`)๊ณผ ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ƒํƒœ์™€ ๋กœ์ง์„ ์บก์Аํ™”ํ•˜๊ณ  ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ ๋งŒ๋“ ๋‹ค [1]. ๊ธฐ์กด์˜ Options API์— ๋น„ํ•ด ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ์˜ ํ™•์žฅ์„ฑ, ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ, ๊ทธ๋ฆฌ๊ณ  TypeScript์™€์˜ ๋›ฐ์–ด๋‚œ ํ˜ธํ™˜์„ฑ์„ ์ œ๊ณตํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•œ๋‹ค [2-4]. ## ๐Ÿ“– Core Content * **๋ฐ˜์‘ํ˜• ์ƒํƒœ ๊ด€๋ฆฌ (Reactive State Management)**: `ref()`์™€ `reactive()` ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋ฐ˜์‘ํ˜• ์ƒํƒœ๋ฅผ ์„ ์–ธํ•œ๋‹ค. `ref()`๋Š” ์›์‹œ ๊ฐ’๊ณผ ๊ฐ์ฒด๋ฅผ ๋ชจ๋‘ ์ง€์›ํ•˜๋ฉฐ `.value` ์†์„ฑ์„ ํ†ตํ•ด ์ ‘๊ทผํ•˜๊ณ , `reactive()`๋Š” ์ฃผ๋กœ ๋ณต์žกํ•œ ๊ฐ์ฒด๋‚˜ ๋ฐฐ์—ด์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ๋‹ค [5, 6]. ๋‚ด์žฌ๋œ ํ•œ๊ณ„๋กœ ์ธํ•ด ์œ ์—ฐ์„ฑ์„ ๊ฐ–์ถ˜ `ref()`๋ฅผ ๋ฐ˜์‘ํ˜• ์ƒํƒœ ์„ ์–ธ์˜ ์ฃผ์š” API๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข…์ข… ๊ถŒ์žฅ๋œ๋‹ค [6]. * **์ปดํฌ์ €๋ธ” (Composables)**: ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ ๊ธฐ๋ฐ˜ ๋กœ์ง์„ ์บก์Аํ™”ํ•œ ํ•จ์ˆ˜๋กœ, Composition API ์žฌ์‚ฌ์šฉ์„ฑ์˜ ์ดˆ์„์ด๋‹ค [7, 8]. ๊ณผ๊ฑฐ Vue 2์˜ Mixins ํŒจํ„ด์ด ์ดˆ๋ž˜ํ•˜๋˜ ๋„ค์ด๋ฐ ์ถฉ๋Œ์ด๋‚˜ ๋ฐ์ดํ„ฐ ์ถœ์ฒ˜๊ฐ€ ๋ถˆ๋ถ„๋ช…ํ•ด์ง€๋Š” ๋ฌธ์ œ๋ฅผ '์ƒ์† ๋Œ€์‹  ํ•ฉ์„ฑ(Composition over Inheritance)'์ด๋ผ๋Š” ์ ‘๊ทผ๋ฒ•์„ ํ†ตํ•ด ํˆฌ๋ช…ํ•˜๊ณ  ํƒ€์ž… ์•ˆ์ „ํ•˜๊ฒŒ ํ•ด๊ฒฐํ•œ๋‹ค [9]. * **๋…ผ๋ฆฌ์  ๊ด€์‹ฌ์‚ฌ ๊ทธ๋ฃนํ™”**: ๊ธฐ์กด Options API์—์„œ๋Š” ๋‹จ์ผ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋กœ์ง์ด `data`, `methods`, `computed` ๊ณณ๊ณณ์— ํฉ์–ด์ ธ ์žˆ์—ˆ์œผ๋‚˜, Composition API๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ด€๋ จ๋œ ๋ชจ๋“  ๋กœ์ง์„ ํ•œ ๊ณณ์— ๋ฐ€์ง‘์‹œํ‚ฌ ์ˆ˜ ์žˆ์–ด ๊ฐ€๋…์„ฑ๊ณผ ์ถ”์ ์„ฑ์ด ํ–ฅ์ƒ๋œ๋‹ค [10, 11]. * **`