728x90
    
    
  솔직히 생명주기 라는 단어를 들었을때, 무슨 뜻인지 전혀 이해가 가지 않았다.
지금도 이해가 가지 않는다.
누군가 설명하라고 했을때, 설명할 자신이 없다.
그래서 이 블로그에 남겨놓는다.
챗GPT한테 이 '생명주기'에 대해 개념을 물어보았다.
**프로그래밍 언어에서 "생명주기(Lifecycle)"**라는 말은, **무언가(예: 변수, 객체, 프로세스 등)**가 "생겨나서(생성)" → "사용되다가" → "사라지는(소멸)" 과정을 뜻해. 즉, 어떤 것이 메모리에 존재하는 시간 범위를 말하는 것이다.
🔍 예시
1. 변수의 생명주기
- 지역변수(local variable): 함수 안에서 선언된 변수는 함수가 호출될 때 생성되고, 함수가 끝나면 자동으로 사라져(소멸).
 
def my_func():
    x = 10  # 여기서 x 생성
    print(x)
# my_func()가 끝나면 x는 메모리에서 사라짐
2. 객체의 생명주기 (예: Python, Java, C# 등에서)
- 객체는 new 같은 키워드로 생성되거나 클래스 인스턴스를 만들면 생성됨.
 - 이후 해당 객체를 사용하다가, 더 이상 참조되지 않으면(즉, 사용할 코드가 없으면) **GC(Garbage Collector)**가 자동으로 메모리에서 삭제함.
 
3. 웹 애플리케이션에서의 생명주기
예: Spring Framework의 Bean, React 컴포넌트 등도 "생명주기"를 가짐
- 생성(Mount) → 업데이트(Update) → 소멸(Unmount) 단계로 나뉘기도 한다
 
🔁 생명주기의 목적?
- 메모리 효율을 위해서야. 필요할 때만 메모리를 사용하고, 안 쓰면 정리해서 낭비를 줄이기 위한 개념
 
✅ 정리
| 개념 | 설명 | 
| 생성 | 메모리에 올라옴 (메모리 할당) | 
| 사용 | 프로그램이 해당 값을 참조하거나 기능을 사용함 | 
| 소멸 | 더 이상 필요 없으면 메모리에서 제거됨 | 
🔵 리액트의 생명주기(Lifecycle)란?
리액트 컴포넌트는 화면에 나타나고 → 업데이트되고 → 사라지는 과정이 있음
이 과정을 **생명주기(Lifecycle)**라고 부름.
📌 클래스 컴포넌트 기준 생명주기
| 단계 | 메서드 | 설명 | 
| 마운트(Mount) | constructor, componentDidMount 등 | 처음 화면에 등장할 때 | 
| 업데이트(Update) | componentDidUpdate | props, state 변경 시 | 
| 언마운트(Unmount) | componentWillUnmount | 화면에서 사라질 때 | 
✅ 함수형 컴포넌트에서는?
함수형 컴포넌트에서는 useEffect() 훅을 사용해서 생명주기 관리한다.
import { useEffect } from "react";
function MyComponent() {
  // 마운트 시 실행
  useEffect(() => {
    console.log("컴포넌트 생성됨!");
    // 언마운트 시 실행 (정리 함수)
    return () => {
      console.log("컴포넌트 사라짐!");
    };
  }, []); // 의존성 배열이 비어 있음 → 한 번만 실행
}
🔸 왜 “리액트 생명주기가 짧다”는 말이 나올까?
리액트는 SPA(Single Page Application) 기반이라서,
컴포넌트를 자주 만들고, 필요 없으면 바로 없애는 방식
즉,
- 페이지 이동할 때마다 컴포넌트가 Mount → Unmount
 - 상태(state)나 props가 바뀌면 컴포넌트가 재렌더링
 - 이때마다 **"짧게 존재했다가 다시 사라지는 느낌"**
 
🔁 요약
| 구분 | 설명 | 
| 리액트 생명주기 | 컴포넌트가 생성되고, 업데이트되고, 제거되는 과정 | 
| "짧다"는 의미 | 컴포넌트가 자주 생성되고 제거되며 상태에 따라 재렌더링됨 | 
| 함수형 기준 | useEffect()로 생명주기 관리함 | 
728x90
    
    
  '웹개발 기본상식' 카테고리의 다른 글
| RESTful API란 (1) | 2025.06.27 | 
|---|---|
| npm과 yarn (0) | 2025.06.25 | 
| HTTP(HyperText Transfer Protocol)** (0) | 2025.06.18 | 
| CSR(클라이언트 사이드 렌더링)과 SSR(서버 사이드 렌더링) (0) | 2025.06.17 | 
| SPA (Single Page Application) (0) | 2025.06.17 |