완벽하게 Vue.js

[Vue.js][Ch2][Vue 문법] Computed 캐싱

써치킴 2022. 3. 1. 04:19
<template>
  <h1>{{ msg + '??' }}</h1>
  <h1>{{ msg.split('').reverse().join('') }}</h1>
  <h1>{{ msg.split('').reverse().join('') }}</h1>
  <h1>{{ msg.split('').reverse().join('') }}</h1>
  <h1>{{ msg.split('').reverse().join('') }}</h1>
</template>

<script>
export default {
  data() {
    return {
      msg: 'Hello Computed!'
    }
  }
}
</script>

<h1>{{ msg.split('').reverse().join('') }}</h1> 를 반복 선언하는 건 비효율적이다.

<template>
  <h1>{{ msg + '??' }}</h1>
  <h1>{{ reverseMessage() }}</h1>
  <h1>{{ reverseMessage() }}</h1>
  <h1>{{ reverseMessage() }}</h1>
  <h1>{{ reverseMessage() }}</h1>
</template>

<script>
export default {
  data() {
    return {
      msg: 'Hello Computed!'
    }
  },
  methods: {
    reverseMessage() {
      return this.msg.split('').reverse().join('');
    }
  }
}
</script>

 method를 사용해서 대체할 수도 있지만, 마찬가지로 함수를 계속 실행되어야 한다.

=> 로직이 네번을 반복 동작하는 것은 똑같다.

<template>
  <h1>{{ msg + '??' }}</h1>
  <h1>{{ reversedMessage }}</h1>
  <h1>{{ reversedMessage }}</h1>
  <h1>{{ reversedMessage }}</h1>
  <h1>{{ reversedMessage }}</h1>
</template>

<script>
export default {
  data() {
    return {
      msg: 'Hello Computed!'
    }
  },
  computed: {
    // 메소드처럼 만들었지만 계산된 데이터이다.
    reversedMessage() {
      return this.msg.split('').reverse().join('');
    }
  },
  methods: {
    reverseMessage() {
      return this.msg.split('').reverse().join('');
    }
  }
}
</script>

computed는 캐싱이라는 기능이 있기 때문에 한번 연산된 값은 다시 연산하지 않는다.
=> 반복 사용에 부담이 적다.