본문 바로가기
Programming

[Vue] Vue.js LifeCycle

by BTC_젤리요정 2023. 12. 7.

안녕하세요, BTC 블랙아웃입니다!

오늘은 Vue.js의 핵심 개념 중 하나인 컴포넌트 라이프사이클에 대해 자세히 알아보려고 합니다. Vue.js 애플리케이션에서 컴포넌트는 생성부터 소멸까지 여러 단계를 거치게 되며, 이 각 단계에서 Vue는 특정한 "라이프사이클 훅"을 제공합니다. 이러한 훅을 효과적으로 사용하면, 데이터 로딩, 애니메이션, 리소스 정리 등 다양한 작업을 "적절한 시점"에 수행할 수 있습니다.


1. Vue 컴포넌트 라이프사이클 이해

Vue 컴포넌트의 라이프사이클은 크게 생성(Creation), 마운트(Mounting), 업데이트(Updating), 소멸(Destruction)의 네 가지 주요 단계로 나뉩니다. 이 각 단계에서 Vue는 개발자가 특정 코드를 실행할 수 있도록 라이프사이클 훅을 제공합니다.

 

2. 라이프사이클 훅의 종류

1) 생성 단계 훅

  • beforeCreate: 컴포넌트가 생성되고 반응성이 설정되기 전에 호출됩니다.
  • created: 컴포넌트가 생성된 후 데이터 관찰이 설정되고 이벤트/감시자가 활성화된 상태에서 호출됩니다.

2) 마운트 단계 훅

  • beforeMount: 컴포넌트가 DOM에 마운트되기 전에 호출됩니다.
  • mounted: 컴포넌트가 DOM에 마운트된 후 호출됩니다. 이 시점에서 DOM에 접근할 수 있습니다.

3) 업데이트 단계 훅

  • beforeUpdate: 반응성 데이터가 변경되어 DOM이 재렌더링 및 패치되기 전에 호출됩니다.
  • updated: 데이터 변경으로 인한 DOM 재렌더링 및 패치가 완료된 후 호출됩니다.

4) 소멸 단계 훅

  • beforeDestroy: 컴포넌트가 제거되기 전에 호출됩니다. 이 시점에서 컴포넌트는 여전히 완전히 기능적입니다.
  • destroyed: 컴포넌트가 제거된 후 호출됩니다. 이 시점에서 모든 디렉티브의 바인딩이 해제되고 이벤트 리스너가 제거됩니다.

 

3. 각 훅의 활용 사례

생성 단계

  • created: API 호출을 통한 데이터 로딩, 초기 데이터 설정과 같은 작업에 적합합니다.

마운트 단계

  • mounted: DOM이 완전히 렌더링된 후 필요한 DOM 조작, 외부 라이브러리의 연동과 같은 작업에 사용합니다.

업데이트 단계

  • updated: 데이터 변경 후 DOM 업데이트가 완료된 시점에 필요한 후처리 로직 구현에 활용합니다.

소멸 단계

  • beforeDestroy: 컴포넌트가 제거되기 전에 이벤트 리스너를 제거하거나, 외부 라이브러리 인스턴스를 정리하는 데 사용합니다.
  • destroyed: 컴포넌트가 완전히 제거된 후에 필요한 추가적인 정리 작업을 수행할 수 있습니다.

 

4. 라이프사이클 훅의 실용적 활용

Vue 컴포넌트의 라이프사이클 훅을 효과적으로 활용하면, 애플리케이션의 동작을 더 잘 제어하고, 예측 가능하게 만들 수 있습니다. 예를 들어, created 훅에서 서버로부터 데이터를 가져오고, mounted 훅에서 DOM 라이브러리를 초기화하는 것은 매우 일반적인 패턴입니다. 또한, **beforeDestroy**에서 이벤트 리스너를 제거하면 메모리 누수를 방지할 수 있습니다.

 

5. 주의 사항 및 베스트 프랙티스

  • 라이프사이클 훅 사용 시 주의점: 각 훅은 특정한 목적을 가지고 있으므로, 이에 맞게 사용해야 합니다. 예를 들어, **created**에서 DOM을 조작하려고 시도하면 오류가 발생할 수 있습니다.
  • 베스트 프랙티스: 코드의 재사용성과 유지 보수성을 높이기 위해, 가능한 한 라이프사이클 훅 내부의 로직을 간단하게 유지하는 것이 좋습니다.

6. 결론

Vue.js의 라이프사이클 훅은 컴포넌트의 생명주기를 관리하는 유용한 도구입니다. 이를 적절하게 사용함으로써 애플리케이션의 반응성과 성능을 극대화하고, 다양한 상황에서의 동작을 적절히 제어할 수 있습니다.

 

지금까지 BTC 블랙아웃이었습니다. 감사합니다!

 

'Programming' 카테고리의 다른 글

[BigData] VectorDB에 대하여  (1) 2023.12.08
백엔드 응답모델(result) 구성하기  (2) 2023.12.08
Vue Router : 네비게이션 가드  (1) 2023.12.06
[Programming] Spring 이란?  (0) 2023.11.24
[Vue]Vue.js 컴포넌트 디자인 패턴  (1) 2023.11.24

댓글