본문 바로가기

Frontend/Vue3

[Vue3] Computed Property

728x90
반응형

computed()

: 계산된 속성을 정의하는 함수.

미리 계산된 속성을 사용하여 템플릿에서 표현식을 단순하게 하고 불필요한 반복 연산을 줄인다.

 

computed를 적용하지 않을 경우

- 템플릿이 복잡히지며 todos에 따라 계산을 수행하게 된다.

- 이 계산을 템플릿에 여러 번 사용하는 경우에 반복이 발생한다.

<body>
    <div id="app">
      <h2>남은 할 일</h2>
      <p>{{ todos.length > 0 ? "아직 남았다" : "퇴근!" }}</p>
    </div>

    <script>
      const { createApp, ref } = Vue

      const app = createApp({
        setup() {
          const todos = ref([
            { text: "Vue 실습" },
            { text: "자격증 공부" },
            { text: "TIL 작성" },
            { text: "출결 체크" },
            { text: "1일 1알고" },
          ])

          return {
            todos,
          }
        },
      })

      app.mount("#app")
    </script>
  </body>

 

computed 적용

- 반응성 데이터를 포함하는 복잡한 로직의 경우 computed를 활용하여 미리 값을 계산

<body>
    <div id="app">
      <h2>남은 할 일</h2>
      <p>{{ restOfTodos }}</p>
    </div>

    <script>
      const { createApp, ref, computed } = Vue

      const app = createApp({
        setup() {
          let id = 0
          const todos = ref([
            { text: "Vue 실습" },
            { text: "자격증 공부" },
            { text: "TIL 작성" },
            { text: "출결 체크" },
            { text: "1일 1알고" },
          ])

          const restOfTodos = computed(() => {
            return todos.value.length > 0 ? '아직 남았다' : '퇴근!'
          })

          return {
            todos, restOfTodos
          }
        },
      })

      app.mount("#app")
    </script>
  </body>

 

computed 특징

- 반환되는 값은 computed ref이며 일반 ref와 유사하게 계산된 결과를 .value로 참조할 수 있다. (템플릿에서는 .value 생략 가능)

- computed 속성은 의존된 반응형 데이터를 자동으로 추적한다.

- 의존하는 데이터가 변경될 때만 재평가

-> restOfTodos 계산은 todos에 의존하므로 todos가 변경될 때만 restOfTodos가 업데이트된다.

Computed vs Methods

computed 속성 대신 method로도 동일한 기능을 정의할 수 있다. 두 가지 접근 방식은 실제로 완전히 동일하다.

<body>
    <div id="app">
      <h2>남은 할 일</h2>
      <p>{{ getRestOfTodos() }}</p>
    </div>

    <script>
      const { createApp, ref } = Vue

      const app = createApp({
        setup() {
          let id = 0
          const todos = ref([
            { text: "Vue 실습" },
            { text: "자격증 공부" },
            { text: "TIL 작성" },
            { text: "출결 체크" },
            { text: "1일 1알고" },
          ])

          const getRestOfTodos = function() {
            return todos.value.length > 0 ? '아직 남았다' : '퇴근!'
          }

          return {
            todos, getRestOfTodos
          }
        },
      })

      app.mount("#app")
    </script>
  </body>

 

computed와 method의 차이

- computed: 의존된 반응형 데이터를 기반으로 캐시(cached) 된다. 의존하는 데이터가 변경된 경우에만 재평가되고, 의존된 반응형 데이터가 변경되지 않는 한 이미 계산된 결과에 대한 여러 참조는 다시 평가할 필요 없이 이전에 계산된 결과를 즉시 반환한다.

- method: 다시 렌더링이 발생할 때마다 항상 함수를 실행한다.

Cache(캐시)란?
- 데이터나 결과를 임시적으로 저장해두는 임시 저장소
- 이후에 같은 데이터나 결과를 다시 계산하지 않고 빠르게 접근할 수 있도록 함

 

computed와 method의 적절한 사용처

- computed: 의존하는 데이터에 따라 결과가 바뀌는 계산된 속성을 만들 때 유용하다.

- method: 단순히 특정 동작을 수행하는 함수를 정의할 때 사용한다.

728x90
반응형