# computed API Vue 3

์ปดํ“จํ‹ฐ๋“œ(computed) API๋Š” ์ปดํฌ์ง€์…˜(Composition API)์—์„œ ์‚ฌ์šฉ๋œ ์ปดํ“จํ‹ฐ๋“œ ์†์„ฑ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด ํŽ˜์ด์ง€์—์„œ๋Š” ์ปดํฌ์ง€์…˜์—์„œ ์ปดํ“จํ‹ฐ๋“œ ์†์„ฑ์„ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

TIP

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

# computed API ์†Œ๊ฐœ

์ธ์Šคํ„ด์Šค ์˜ต์…˜ ์†์„ฑ ๋ฐฉ์‹์œผ๋กœ ์ž‘์„ฑํ•œ ์ปดํ“จํ‹ฐ๋“œ ์†์„ฑ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

<template>
  <div>{{ reversedMessage }}</div>
</template>

<script>
export default {
  data() {
    return {
      message: 'Hello'
    }
  },
  computed: {
    reversedMessage() {
      return this.message.split('').reverse().join('');
    }
  }
}
</script>

์œ„ ์ฝ”๋“œ๋Š” ์ปดํ“จํ‹ฐ๋“œ ์†์„ฑ์„ ์‚ฌ์šฉํ•ด Hello ๋ฌธ์ž์—ด์˜ ์ˆœ์„œ๋ฅผ ๋’ค์ง‘์–ด olleH๋กœ ํ™”๋ฉด์— ํ‘œ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ๋ฅผ ์ปดํฌ์ง€์…˜ ์Šคํƒ€์ผ๋กœ ์ž‘์„ฑํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

<template>
  <div>{{ reversedMessage }}</div>
</template>

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

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

    // computed
    const reversedMessage = computed(() => {
      return message.value.split('').reverse().join('');
    });

    return { reversedMessage }
  }
} 
</script>

์ปดํฌ์ง€์…˜์—์„œ ์ปดํ“จํ‹ฐ๋“œ ์†์„ฑ์„ ์“ฐ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋จผ์ € ์œ„์™€ ๊ฐ™์ด computed API๋ฅผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ž„ํฌํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์œ„ reversedMessage ํ•จ์ˆ˜๊ฐ€ ์„ ์–ธ๋œ ๊ฒƒ์ฒ˜๋Ÿผ computed API๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์•ˆ์— ์ฝœ๋ฐฑ์œผ๋กœ ์ปดํ“จํ‹ฐ๋“œ ์†์„ฑ์œผ๋กœ ์ •์˜๋  ๊ฐ’์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ์ธ์Šคํ„ด์Šค ์˜ต์…˜ ์†์„ฑ์œผ๋กœ ์ž‘์„ฑํ•œ ์ฝ”๋“œ์™€ ํฌ๊ฒŒ ๋‹ค๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ, message.split().... ํ˜•ํƒœ๊ฐ€ ์•„๋‹ˆ๋ผ message.value.split()...์™€ ๊ฐ™์ด message.value ๊ฐ’์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

TIP

์™œ ref๋กœ ์„ ์–ธ๋œ ๊ฐ’์€ setup ํ•จ์ˆ˜ ์•ˆ์—์„œ .value๋กœ ์ ‘๊ทผํ•ด์•ผ ํ• ๊นŒ์š”? ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š” ๐Ÿ˜ƒ ์ปดํฌ์ง€์…˜์˜ .value

# ์šฉ์–ด ์ •๋ฆฌ

  • ์ปดํ“จํ‹ฐ๋“œ ์†์„ฑ : Vue 2์—์„œ ์‚ฌ์šฉํ•˜๋˜ ์ปดํ“จํ‹ฐ๋“œ ์†์„ฑ
  • ์ปดํ“จํ‹ฐ๋“œ API : ์ปดํฌ์ง€์…˜ ์Šคํƒ€์ผ๋กœ ์ž‘์„ฑ๋œ setup ์•ˆ์—์„œ์˜ ์ปดํ“จํ‹ฐ๋“œ ์†์„ฑ