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