[Vue.js] Vue.js ์†Œ๊ฐœ

Yujin Leeยท2021๋…„ 5์›” 6์ผ
0

Vue.js

๋ชฉ๋ก ๋ณด๊ธฐ
2/18
post-thumbnail

1. MVVM ๋ชจ๋ธ์—์„œ์˜ Vue

โ€ป Vue๋Š” ๋ฌด์—‡์ธ๊ฐ€

Evan You๊ฐ€ ๋งŒ๋“ค์—ˆ์œผ๋ฉฐ, 2014๋…„ ๋ฆด๋ฆฌ์ฆˆ๋ฅผ ์‹œ์ž‘์œผ๋กœ ๊พธ์ค€ํžˆ ๋ฐœ์ „ํ•˜๊ณ  ์žˆ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค.
์ปจํŠธ๋กค๋Ÿฌ ๋Œ€์‹  ๋ทฐ ๋ชจ๋ธ์„ ๊ฐ€์ง€๋Š” MVVM(Model-View-ViewModel) ํŒจํ„ด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋””์ž์ธ๋˜์—ˆ์œผ๋ฉฐ,
์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ UI๋“ค์„ ๋ฌถ์–ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

MVVM ํŒจํ„ด์˜ ๋ทฐ๋ชจ๋ธ(ViewModel) ๋ ˆ์ด์–ด์— ํ•ด๋‹นํ•˜๋Š” ํ™”๋ฉด(View)๋‹จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • MVVM : Mode - View - ViewModel์˜ ์ค„์ž„๋ง์œผ๋กœ ๋กœ์ง๊ณผ UI์˜ ๋ถ„๋ฆฌ๋ฅผ ์œ„ํ•ด ์„ค๊ณ„๋œ ํŒจํ„ด์ž…๋‹ˆ๋‹ค.

์›นํŽ˜์ด์ง€๋Š” ๋”๊ณผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋งŒ๋“ค์–ด์ง€๊ฒŒ ๋˜๋Š”๋ฐ ๋”์ด View ์—ญํ• ์„ ํ•˜๊ณ , ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ Model ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
๋ทฐ๋ชจ๋ธ์ด ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ์ง์ ‘ ๋ชจ๋ธ๊ณผ ๋ทฐ๋ฅผ ์—ฐ๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ๋ทฐ๋ชจ๋ธ์ด ์ค‘๊ฐ„์—์„œ ์—ฐ๊ฒฐํ•ด ์ฃผ๋Š” ๊ฒƒ์ด MVVM ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค.

Vue์˜ ํŠน์ง•

  • MVVM ํŒจํ„ด์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • Virtual DOM์˜ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • Angular, React์— ๋น„ํ•ด ๋งค์šฐ ์ž‘๊ณ  ๊ฐ€๋ฒผ์šฐ๋ฉฐ ๋ณต์žก๋„๊ฐ€ ๋‚ฎ์Šต๋‹ˆ๋‹ค.
  • Template๊ณผ Componenet๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ฌถ๊ณ  View Layer๋ฅผ ์ •๋ฆฌํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : https://wikidocs.net/17701




2. Reactivity ๊ตฌํ˜„

    <div id="app"></div>
    <script>
        var div = document.querySelector('#app');
        var viewModel = {};

        // ๊ฐ์ฒด์˜ ๋™์ž‘์„ ์žฌ์ •์˜
        // Object.defineProperty(๋Œ€์ƒ ๊ฐ์ฒด, ๊ฐ์ฒด์˜ ์†์„ฑ, {์ •์˜ํ•  ๋‚ด์šฉ})
        Object.defineProperty(viewModel, 'str', {
            // ์†์„ฑ์— ์ ‘๊ทผํ–ˆ์„ ๋•Œ์˜ ๋™์ž‘์„ ์ •์˜
            get: function() {
                console.log('์ ‘๊ทผ');
            },
            // ์†์„ฑ์— ๊ฐ’์„ ํ• ๋‹นํ–ˆ์„ ๋•Œ์˜ ๋™์ž‘์„ ์ •์˜
            set: function(newValue) {
                console.log('ํ• ๋‹น', newValue);
                render(newValue);
          }
        })
    </script>




3. Reactivity ์ฝ”๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌํ™” ํ•˜๊ธฐ

    (function() { //์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜
            function init() {
            // ๊ฐ์ฒด์˜ ๋™์ž‘์„ ์žฌ์ •์˜
            // Object.defineProperty(๋Œ€์ƒ ๊ฐ์ฒด, ๊ฐ์ฒด์˜ ์†์„ฑ, {์ •์˜ํ•  ๋‚ด์šฉ})
                Object.defineProperty(viewModel, 'str', {
                // ์†์„ฑ์— ์ ‘๊ทผํ–ˆ์„ ๋•Œ์˜ ๋™์ž‘์„ ์ •์˜
                    get: function() {
                        console.log('์ ‘๊ทผ');
                    },
                // ์†์„ฑ์— ๊ฐ’์„ ํ• ๋‹นํ–ˆ์„ ๋•Œ์˜ ๋™์ž‘์„ ์ •์˜
                    set: function(newValue) {
                        console.log('ํ• ๋‹น', newValue);
                        render(newValue);
                    }
                });
            }

            function render(value) {
            div.innerHTML = value;
            }

            init();
            })();    




โ€ป ์ฐธ๊ณ 

profile
I can be your Genie๐Ÿงžโ€โ™€๏ธ How โ€˜bout Aladdin? ๐Ÿงžโ€โ™‚๏ธ

0๊ฐœ์˜ ๋Œ“๊ธ€