Programming/Vue

[Vue] 인스턴스 라이프 사이클(Life Cycle)이란? (개념 / 예제)

JeongKyun 2022. 4. 18.
반응형

서론


Vue에서 인스턴스나 컴포넌트를 생성할 때 생기는 과정들을 라이프 사이클이라 하는데, 이 라이프 사이클 과정중 일어나는 일과 해당 개념들에 대해 알아보도록 하자.

 


 

 

인스턴스 라이프 사이클이란?


인스턴스의 상태에 따라 호출할 수 있는 속성들을 라이프 사이클 속성이라고 한다. 그리고
각 라이프 사이클 속성에서 실행되는 커스텀 로직을 라이프 사이클 훅(Hook)이라고 한다.

 


 

라이프 사이클 속성 종류


 

 

위의 그림은 인스턴스가 생성되고 나서 화면에 인스턴스가 부착된 후 소멸되기까지의 전체적인 흐름을 나타낸 뷰 인스턴스 라이프 사이클 다이어그램이다.

 

키워드를 보면 총 8개의 속성이 있다. 이 속성에 대해 하나씩 알아보면 다음과 같다.

 

1. beforeCreate

인스턴스가 생성되고 나서 가장 처음으로 실행되는 라피으 사이클 단계이다. 이 단계에서는 data속성과 method 속성이 아직 인스턴스에 정의되어 있지 않고 돔과 같은 화면 요소에도 접근할 수 없는 상태이다.

 

2. created

data속성과 method속성이 정의되었기 때문에 this.data 또는 this.fetchData()와 같은 로직을 이용하여 data와 methods 속성에 정의된 값에 접근하여 로직을 실행할 수 있게 된다.

그렇지만 아직 인스턴스가 화면 요소에 부착되기 전이기 때문에 template 속성에 정의된 돔 요소로 접근할 수 는 없는 상태이다.

 

3. beforeMount

template속성에 지정한 마크업 속성을 render() 함수로 변환한 후 el 속성에 지정한 화면 요소(돔)에 인스턴스를 부착하기 전에 호출되는 단계를 말한다.

이 속성은 render() 함수가 호출 되기 직전의 로직을 추가할 때 사용하면 좋다.

 

4. mounted

template 속성에 정의한 화면 요소(돔)에 접근할 수 있어 화면 요소를 제어하는 로직을 수행하기 좋은 단계이다.

 

5. beforeUpdate

el 속성에서 지정한 화면 요소에 인스턴스가 부착되고 나면 인스턴스에 정의한 속성들이 화면에 치환된다. 치환된 값은 뷰의 반응성을 제공하기 위해 $watch속성으로 감시한다. 이를 데이터 관찰이라 한다.

관찰하고있는 데이터가 변경되면 가상 돔으로 화면을 다시 그리기전에 호출되는 단계이며, 변경 예정인 새 데이터에 접근할 수 있어 변경 예정 데이터의 값과 관련된 로직을 미리 넣을 수 있다는 특징이 있다.

 

6. updated

데이터가 변경되고 나서 가상 돔으로 다시 화면을 그리고나면 실행되는 단계이다.

데이터 변경 후 화면 요소 제어와 관련된 로직을 추가하기 좋은 단계이다.

주의 할점은 이 단계에서 데이터 값을 변경하면 무한 루프에 빠질 수 있기 때문에 변경하려면 computed 또는 watch와 같은 속성을 사용해야한다.

 

7. beforeDestroy

뷰 인스턴스가 파괴되기 직전에 호출되는 단계이다.

이 단계에서는 아직 인스턴스에 접근할 수 있으며, 뷰 인스턴스의 데이터를 초기화 시키기 좋은 단계이다.

 

8. destroyed

뷰 인스턴스가 파괴되고 나서 호출되는 단계이다. 

뷰 인스턴스에 정의한 모든 속성이 제거되고 하위에 선언한 인스턴스들 또한 모두 파괴시킨다.

 


 

인스턴스 라이프 사이클 예제


<html>
  <head>
    <title>Vue Instance Lifecycle</title>
  </head>
  <body>
    <div id="app">
      {{ message }}
    </div>

    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.2/dist/vue.js"></script>
    <script>
      new Vue({
        el: '#app',
        data: {
          message: 'Hello Vue.js!'
        },
        beforeCreate: function() {
          console.log("beforeCreate");
        },
        created: function() {
          console.log("created");
        },
        mounted: function() {
          console.log("mounted");
        },
        updated: function() {
          console.log("updated");
        }
      });
    </script>
  </body>
</html>

위의 소스를 실행하여 개발자모드 콘솔에서 확인하면 실행되면서 찍힌 로그를 볼 수 있다.

참고바란다.

 

댓글

💲 많이 본 글