# <script setup> Vue 3

์Šคํฌ๋ฆฝํŠธ ์…‹์—…(script setup)์€ ์ปดํฌ์ง€์…˜(Composition API)์„ ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋ฌธ๋ฒ•์ž…๋‹ˆ๋‹ค.

# setup() ์†์„ฑ๊ณผ <script setup> ๋น„๊ต

์ปดํฌ๋„ŒํŠธ์—์„œ ์ธ์Šคํ„ด์Šค ์˜ต์…˜ ์†์„ฑ์œผ๋กœ ์ปดํฌ์ง€์…˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด setup() ์†์„ฑ์„ ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.










ย 













<template>
  <div>{{ message }}</div>
  <button @click="changeMessage">๋ณ€๊ฒฝ</button>
</template>

<script>
import { ref } from 'vue';

export default {
  setup() {
    // data
    const message = ref('Hello');

    // methods
    function changeMessage() {
      message.value = 'Hi';
    }

    return { message, changeMessage }
  }
} 
</script>

์œ„์™€ ๊ฐ™์ด ์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ ์ปดํฌ์ง€์…˜์œผ๋กœ๋งŒ ์ปดํฌ๋„ŒํŠธ์˜ ๋กœ์ง์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์ด ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ์— setup์„ ์ถ”๊ฐ€ํ•ด์„œ ์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.






ย 











<template>
  <div>{{ message }}</div>
  <button @click="changeMessage">๋ณ€๊ฒฝ</button>
</template>

<script setup>
import { ref } from 'vue';

// data
const message = ref('Hello');

// methods
function changeMessage() {
  message.value = 'Hi';
}
</script>

์ด ์ฝ”๋“œ๋Š” ์•ž์—์„œ ์‚ดํŽด๋ณธ ์ฝ”๋“œ์™€ ๊ฐ™์€ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ๋ฐ˜์‘์„ฑ์ด ์ฃผ์ž…๋œ message ๋ฐ์ดํ„ฐ์™€ changeMessage() ํ•จ์ˆ˜๋Š” ๋ณ„๋„๋กœ ์ต์ŠคํฌํŠธํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€์ ์ธ ์ž‘์—…์„ ํ•˜์ง€ ์•Š์•„๋„ ํ…œํ”Œ๋ฆฟ ํ‘œํ˜„์‹์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. setup() ์†์„ฑ์„ ์ •์˜ํ•˜๋ฉด ๋งค๋ฒˆ ๊ทธ ์•ˆ์—์„œ ์ •์˜๋œ ๋ฐ์ดํ„ฐ์™€ ๋ฉ”์„œ๋“œ ๋“ฑ์€ ๋ฐ˜ํ™˜ํ•ด์ค˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฒˆ๊ฑฐ๋กœ์šด ์ ˆ์ฐจ๋ฅผ ์ค„์—ฌ์ค€ ๊ฒƒ์ด์ฃ .

# ์ฃผ์˜ํ•  ์ 

<script setup>์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋ฐ˜์‘์„ฑ์ด ์ฃผ์ž…๋œ ๋ฐ์ดํ„ฐ์™€ ๊ทธ๋ ‡์ง€ ์•Š์€ ์ผ๋ฐ˜ ๋ณ€์ˆ˜๋ฅผ ์ž˜ ๊ตฌ๋ถ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•ฉ์‹œ๋‹ค.

<template>
  <div>{{ message }}</div>
  <button @click="changeMessage">๋ณ€๊ฒฝ</button>
</template>

<script setup>
let message = 'Hello';

function changeMessage() {
  message = 'Hi';
}
</script>

์œ„ ์ฝ”๋“œ์—์„œ message ๋ณ€์ˆ˜๋Š” ๋ฐ˜์‘์„ฑ์ด ์ฃผ์ž…๋˜์ง€ ์•Š์€ ์ผ๋ฐ˜ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค. let์œผ๋กœ ์„ ์–ธ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์ฃ . ๋ณ€๊ฒฝ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ changeMessage ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋ฉด message ๊ฐ’์„ Hello๋กœ ๋ฐ”๊ฟ€ ๊ฒ๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ๋ณด๋ฉด ์Šคํฌ๋ฆฝํฌ ๋ ˆ๋ฒจ์—์„œ๋Š” message์˜ ๊ฐ’์ด ๋ฐ”๋€Œ์ง€๋งŒ ํ™”๋ฉด์—๋Š” ๋ฐ”๋€ ๊ฐ’์ด ํ‘œ์‹œ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋™์ž‘ํ•˜๋Š” ์ด์œ ๋Š” message ๊ฐ’์— ๋ฐ˜์‘์„ฑ์ด ์ฃผ์ž…๋˜์ง€ ์•Š๊ณ  ์ผ๋ฐ˜ ๋ณ€์ˆ˜๋กœ ์ทจ๊ธ‰๋œ ์ƒํƒœ์—์„œ ํ…œํ”Œ๋ฆฟ ํ‘œํ˜„์‹์— ํ‘œ์‹œ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํ•จ์ˆ˜๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜์—ˆ์ง€๋งŒ ํ™”๋ฉด์˜ ๊ฐ’์€ ๋ฐ”๋€Œ์ง€ ์•Š์ฃ .

๋งŒ์•ฝ ๊ฐ’์ด ๋ฐ”๋€Œ์—ˆ์„ ๋•Œ ๋ฐ˜์‘์„ฑ์— ์˜ํ•ด ์ •์ƒ์ ์œผ๋กœ ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ํ™”๋ฉด์— ํ‘œ์‹œํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

<script setup>
import { ref } from 'vue';

const message = ref('Hi')

function changeMessage() {
  message.value = 'Hello'
}
</script>

์ด์ฒ˜๋Ÿผ <script setup>์„ ๋‹ค๋ฃฐ ๋•Œ๋Š” ๋ฐ˜์‘์„ฑ์ด ์ฃผ์ž…๋œ ๋ฐ์ดํ„ฐ์™€ ๊ทธ๋ ‡์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ž˜ ๊ตฌ๋ถ„ํ•ด ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

TIP

์ปดํฌ์ง€์…˜์—์„œ ๋ฐ˜์‘์„ฑ์ด ์ฃผ์ž…๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ๋Š” ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ let์ด ์•„๋‹Œ const๋กœ ์„ ์–ธํ•˜์—ฌ ์ œ์–ดํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด const๋Š” ํ•œ๋ฒˆ ์„ ์–ธํ•˜๋ฉด ๊ฐ’์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†์ง€๋งŒ let์€ ์„ ์–ธํ•œ ์ดํ›„์—๋„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ref์™€ ๊ฐ™์ด ๋ฐ˜์‘์„ฑ์„ ์ฃผ์ž…ํ•˜๋Š” API์˜ ํŠน์ง•์€ ์„ ์–ธํ•œ ๋ณ€์ˆ˜์ด ๊ฐ’์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋‚ด์žฅ๋œ .value์˜ ๊ฐ’์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, let์„ ์“ฐ๋Š” ๊ฒƒ๋ณด๋‹ค const๋ฅผ ์“ฐ๋Š”๊ฒŒ ๋” ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค ๐Ÿ˜ƒ