참고 : Vue.js 입문책을 읽고 학습한 내용을 블로그에 정리한 글이므로 내용상 오류가 있을 수 있습니다.
오류가 있다면 댓글 남겨주시면 감사하겠습니다.
Vue
- Vue는 웹 화면을 개발하기 위해 자바스크립트로 개발된 프레임워크입니다.
- 구글에서 근무하던 에반 유(Evan You)가 AngularJS를 사용하다가 자기가 좋아하는 특성과 초보 개발자들도 접근이 가능한 프레임워크를 만들기 위해서 만들었습니다.
- Vue는 라이브러리 역할과 프레임워크 역할을 모두 합니다 하지만 헷갈릴 수 있기 때문에 프레임워크라고 정의합니다.
Vue의 장점
1. Angular와 React에 비해 배우기 쉽다.
- Angular : 타입스크립트(TypeScript)와 ES6(ECMAScript 2015)등 많은 학습이 필요합니다.
- React : 입문자가 배우기위해 ES6와 JSX등 학습이 필요합니다.
2. Angular와 React 보다 성능이 우수하고 더 빠릅니다.
3. Angular와 React의 장점을 모두 갖고 있습니다
- Angular : 데이터 바인딩 특성
- React : 가상 돔 기반 렌더링 특징
Vue의 특징
1. MVVM패턴을 이용한 화면 개발
MVVM패턴이란?
화면을 모델(Model) - 뷰(View) - 뷰 모델(ViewModel) 구조로 개발하는 방식을 말합니다.
MVVM패턴은 화면의 부분을 제어하는 코드와 데이터의 부분을 제어하는 코드를 분리하였기 때문에
코드를 더 쉽게 이해하고 유지 보수를 편하게 할 수 있습니다.
뷰(View) |
사용자에게 보이는 화면 ex) - 구글 로고, 검색창, 검색버튼 |
뷰 모델(ViewModel) |
뷰와 모델의 중간 부분, 돔 리스너와 데이터 바인딩을 제공 |
돔 리스너(DOM Listener) |
돔의 변경된 부분을 감지하여 알맞게 특정 기능을 처리하는 장치 ex) - 검색 버튼을 눌렀을때 발생하는 과정 |
데이터 바인딩(Data Binding) |
Model(데이터)과 View(화면)를 동기화해주는 역할 ex) - Vue의 관련된 데이터를 가져와 화면에 보내주는 역할 |
모델(Model) |
데이터를 저장하는 저장소 ex) - Vue와 관련된 데이터들 |
돔(DOM) |
HTML 요소(클래스, 태그, 속성 등)의 정보를 담고 있는 데이터 트리 |
MVVM구조 처리 과정 설명
- View에서 Vue단어를 입력 후 검색합니다
- ViewModel은 검색버튼을 감지후 Model에서 Vue에 해당하는 데이터를 가져오는 로직(돔 리스너)을 실행합니다
- ViewModel은 Model에서가져온 Vue데이터를 View(화면)에 동기화합니다(데이터 바인딩)
- ViewModel에서 처리된 결과를 View에 갱신하여 보여줍니다.
2. 컴포넌트 기반 프레임워크
컴포넌트(Component) - 레고 블럭과 같이 재사용이 가능한 최소 단위를 말합니다.
(Vue에서 컴포넌트를 사용했을 때)
- 프로그래밍을 할 때 재사용하기가 쉽습니다
- HTML 코드에서 화면의 구조를 쉽게 파악 할 수있습니다.
- 모두가 정해진 방식으로 컴포넌트를 사용하기 때문에 빠르게 구현할 수 있고 다른 사람이 작성한 코드를 볼 때 쉽게 볼 수있습니다.
3. 리액트와 앵귤러의 장점을 가진 프레임워크
- 앵귤러의 양방향 데이터 바인딩(Two-way Data Binding)
- 리액트의 단방향 데이터 바인딩(One-way Data Binding)
- 리액트의 가상돔 렌더링 방식
양방향 데이터 바인딩 | View와 Model의 값중에 한쪽이 변경되면 다른 한쪽도 변경되는 것 |
단방향 데이터 바인딩 | 항상 상위 컴포넌트에서 하위 컴포넌트 한 방향으로 전달되는 것 |
가상돔 렌더링 방식 | 특정 돔 요소를 추가하거나 삭제할 때 화면 전체를 갱신 하지않고 특정한 방식으로 화면을 갱신하는 것 |
'Vue' 카테고리의 다른 글
[Vue] HTTP 통신 (0) | 2020.02.13 |
---|---|
[Vue] 라우터(기초) (0) | 2020.01.31 |
[Vue] 컴포넌트 (0) | 2020.01.30 |
[Vue] 인스턴스 (0) | 2020.01.29 |
[Vue] 개발 환경 설정(Window) (0) | 2020.01.27 |