๐ค Vue.js๋..?
MVVM ํจํด์ ๋ทฐ๋ชจ๋ธ(ViewModel) ๋ ์ด์ด์ ํด๋นํ๋ ํ๋ฉด(View)๋จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- MVVM ํจํด์ ์ฌ์ฉ
- Virtual DOM ์ฌ์ฉ
- React, Angular์ ๋นํด ๋งค์ฐ ์๊ณ ๊ฐ๋ฒผ์ฐ๋ฉฐ ๋ณต์ก๋๊ฐ ๋ฎ์.
- Template์ Componenet๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ View Layer๋ฅผ ์ ๋ฆฌํ์ฌ ์ฌ์ฉ
๐ Vue.js๋ฅผ ๋ฐฐ์์ผ ํ๋ ์ด์
- Angular์
data binding
ํน์ฑ๊ณผ react์ virtual dom
๊ธฐ๋ฐ ๋ ๋๋ง ํน์ง์ ๋ชจ๋ ๊ฐ์ง๊ณ ์๋ค.
- ๋ฌธ๋ฒ์ด ๊ฐํธํ๊ณ ์์ฑํ๊ธฐ ์ฝ๋ค.
- react์ angular์ ๋นํด ์ฑ๋ฅ์ด ์ฐ์ํ๊ณ ๋น ๋ฅด๋ค.
- react์ ์ฅ์ ๊ณผ angular์ ์ฅ์ ์ ๊ฐ์ง๊ณ ์๋ค.
MVVM ํจํด..?
Model - View - ViewModel
์ ์ค์๋ง๋ก ๋ฐฑ์๋ ๋ก์ง๊ณผ UI์ ๋ถ๋ฆฌ๋ฅผ ์ํด ์ค๊ณ๋ ํจํด
View
์ญํ === DOM
Model
์ญํ === JavaScript
ViewModel
์ญํ === ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์ฆ์ ๋ทฐ์ ๋ฐ์
ViewModel
์ด ์๋ ๊ฒฝ์ฐ์๋ ์ง์ Model
๊ณผ View
๋ฅผ ์ฐ๊ฒฐํด์ผ ํ๋ค.
*But ViewModel
์ด ์ค๊ฐ์์ ์ฐ๊ฒฐํด ์ฃผ๋ ๊ฒ์ด MVVM
๋ชจ๋ธ
Reactivity(๋ฐ์์ฑ)
Vue ์ธ์คํด์ค์ JavaScript ๊ฐ์ฒด๋ฅผ data
์ต์
์ผ๋ก ์ ๋ฌํ๋ฉด Vue๋ ๋ชจ๋ ์์ฑ์ Object.defineProperty๋ฅผ ์ฌ์ฉํ์ฌ getter/setters๋ก ๋ณํํ๋ค. ์ด๋ Vue๊ฐ ES5๋ฅผ ์ฌ์ฉํ ์ ์๋ IE8 ์ดํ๋ฅผ ์ง์ํ์ง ์๋ ์ด์ ์ด๋ค.
- ๋ณํ๋ ๋ฐ์ดํฐ ๊ฐ์ฒด๊ฐ ๊ธฐ๋ก๋ ๋ ๋ธ๋ผ์ฐ์ ๊ฐ getter/setter ํ์์ ๋ค๋ฅด๊ฒ ์ฒ๋ฆฌํ๋ฏ๋ก ์น์ํ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด vue-devtools๋ฅผ ์ค์นํ๋ ๊ฒ์ด ์ข๋ค.
๋ชจ๋ ์ปดํฌ๋ํธ ์ธ์คํด์ค์ ํด๋น watcher ์ธ์คํด์ค๊ฐ ์์ผ๋ฉฐ, ์ด ์ธ์คํด์ค๋ ์ปดํฌ๋ํธ๊ฐ ์ข
์์ ์ผ๋ก ๋ ๋๋ง๋๋ ๋์ ์์ ๋ ๋ชจ๋ ์์ฑ์ ๊ธฐ๋กํ๋ค.
๋์ค์ ์ข
์์ ์ธ setter๊ฐ ํธ๋ฆฌ๊ฑฐ ๋๋ฉด watcher์ ์๋ฆฌ๊ณ ์ปดํฌ๋ํธ๊ฐ ๋ค์ ๋ ๋๋ง๋๋ค.
๋ทฐ ์ธ์คํด์ค
์ธ์คํด์ค๋ ๋ทฐ๋ก ๊ฐ๋ฐํ ๋ ํ์๋ก ์์ฑํด์ผ ํ๋ ์ฝ๋์ด๋ค.
์ธ์คํด์ค ์์ฑ
์ธ์คํด์ค๋ ์๋์ ๊ฐ์ด ์์ฑํ ์ ์๋ค.
new Vue();
์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ๋๋ฉด ์๋์ ๊ฐ์ด ์ธ์คํด์ค ์์ ์ด๋ค ์์ฑ๊ณผ API๊ฐ ์๋์ง ์ฝ์ ์ฐฝ์์ ํ์ธ ๊ฐ๋ฅ
const vm = new Vue();
console.log(vm);
- ์์ฑ์ ํจ์๋ฅผ ์ฌ์ฉํด์ Vue ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ์ด์ ๋ Vue๊ฐ์ฒด์ ํ๋กํ ํ์
์ ๋ฏธ๋ฆฌ ํ์ํ ํ๋กํผํฐ๋ ๋ฉ์๋๋ฅผ ๊ตฌํํจ์ผ๋ก์จ Vue ์์ฑ์ ํจ์๋ก ๋ง๋ค์ด๋ธ ๋ชจ๋ ์ธ์คํด์ค๋ค์ด ๊ณต์ ํ์ฌ ์ฌ์ฉํ ์ ์๋๋ก ํ๊ธฐ ์ํจ
์ธ์คํด์ค ์์ฑ๊ณผ API
์ธ์คํด์ค์์ ์ฌ์ฉํ ์ ์๋ ์์ฑ๊ณผ API
new Vue({
el: ,
template: ,
data: ,
methods: ,
created: ,
watch: ,
});
- el: ์ธ์คํด์ค๊ฐ ๊ทธ๋ ค์ง๋ ํ๋ฉด์ ์์์ (ํน์ HTML ํ๊ทธ)
- template: ํ๋ฉด์ ํ์ํ ์์ (HTML, CSS ๋ฑ)
- data: ๋ทฐ์ ๋ฐ์์ฑ(Reactivity)๊ฐ ๋ฐ์๋ ๋ฐ์ดํฐ ์์ฑ
- methods: ํ๋ฉด์ ๋์๊ณผ ์ด๋ฒคํธ ๋ก์ง์ ์ ์ดํ๋ ๋ฉ์๋
- created: ๋ทฐ์ ๋ผ์ดํ ์ฌ์ดํด๊ณผ ๊ด๋ จ๋ ์์ฑ
- watch: data์์ ์ ์ํ ์์ฑ์ด ๋ณํํ์ ๋ ์ถ๊ฐ ๋์์ ์ํํ ์ ์๊ฒ ์ ์ํ๋ ์์ฑ
Life Cycle..?
- Vue ์ธ์คํด์ค ๋๋ ์ปดํฌ๋ํธ๊ฐ ์์ฑ๋๊ณ ํด์ฒดํ๊ธฐ๊น์ง์ ๊ณผ์
- ํฌ๊ฒ ์์ฑ(CREATE) -> DOM์ ๋ถ์ฐฉ(MOUNT) -> ์
๋ฐ์ดํธ(UPDATE) -> ํด์ฒด(DESTROY) 4๊ฐ์ง ๊ณผ์ ์ด ์๋ค.
Life Cycle ๋จ๊ณ
1. beforeCreate
- Vue ์ธ์คํด์ค๊ฐ ์ด๊ธฐํ ๋ ์งํ์ ๋ฐ์
- ์ปดํฌ๋ํธ๊ฐ DOM์ ์ถ๊ฐ๋๊ธฐ ์ ์ด๋ผ
this.$el
์ ๊ทผ ๋ถ๊ฐ
- ๋ํ
data, methods
๋ฑ์๋ ์ ๊ทผ ๋ถ๊ฐ
2. created
data
๋ฅผ ๋ฐ์ํ์ผ๋ก ์ถ์ ๊ฐ๋ฅ
computed
, methods
, watch
๋ฑ์ด ํ์ฑํ๋์ด ์ ๊ทผ์ด ๊ฐ๋ฅํจ
- DOM์๋ ์ถ๊ฐ๋์ง ์์ ์ํ
3. beforeMount
- DOM์ ๋ถ์ฐฉ๋๊ธฐ ์ง์ ์ ํธ์ถ๋จ
- Virtual DOM์ด ์์ฑ๋์ด ์์ผ๋ ์ค์ DOM์ ๋ถ์ฐฉ๋์ง ์์ ์ํ
4. mounted
- Virtual DOM์ ๋ด์ฉ์ด ์ค์ DOM์ ๋ถ์ฐฉ๋๊ณ ๋ ์ดํ ์คํ๋จ
- ๋ชจ๋ ์์์ ์ ๊ทผ ๊ฐ๋ฅ
5. beforeUpdate
- ์ปดํฌ๋ํธ์์ ์ฌ์ฉ๋๋
data
๊ฐ์ ๋ณํ ์ง์ ์ ํธ์ถ
- ๋ณํ ๊ฐ์ ์ด์ฉํด Virtual DOM์ ๋ ๋๋ง ํ๊ธฐ ์
- ์ด ๋จ๊ณ์์ ๊ฐ๋ค์ ์ถ๊ฐ์ ์ผ๋ก ๋ณํ์ํค๋๋ผ๋ ๋ ๋๋ง์ ์ถ๊ฐ๋ก ํธ์ถํ์ง ์๋๋ค.
6. updated
- Virtual DOM์ ๋ ๋๋ง ํ๊ณ ์ค์ DOM์ด ๋ณ๊ฒฝ๋ ์ดํ์ ํธ์ถ
- ๋ณ๊ฒฝ๋
data
๊ฐ DOM์๋ ์ ์ฉ๋ ์ํ
- ์ด ๋จ๊ณ์์
data
๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋ฌดํ ๋ฃจํ๋ฅผ ์ผ์ผํฌ์ ์์ด ์ ๋ ๊ธ๋ฌผ
7. beforeDestroy
- ํด๋น ์ธ์คํด์ค๊ฐ ํด์ฒด๋๊ธฐ ์ง์ ์ ํธ์ถ๋จ
- ํด์ฒด๋๊ธฐ ์ด์ ์ด๋ฏ๋ก ๋ชจ๋ ์์์ ์ ๊ทผ ๊ฐ๋ฅ
- ์ธ์คํด์ค๊ฐ ์ฌ๋ผ์ง๊ธฐ ์ ์ ํด์ผํ ์ผ๋ค์ ์ด ๋จ๊ณ์์ ์ฒ๋ฆฌ
8. destroyed
- ์ธ์คํด์ค๊ฐ ํด์ฒด๋๊ณ ๋ ์งํ์ ํธ์ถ
- ์ธ์คํด์ค์ ์์ฑ & ์์์ ์ ๊ทผ ๋ถ๊ฐ
- ํ์ Vue ์ธ์คํด์ค ์ญ์ ์ญ์ ๋จ
๋ถ๋ชจ ์์ ์ปดํฌ๋ํธ ๋จ๊ณ ์์
1. (parent) beforeCreate
2. (parent) created
3. (parent) beforeount
4. (child) beforeCreate
5. (child) created
6. (child) beforeMount
7. (child) mounted
8. (parent) mounted