[Vue.js 입문하기] Vue의 핵심, Reactivity (반응성)

2022. 7. 21. 18:19·Programming/Vue.js
728x90
반응형

💭 기존의 웹 개발 방식인 Html과 JavaScript와 비교하여 Vue의 Reactivity를 구현하는 방법을 아주 간단히 알아보자!

❗Html, JavaScript로 웹 만들어보기

  1. 변수 str 를 생성하고 화면에 출력한 후 str 값을 변경했을 때
    • html 파일에서 ! 를 쓴 후 Tab 키를 누르면 아래와 같은 hmtl 양식을 손쉽게 작성할 수 있다.
    <!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div id="app">hi hello</div>

    <script>
      var div = document.querySelector("#app"); //위의 div 태그의 정보를 가지고 옮.
      var str = "hello Vue.js";
      div.innerHTML = str;

      str = "hello!!???";
    </script>
  </body>
</html>

<!--
    div#app 작성 후 엔터 하면
    <div id="app"></div>

    $('#app');
    document.querySelector('#app');
    위 아래 같은거
-->
  1. 결과
    • 아래의 사진과 같이 str 출력이 값이 변경되기 전의 값을 출력하고 있음을 확인할 수 있다.

❗ Vue의 Reactivity(반응성) 웹 만들기

  1. 변수 str 를 생성하고 화면에 출력한 후 str 값을 변경했을 때
    • 변경된 str 값이 바로 화면에 적용되는 반응성 웹
    • Object.defineProperty() API를 사용
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div id="app"></div>

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

      //Object.defineProperty(대상객체, 객체의 속성, {
      //  정의할 내용
      //}); //개체의 동작을 재정의하는 API
      Object.defineProperty(viewModel, "str", {
        get: function () {
          //속성(viewModel.str)에 접근했을 때의 동작을 정의
          console.log("viewModel.str에 접근함!");
        },
        set: function (newValue) {
          //속성(viewModel.str)에 값을 할당 했을 때의 동작을 정의
          console.log("viewModel.str에 할당함!", newValue);
          div.innerHTML = newValue
        },
      });
    </script>
  </body>
</html>
  1. 결과
    • html, javascript로 작성된 화면과 다르게 viewModel 객체의 str 속성에 접근하게 되면 개발자도구 콘솔에서 접근했다는 문구가 보이게 되고 값을 할당하게 되면 할당했다는 문구와 할당한 값을 보여준다.
    • 변수 viewModel.str 값을 변경하게 되면 변경된 값이 바로바로 화면에 적용되어 보여진다.
    • 이러한 모습으로 vue.js의 반응성을 확인할 수 있다.

❗ Reactivity 코드 함수화 하기

  1. init()이라는 함수를 생성하여 위에 작성한 Object.defineProperty() 동작을 하도록 함
  2. render()라는 함수를 생성하여 div의 텍스트 값을 바꾸는 코드를 작성한 후 init()함수에서 실행하도록 함.
  3. 즉시 실행 함수로 함수 전체를 감싸준다.
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div id="app"></div>

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

      //Object.defineProperty(대상객체, 객체의 속성, {
      //  정의할 내용
      //}); //개체의 동작을 재정의하는 API
      (function () {
        function init() {
          Object.defineProperty(viewModel, "str", {
            get: function () {
              //속성(viewModel.str)에 접근했을 때의 동작을 정의
              console.log("viewModel.str에 접근함!");
            },
            set: function (newValue) {
              //속성(viewModel.str)에 값을 할당 했을 때의 동작을 정의
              console.log("viewModel.str에 할당함!", newValue);
              render(newValue);
            },
          });
        }

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

        init();
      })();
    </script>
  </body>
</html>
  1. 결과
    • 이전 결과와 동일하게 작동됨

🤷‍♀️ 즉시 실행함수?

• 즉시 실행 함수 표현(IIFE, Immediately Invoked Function Expression)은 정의 되자마자 즉시 실행되는 Javascript Function을 말한다.
• 첫번째 괄호 ()로 둘러싸인 부분은 익명함수 부분은 전역 스코프에 불필요한 변수를 추가해서 오염시키는 것을 방지하고 내부안으로 다른 변수가 접근하는 것을 막는다.
• 두번째 괄호 ()는 즉시 실행함수를 생성하는 괄호이다. 이를 통해 자바스크립트 엔진은 함수를 직시 해석해서 실행한다.

출처 : https://developer.mozilla.org/ko/docs/Glossary/IIFE

(function () { statements })();`

💕 위 내용은 인프런의 Vue.js 시작하기 - Age of Vue.js 를 참고하여 공부하며 개인적으로 정리한 내용입니다.
내용에 오류가 있거나 문제 사항은 댓글로 남겨주시면 감사하겠습니다!

반응형

'Programming > Vue.js' 카테고리의 다른 글

[Vue.js 입문하기] 컴포넌트 통신 - props 속성  (0) 2022.07.26
[Vue.js 입문하기] 뷰 컴포넌트  (0) 2022.07.21
[Vue.js 입문하기] 뷰 인스턴스  (0) 2022.07.21
[Vue.js 입문하기] Vue.js란?  (0) 2022.07.20
[Vue.js 입문하기] Vue.js 시작하기  (0) 2022.07.20
'Programming/Vue.js' 카테고리의 다른 글
  • [Vue.js 입문하기] 뷰 컴포넌트
  • [Vue.js 입문하기] 뷰 인스턴스
  • [Vue.js 입문하기] Vue.js란?
  • [Vue.js 입문하기] Vue.js 시작하기
제가안난데여♪(´ε`*)
제가안난데여♪(´ε`*)
기억의 유한함을 기록의 무한함으로 ✍️ 예비 개발자가 꿈꾸는 공간 여기는 안나의 개발 블로그 💻
  • 제가안난데여♪(´ε`*)
    안나의 전두엽 어딘가 🧠
    제가안난데여♪(´ε`*)
    기억의 유한함을 기록의 무한함으로 ✍️ 예비 개발자가 꿈꾸는 공간 여기는 안나의 개발 블로그 💻
  • 전체
    오늘
    어제
    • 분류 전체보기 (128)
      • 간단하게 한스푼🥄 (1)
      • Programming (56)
        • Spring (16)
        • Vue.js (6)
        • Deep Learning (3)
        • DataBase (5)
        • React (26)
      • DevOps (21)
        • Docker (12)
        • Linux (4)
      • Algorithm (46)
        • 알고리즘 정리 (5)
        • 자료구조 (0)
        • PS - 백준 (28)
        • 99클럽 코테 스터디 (13)
      • Project (0)
        • CampFire (0)
      • 안나의 취뽀일기 (˵ •̀ ᴗ - ˵ ) ✧ (4)
        • SSAFY_9기 (2)
        • SW 부트캠프 (2)
  • 잔디 달력

    «   2025/07   »
    일 월 화 수 목 금 토
    1 2 3 4 5
    6 7 8 9 10 11 12
    13 14 15 16 17 18 19
    20 21 22 23 24 25 26
    27 28 29 30 31
  • 인기 글

  • 태그

    항해99
    Vue
    stack
    Vue.js 입문하기
    백준 구현문제
    도커
    Spring
    linux
    도커컨테이너
    greedy
    Vue.js
    백준
    개발자 취업
    til
    docker
    React
    springboot
    코딩테스트 준비
    java stack
    자바 스택
    리액트 상태
    topology sort
    99클럽
    front-end
    자바
    김영한
    알고리즘
    java 백준
    백준 java
    java
  • 07-06 11:31
    반응형
  • hELLO· Designed By정상우.v4.10.3
제가안난데여♪(´ε`*)
[Vue.js 입문하기] Vue의 핵심, Reactivity (반응성)
상단으로

티스토리툴바