Vue 3.0 - Compute vs Watch ์ฐจ์ด

JungSik Heoยท2023๋…„ 1์›” 14์ผ

Vue 3.0 ๊ฐ•์˜

๋ชฉ๋ก ๋ณด๊ธฐ
21/29

๐Ÿ“Œ Computed? Watch?

Computed ์‚ฌ์šฉ๋ฒ•

<template>
  <h1> Full Name : {{ fullName }} </h1>
</template>

<script>
  export default {
    data() {
      return {
        firstName: 'SungJae',
        lastName: 'Park'
      }
    },
    computed: {
      fullName() {
        return this.firstName + '' + this.lastName;
      }
    }
  }
</script>

Computed ๋‚ด์— fullName์ด ์ •์˜๋˜์–ด ์žˆ๊ณ , firstName๊ณผ lastName์„ ํ•ฉ์ณ์„œ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜๋กœ ์ •์˜๋˜์–ด ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํ•จ์ˆ˜ ๋ช…์ธ fullName์€ ํ•จ์ˆ˜์ด์ž ๋™์‹œ์—, Vue ์ธ์Šคํ„ด์Šค ๋ฐ์ดํ„ฐ ํ‚ค ๊ฐ’์ด๋‹ค. firstName, lastName์„ Vue ์ธ์Šคํ„ด์Šค์˜ ๋ฐ์ดํ„ฐ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ๊ฐ’์œผ๋กœ ์„ ์–ธ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

Computed๋Š” ๋ฐ์ดํ„ฐ ๊ฐ’์— ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜๋Š”์ง€ ๊ฐ์‹œํ•œ๋‹ค๊ณ  ํ–ˆ๋‹ค. Computed๋กœ ์ •์˜ํ•˜๋ฉด fullName ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜์–ด ๋ฐ์ดํ„ฐ fullName์— firstName๊ณผ lastName์„ ํ•ฉํ•œ ๊ฐ’์ด ํ• ๋‹น๋œ๋‹ค.

firstName ํ˜น์€ lastName ๊ฐ’ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜๋ฉด fullName ํ•จ์ˆ˜๊ฐ€ ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜๊ณ , fullName ๊ฐ’์ด ๊ฒฝ์‹ ๋œ๋‹ค. ์ •๋ฆฌํ•ด๋ณด๋ฉด, computed์— ์ •์˜๋œ fullName์€ ํ•จ์ˆ˜์ด์ž ๋™์‹œ์— Vue ์ธ์Šคํ„ด์Šค์˜ ๋ฐ์ดํ„ฐ์ด๋‹ค. computed์— ์ •์˜ํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ํ™”๋ฉด ๋‚ด ์—ฌ๋Ÿฌ ๊ณณ์—์„œ fullName์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ์ด์— ๋Œ€ํ•œ ์—ฐ์‚ฐ์€ ํ•œ ๋ฒˆ ๋ฐ–์— ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค.

โœ… Watch

<template>
  <div>
    <h1>FullName : {{ fullName }}</h1>
    <button type="button" @click="changeName">๋ณ€๊ฒฝ</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      firstName: "SungJae",
      lastName: "Park",
      fullName: "",
    };
  },
  watch: {
    firstName() {
      this.fullName = this.firstName + "" + this.lastName;
    },
    lastName() {
      this.fullName = this.firstName + "" + this.lastName;
    },
  },
  methods: {
    changeName() {
      this.firstName = "SON7AE";
    },
  },
};
</script>

Watch ์—ญ์‹œ computed์ฒ˜๋Ÿผ Vue ์ธ์Šคํ„ด์Šค์— ์ •์˜๋œ ๋ฐ์ดํ„ฐ ๊ฐ’์ด ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜๋Š”์ง€๋ฅผ ๊ฐ์‹œํ•˜๊ณ , ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜๋ฉด ์ง€์ •๋œ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ computed์˜ ๊ฒฝ์šฐ๋Š” ๊ธฐ์กด์— ์ •์˜๋œ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ๊ฐ’์„ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ด ๋œ๋‹ค๋ฉด, Watch๋Š” Watch์— ์ •์˜๋œ ๋ฐ์ดํ„ฐ ๊ฐ’ ํ•˜๋‚˜๋งŒ์„ ๊ฐ์‹œํ•˜๊ธฐ ์œ„ํ•œ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

๋˜ํ•œ Watch์˜ ๊ฒฝ์šฐ๋Š” computed์™€ ๋‹ค๋ฅด๊ฒŒ ์‹ค์ œ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜๊ธฐ ์ „๊นŒ์ง€๋Š” ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.

์ฆ‰, ์ดˆ๊ธฐ์— ์ง€์ •๋œ ๊ฐ’์ธ firstName๊ณผ lastName์— ๊ฐ’์ด ์žˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , fullName์€ ์—ฌ์ „ํžˆ ์•„๋ฌด๋Ÿฐ ๊ฐ’๋„ ํ• ๋‹น๋˜์ง€ ์•Š๋Š”๋‹ค. firstName๊ณผ lastName์˜ ์ดˆ๊ธฐ์— ํ• ๋‹น๋œ ๊ฐ’์ด ๋ฐ˜๋“œ์‹œ ๋ณ€๊ฒฝ๋˜์–ด์•ผ์ง€๋งŒ, ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜์•ผ๋งŒ watch๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

profile
์ฟต์Šค๋ณด์ด(์–ผ์งฑ๋ฎค์ง€์…˜)

0๊ฐœ์˜ ๋Œ“๊ธ€