[javascript] Vue.js의 반응성(Reactivity) 개념

Vue.js는 사용자 인터페이스를 구축하기 위한 프론트엔드 프레임워크로, 데이터와 UI를 연결하는 기능을 제공합니다. 이를 가능하게 하는 핵심 개념 중 하나가 ‘반응성(Reactivity)’입니다.

반응성이란, 데이터의 변화에 따라 자동으로 UI가 업데이트되는 메커니즘을 의미합니다. Vue.js에서는 데이터와 UI 사이의 종속성을 추적하고, 데이터가 변경되면 연결된 UI를 자동으로 업데이트합니다. 이는 개발자가 직접 UI를 관리하거나 업데이트하는 번거로움을 덜어줍니다.

Vue 인스턴스와 데이터

Vue.js 애플리케이션은 Vue 인스턴스를 생성하여 시작됩니다. 각 Vue 인스턴스는 데이터 객체를 가지며, 이 객체는 반응성을 가지고 있습니다. Vue 인스턴스의 데이터 속성에 접근하고 수정함으로써 반응성을 활용할 수 있습니다.

var vm = new Vue({
  data: {
    message: '안녕하세요!',
    count: 0
  }
})

위의 코드에서 messagecount는 Vue 인스턴스의 데이터 속성입니다. 이 속성들은 반응성을 가졌으므로, 값이 변경되면 연결된 UI가 자동으로 업데이트됩니다.

데이터 변경 감지와 UI 업데이트

Vue.js에서는 데이터 변경 감지를 위해 gettersetter를 사용합니다. 데이터 객체의 속성에 접근하면 getter 메소드가 호출되고, 속성의 값을 수정하면 setter 메소드가 호출됩니다. 이를 통해 데이터 속성의 변화를 감지하고, 연결된 UI를 업데이트할 수 있습니다.

// message 속성의 값 변경
vm.message = '반갑습니다!'

// count 속성의 값 증가
vm.count++

위의 코드에서 messagecount의 값 변경은 Vue.js에 의해 자동으로 감지되고, 연결된 UI가 업데이트됩니다.

데이터의 동적 반응성

Vue.js의 반응성은 단순한 데이터 속성뿐만 아니라, 객체와 배열 등의 복잡한 데이터 구조에도 적용됩니다. Vue는 객체 내부의 속성 변경이나 배열 요소의 추가/제거를 감지하고, UI를 동적으로 업데이트할 수 있습니다.

// 객체의 속성 변경 감지
vm.user.name = 'John'

// 배열에 요소 추가
vm.items.push('apple')

// 배열에서 요소 제거
vm.items.splice(0, 1)

위의 코드에서 user 객체의 name 속성 변경, items 배열에 요소 추가 및 제거는 Vue.js에 의해 자동으로 감지되고, UI가 업데이트됩니다.

정리

Vue.js의 반응성(Reactivity) 개념은 데이터와 UI 간의 연결을 자동화하여 개발자의 작업 부담을 덜어주는 기능입니다. Vue 인스턴스의 데이터 속성을 이용하여 데이터 변경을 감지하고, 연결된 UI를 자동으로 업데이트할 수 있습니다. 이를 통해 Vue.js는 유연하고 반응성 있는 인터페이스를 생성하기 위한 강력한 도구가 됩니다.