Vue.js 기초
Vue.js는 사용자 인터페이스(UI)를 구축하기 위한 프로그레시브(Progressive) 자바스크립트 프레임워크입니다. 유연하고 배우기 쉬운 특징을 가집니다.
개요
Vue.js는 컴포넌트 기반 아키텍처를 채택하여 UI를 재사용 가능한 부품으로 만들 수 있습니다. 가상 DOM을 사용하여 효율적인 렌더링을 제공하며, 단일 페이지 애플리케이션(SPA) 개발에 매우 적합합니다. React와 Angular의 장점을 결합했다는 평가를 받습니다.
참고
Vue.js는 CDN을 통해 HTML 파일에 직접 포함하여 사용하거나, Vue CLI와 같은 도구를 사용하여 복잡한 SPA를 구축할 수 있습니다.
기본 문법
Vue는 HTML 기반 템플릿 문법을 사용합니다. v- 접두사가 붙은 특수 속성(디렉티브)을 통해 템플릿에 동적인 동작을 부여합니다.
HTML
<div id="app"> <p>{{ message }}</p> <button v-on:click="reverseMessage">메시지 뒤집기</button> </div>
Vue 인스턴스
모든 Vue 애플리케이션은 새로운 Vue 인스턴스를 생성하는 것으로 시작합니다. Vue 인스턴스는 data, methods, computed 등 다양한 옵션들을 포함합니다.
JavaScript
const app = Vue.createApp({ data() { return { message: 'Hello, Vue!' } }, methods: { reverseMessage() { this.message = this.message.split('').reverse().join(''); } } }).mount('#app');
주요 디렉티브
디렉티브는 Vue의 특별한 HTML 속성으로, 요소에 특별한 동작을 부여합니다.
디렉티브 | 설명 | 예시 |
---|---|---|
v-bind |
HTML 속성에 데이터를 바인딩합니다. (약식: : ) |
<img v-bind:src="imageSrc"> |
v-on |
요소에 이벤트 리스너를 붙입니다. (약식: @ ) |
<button v-on:click="handleClick"> |
v-model |
폼 요소에 양방향 데이터 바인딩을 적용합니다. | <input v-model="text"> |
v-if , v-else |
조건에 따라 요소를 렌더링하거나 제거합니다. | <p v-if="seen"> |
v-for |
배열의 항목을 기반으로 목록을 렌더링합니다. | <li v-for="item in items"> |
사용 예제
입력 필드에 텍스트를 입력하면 실시간으로 메시지가 업데이트되는 예제입니다.
HTML/JavaScript
<div id="app"> <h1>{{ message }}</h1> <input v-model="message" /> </div> <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script> <script> Vue.createApp({ data() { return { message: '안녕하세요, Vue!' } } }).mount('#app'); </script>
주의사항 및 팁
- Vue는 상태(data)가 변경되면 자동으로 화면을 업데이트합니다. 이를 반응형(Reactivity) 시스템이라고 합니다.
- 컴포넌트를 만들 때는 데이터와 로직을 분리하는 것이 좋습니다.
- Vue Router를 사용하여 SPA에서 여러 페이지를 관리할 수 있습니다.
주의
복잡한 상태 관리가 필요할 때는 Vuex(Vue 2)나 Pinia(Vue 3)와 같은 상태 관리 라이브러리를 사용하는 것을 고려해야 합니다.