Vue Instance

λ·° μΈμŠ€ν„΄μŠ€λŠ” 뷰둜 화면을 κ°œλ°œν•˜κΈ° μœ„ν•΄ ν•„μˆ˜μ μœΌλ‘œ μƒμ„±ν•΄μ•Όν•˜λŠ” κΈ°λ³Έ λ‹¨μœ„μ΄λ‹€.

μΈμŠ€ν„΄μŠ€ ν˜•μ‹

new Vue({
  ...
});

μƒμ„±μž

new Vue()둜 μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 λ•Œ Vueλ₯Ό μƒμ„±μžλΌκ³  ν•œλ‹€. μƒμ„±μžλŠ” λ·° 라이브러리λ₯Ό λ‘œλ”©ν•˜κ³  λ‚˜λ©΄ μ ‘κ·Όν•  수 μžˆλ‹€. λ·°μ—μ„œ κ°œλ°œν•  λ•Œ ν•„μš”ν•œ κΈ°λŠ₯듀을 μƒμ„±μžμ— 미리 μ •μ˜ν•΄ 놓고 μ‚¬μš©μžκ°€ κ·Έ κΈ°λŠ₯을 μž¬μ •μ˜ν•˜μ—¬ νŽΈλ¦¬ν•˜κ²Œ μ‚¬μš©ν•˜λ„λ‘ ν•˜κΈ°μœ„ν•΄ μ‚¬μš©ν•œλ‹€.

μƒμƒμžλž€ 객체λ₯Ό μƒˆλ‘œ 생성할 λ•Œ 자주 μ‚¬μš©ν•˜λŠ” μ˜΅μ…˜κ³Ό κΈ°λŠ₯듀을 미리 νŠΉμ • 객체에 μ €μž₯ν•΄ 놓고, μƒˆλ‘œ 객체λ₯Ό 생성할 λ•Œ 기쑴에 ν¬ν•¨λœ κΈ°λŠ₯κ³Ό λ”λΆˆμ–΄ κΈ°μ‘΄ κΈ°λŠ₯을 μ‰½κ²Œ ν™•μž₯ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” 기법이닀. 일반적으둜 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ μ‚¬μš©ν•˜λŠ” 객체 μ •μ˜ λ°©μ‹μœΌλ‘œ 미리 μ •μ˜λœ 속성과 λ©”μ„œλ“œλ₯Ό μž¬ν™œμš©ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•œλ‹€.

μ˜΅μ…˜ 속성

λ·° μΈμŠ€ν„΄μŠ€ μ˜΅μ…˜ 속성은 μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 λ•Œ μž¬μ •μ˜ν•  data, el, template λ“± 속성을 μ˜λ―Έν•œλ‹€.

속성

μ„€λͺ…

el

λŒ€μƒμ΄ λ˜λŠ” html element ν˜Ήμ€ css selector

data

화면을 κ·Έλ¦¬λŠ”λ° μ‚¬μš©ν•˜λŠ” dataλ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜ ν˜Ήμ€ data객체

template

화면에 ν‘œμ‹œν•  HTML, CSS λ“±μ˜ λ§ˆν¬μ—… μš”μ†Œλ₯Ό μ •μ˜ν•˜λŠ” 속성

methods

ν™”λ©΄ 둜직 μ œμ–΄μ™€ κ΄€λ ¨λœ λ©”μ„œλ“œλ₯Ό μ •μ˜ν•˜λŠ” 속성

created

λ·° μΈμŠ€ν„΄μŠ€κ°€ μƒμ„±λ˜μžλ§ˆμž μ‹€ν–‰ν•  λ‘œμ§μ„ μ •μ˜ν•  수 μžˆλŠ” 속성

유효 λ²”μœ„

λ·° μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜λ©΄ HTML의 νŠΉμ • λ²”μœ„ μ•ˆμ—μ„œλ§Œ μ˜΅μ…˜ 속성듀이 μ μš©λ˜μ–΄ λ‚˜νƒ€λ‚œλ‹€. 이λ₯Ό μΈμŠ€ν„΄μŠ€ 유효 λ²”μœ„λΌκ³  ν•œλ‹€. el μ†μ„±μ˜ 값이 가진 돔 μš”μ†Œκ°€ μΈμŠ€ν„΄μŠ€μ˜ 유효 λ²”μœ„μ΄λ‹€.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue Sample</title>
</head>
<body>
    <div id="app">
        {{message}}
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                message: 'Hello Vue.js!'
            }
        });
    </script>
</body>
</html>

μœ„μ˜ μ½”λ“œμ—μ„œλŠ” #app 이 elμ΄λ―€λ‘œ, <div id="app">{{message}}</div> κ°€ μœ νš¨λ²”μœ„μΈ 것이닀.

라이프 사이클

μΈμŠ€ν„΄μŠ€μ˜ μƒνƒœμ— 따라 ν˜ΈμΆœν•  수 μžˆλŠ” 속성듀을 라이프 사이클 속성이라고 ν•œλ‹€. 그리고 각 라이프 사이클 μ†μ„±μ—μ„œ μ‹€ν–‰λ˜λŠ” μ»€μŠ€ν…€ λ‘œμ§μ„ 라이프 사이클 ν›…(hook)이라고 ν•œλ‹€.

라이프 사이클 : 일반적으둜 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ κ°€μ§€λŠ” 생λͺ… μ£ΌκΈ°

μœ„μ˜ 그림을 보면 μΈμŠ€ν„΄μŠ€κ°€ μƒμ„±λ˜κ³  λ‚˜μ„œ 화면에 λΆ€μ°©λ˜κ³ , μ†Œλ©Έλ˜κΈ°κΉŒμ§€μ˜ 전체적인 흐름을 λ‚˜νƒ€λ‚Έ λ·° μΈμŠ€ν„΄μŠ€ 라이프 사이클 λ‹€μ΄μ–΄κ·Έλž¨μ΄λ‹€.

beforeCreate

μΈμŠ€ν„΄μŠ€κ°€ μƒμ„±λ˜κ³  λ‚˜μ„œ κ°€μž₯ 처음으둜 μ‹€ν–‰λ˜λŠ” 라이프 사이클 단계이닀. 이 λ‹¨κ³„μ—μ„œλŠ” data 속성과 methods 속성이 아직 μΈμŠ€ν„΄μŠ€μ— μ •μ˜λ˜μ–΄ μžˆμ§€ μ•Šκ³ , 돔과 같은 ν™”λ©΄ μš”μ†Œμ—λ„ μ ‘κ·Όν•  수 μ—†λ‹€.

created

data 속성과 methods 속성이 μ •μ˜ λ˜μ—ˆκΈ° λ•Œλ¬Έμ— this.data or this.fetchData()와 같은 λ‘œμ§λ“€μ„ μ΄μš©ν•΄ data 속성과 methods 속성에 μ •μ˜λœ 값에 μ ‘κ·Όν•΄ λ‘œμ§μ„ μ‹€ν–‰ν•  수 μžˆλ‹€. 아직 μΈμŠ€ν„΄μŠ€κ°€ 화면에 λΆ€μ°©λ˜κΈ° 전이기 λ•Œλ¬Έμ— template 속성에 μ •μ˜λœ 돔 μš”μ†Œλ‘œ μ ‘κ·Όν•  수 μ—†λ‹€.

data속성과 methods 속셍에 μ ‘κ·Όν•  수 μžˆλŠ” 첫 라이프 사이클 단계이며, μ»΄ν¬λ„ŒνŠΈκ°€ μƒμ„±λ˜κ³  λ‚˜μ„œ μ‹€ν–‰λ˜λŠ” 단계이기 λ•Œλ¬Έμ— μ„œλ²„μ— 데이터λ₯Ό μš”μ²­ν•˜μ—¬ λ°›μ•„μ˜€λŠ” λ‘œμ§μ„ μˆ˜ν–‰ν•˜κΈ°μ— μ’‹λ‹€.

beforeMount

template 속성에 μ§€μ •ν•œ λ§ˆν¬μ—… 속성을 render()ν•¨μˆ˜λ‘œ λ³€ν™˜ ν›„ el 속성에 μ§€μ •ν•œ DOM에 μΈμŠ€ν„΄μŠ€λ₯Ό λΆ€μ°©ν•˜κΈ° 전에 ν˜ΈμΆœλ˜λŠ” 단계이닀. render()ν•¨μˆ˜κ°€ 호좜되기 μ§μ „μ˜ λ‘œμ§μ„ μΆ”κ°€ν•˜κΈ° μ’‹λ‹€.

render()λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ ν™”λ©΄μ˜ 돔을 κ·Έλ¦¬λŠ” ν•¨μˆ˜

mounted

el μ†μ„±μ—μ„œ μ§€μ •ν•œ ν™”λ©΄ μš”μ†Œ(DOM)에 μΈμŠ€ν„΄μŠ€κ°€ λΆ€μ°©λ˜κ³  λ‚˜λ©΄ ν˜ΈμΆœλ˜λŠ” λ‹¨κ³„λ‘œ, template 속성에 μ •μ˜ν•œ ν™”λ©΄ μš”μ†Œμ— μ ‘κ·Όν•  수 μžˆμ–΄ ν™”λ©΄ μš”μ†Œλ₯Ό μ œμ–΄ν•˜λŠ” λ‘œμ§μ„ μˆ˜ν–‰ν•˜κΈ° 쒋은 단계이닀. 돔에 μΈμŠ€ν„΄μŠ€κ°€ λΆ€μ°©λ˜μžλ§ˆμž λ°”λ‘œ 호좜되기 λ•Œλ¬Έμ— ν•˜μœ„ μ»΄ν¬λ„ŒνŠΈλ‚˜ μ™ΈλΆ€ λΌμ΄λΈŒλŸ¬λ¦¬μ— μ˜ν•΄ μΆ”κ°€λœ ν™”λ©΄ μš”μ†Œλ“€μ΄ μ΅œμ’… HTML μ½”λ“œλ‘œ λ³€ν™˜λ˜λŠ” μ‹œμ κ³Ό λ‹€λ₯Ό 수 μžˆλ‹€.

λ³€ν™˜λ˜λŠ” μ‹œμ μ΄ λ‹€λ₯Ό κ²½μš°μ—λŠ” $next Tick() APIλ₯Ό ν™œμš©ν•˜μ—¬ HTML μ½”λ“œλ‘œ μ΅œμ’… νŒŒμ‹±λ  λ•ŒκΉŒμ§€ κΈ°λ‹€λ¦° 후에 돔 μ œμ–΄ λ‘œμ§μ„ μΆ”κ°€ν•œλ‹€.

beforeUpdate

el μ†μ„±μ—μ„œ μ§€μ •ν•œ ν™”λ©΄ μš”μ†Œμ— μΈμŠ€ν„΄μŠ€κ°€ λΆ€μ°©λ˜κ³  λ‚˜λ©΄ μΈμŠ€ν„΄μŠ€μ— μ •μ˜ν•œ 속성듀이 화면에 μΉ˜ν™˜λœλ‹€. μΉ˜ν™˜λœ 값듀은 뷰의 reactivity(λ°˜μ‘μ„±)을 μ œκ³΅ν•˜κΈ°μœ„ν•΄ $watch μ†μ„±μœΌλ‘œ μ ‘κ·Όν•  수 μžˆλ‹€.

Reactivity

뷰의 νŠΉμ§• 쀑 ν•œκ°€μ§€λ‘œ, μ½”λ“œμ˜ 변화에 따라 화면이 λ°˜μ‚¬μ μœΌλ‘œ λ°˜μ‘ν•˜μ—¬ λΉ λ₯΄κ²Œ 화면을 κ°±μ‹ ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€.

κ΄€μ°°ν•˜κ³  μžˆλŠ” 데이터가 λ³€κ²½λ˜λ©΄ λ³€κ²½ μ˜ˆμ •μΈ μƒˆ 데이터에 μ ‘κ·Όν•  수 μžˆμ–΄ λ³€κ²½ μ˜ˆμ • λ°μ΄ν„°μ˜ κ°’κ³Ό κ΄€λ ¨λœ λ‘œμ§μ„ 미리 넣을 수 μžˆλ‹€.

updated

데이터가 λ³€κ²½λ˜κ³  λ‚˜μ„œ 가상 λ”μœΌλ‘œ λ‹€μ‹œ 화면을 κ·Έλ¦¬κ³ λ‚˜λ©΄ μ‹€ν–‰λ˜λŠ” 단계이닀. 데이터 λ³€κ²½ ν›„ ν™”λ©΄ μš”μ†Œ μ œμ–΄μ™€ κ΄€λ ¨λœ λ‘œμ§μ„ μΆ”κ°€ν•˜κΈ° 쒋은 단계이닀. 이 λ‹¨κ³„μ—μ„œ 데이터 값을 λ³€κ²½ν•˜λ©΄ λ¬΄ν•œ 루프에 빠질 수 μžˆμœΌλ―€λ‘œ 값을 λ³€κ²½ν•˜λ €λ©΄ computed, watch와 같은 속성을 μ΄μš©ν•΄μ•Όν•œλ‹€.

데이터 값을 κ°±μ‹ ν•˜λŠ” λ‘œμ§μ€ 가급적이면 beforeUpdate, λ³€κ²½ λ°μ΄ν„°μ˜ ν™”λ©΄ μš”μ†Œμ™€ κ΄€λ ¨λœ λ‘œμ§μ€ updated에 μΆ”κ°€ν•˜λŠ” 것이 μ’‹λ‹€.

beforeDestory

λ·° μΈμŠ€ν„΄μŠ€κ°€ 파괴되기 직전에 ν˜ΈμΆœλ˜λŠ” λ‹¨κ³„λ‘œ, 아직 μΈμŠ€ν„΄μŠ€μ— μ ‘κ·Όν•  수 있으며, λ·° μΈμŠ€ν„΄μŠ€μ˜ 데이터λ₯Ό μ‚­μ œν•˜κΈ° 쒋은 단계이닀.

destroyed

λ·° μΈμŠ€ν„΄μŠ€κ°€ 파괴되고 λ‚˜μ„œ ν˜ΈμΆœλ˜λŠ” λ‹¨κ³„λ‘œ, λ·° μΈμŠ€ν„΄μŠ€μ— μ •μ˜ν•œ λͺ¨λ“  속성이 제거되고 ν•˜μœ„μ— μ„ μ–Έν•œ μΈμŠ€ν„΄μŠ€λ“€ λ˜ν•œ λͺ¨λ‘ νŒŒκ΄΄λœλ‹€.

Last updated