Vue.js 를 배워보자/2. Vue.js 기본 개념

데이터 계산 속성

_Blue_Sky_ 2024. 10. 4. 18:34
728x90
728x90

Vue.js 데이터 계산 속성: 심층 다이빙 가이드

소개

Vue.js의 데이터 계산 속성(computed property)은 템플릿에서 자주 사용되는 표현식을 미리 계산하여 저장하고, 필요에 따라 재사용할 수 있도록 해주는 강력한 기능입니다. 이는 복잡한 논리 연산이나 반복적인 계산을 템플릿에서 직접 수행하는 대신, 계산 속성에 위임하여 코드를 깔끔하게 유지하고 성능을 향상시킬 수 있도록 돕습니다.

왜 데이터 계산 속성이 필요할까?

  • 템플릿 간결화: 복잡한 표현식을 계산 속성으로 분리하여 템플릿 코드를 간결하고 가독성 있게 만들 수 있습니다.
  • 성능 향상: 계산 결과를 캐싱하여 불필요한 재계산을 방지하고, 템플릿 렌더링 성능을 향상시킬 수 있습니다.
  • 데이터 변화 반응: 의존하는 데이터가 변경될 때 자동으로 계산 결과를 업데이트하여 항상 최신 상태를 유지합니다.
  • 재사용성: 한 번 정의한 계산 속성을 여러 곳에서 재사용하여 코드 중복을 줄일 수 있습니다.
728x90

데이터 계산 속성 사용법

<template>
  <div>
    <p>총 상품 가격: {{ totalPrice }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { name: 'item1', price: 1000 },
        { name: 'item2', price: 2000 }
      ]
    }
  },
  computed: {
    totalPrice() {
      return this.items.reduce((total, item) => total + item.price, 0)
    }
  }
}
</script>
 

위 예시에서 totalPrice는 계산 속성입니다. items 배열의 모든 price 값을 합산하여 총 가격을 계산하고, 템플릿에서 {{ totalPrice }}로 바로 사용할 수 있습니다.

데이터 계산 속성의 특징

  • Getter 함수: 계산 속성은 기본적으로 getter 함수로 동작하며, 값을 읽을 때 호출됩니다.
  • 의존성 추적: 계산 속성은 사용된 데이터를 자동으로 추적하여, 의존하는 데이터가 변경될 때만 재계산됩니다.
  • 캐싱: 계산 결과를 메모리에 저장하여 불필요한 재계산을 방지합니다.
  • 반응성: 템플릿에서 계산 속성을 사용하면 데이터가 변경될 때마다 뷰가 자동으로 업데이트됩니다.

계산 속성과 메서드의 차이점

목적 데이터 계산 결과 캐싱 일반적인 함수 실행
호출 시점 데이터가 변경되거나 템플릿에서 참조될 때 메서드를 직접 호출할 때
반응성 자동 수동
캐싱 O X

계산 속성 활용 시 주의사항

  • 복잡한 로직: 너무 복잡한 로직은 계산 속성보다는 별도의 메서드로 분리하는 것이 좋습니다.
  • 비동기 작업: 비동기 작업은 계산 속성에서 직접 처리하기 어려우므로, watch 옵션이나 asyncComputed 라이브러리를 활용해야 합니다.
  • 성능 고려: 많은 데이터를 처리하는 경우 성능 저하가 발생할 수 있으므로, 필요에 따라 성능 최적화를 고려해야 합니다.

심화: 수정 가능한 계산 속성

일반적으로 계산 속성은 읽기 전용이지만, 특별한 경우 setter 함수를 추가하여 값을 수정할 수 있습니다.

computed: {
  reversedMessage: {
    get() {
      return this.message.split('').reverse().join('')
    },
    set(value) {
      this.message = value.split('').reverse().join('')
    }
  }
}
 

결론

Vue.js의 데이터 계산 속성은 템플릿 로직을 간결하게 만들고, 성능을 향상시키는 데 매우 유용한 기능입니다. 계산 속성을 적절히 활용하여 더욱 효율적인 Vue.js 애플리케이션을 개발할 수 있습니다.

 

728x90
728x90

'Vue.js 를 배워보자 > 2. Vue.js 기본 개념' 카테고리의 다른 글

컴포넌트 생성 및 사용  (0) 2024.10.04
데이터 감시자  (0) 2024.10.04
데이터 선언 및 변경  (0) 2024.10.04
템플릿 이벤트 바인딩  (0) 2024.10.04
템플릿 조건문, 반복문  (0) 2024.10.04