라이프사이클(LifeCycle)

강연주·2024년 10월 19일

📚 TIL

목록 보기
69/186

🍃 라이프사이클(LifeCycle)

소프트웨어 개발 코드에서 라이프사이클은, 주로 객체나 컴포넌트가 생성되고 소멸될 때까지 거치는 일련의 단계들을 의미한다. 이를 통해 각 객체 또는 컴포넌트의 상태 변화를 체계적으로 관리하고, 메모리 누수나 불필요한 자원 소모를 방지할 수 있다. 프레임워크(React, Android, Spring 등)나 객체 지향 프로그래밍 등 다양한 소프트웨어 개발에서 중요한 역할을 하는 개념.


🍎 객체 지향 프로그래밍의 라이프사이클

객체는 생성, 사용, 소멸의 단계를 거친다.

  • 생성 (Creation) : 객체가 인스턴스화된다.
🖥️ java

MyClass obj = new MyClass(); // 객체 생성
  • 사용 (Usage) : 객체의 메서드가 호출되고 필드가 수정된다.
🖥️ java

obj.doSomething();
  • 소멸 (Destruction) : 더 이상 필요하지 않은 객체는 메모리에서 해제된다.
    • Java에서는 Garbage Collector가 소멸을 관리한다.
    • C++ 등에서는 직접 객체를 소멸시켜야 한다.
🖥️ java

delete obj; // C++에서 명시적 소멸

🫐 프론트엔드 프레임워크에서의 라이프사이클 (React예시)

React 같은 프레임워크에서는, 컴포넌트가 화면에 등장하고 사라질 때의 라이프사이클을 관리한다.

  • Mounting : 컴포넌트가 처음 생성되어 DOM에 렌더링되는 단계
    • componentDidMount()

      🖥️ javascript
      
      			useEffect(() => {
      		console.log("컴포넌트가 마운트되었습니다!");
      			}, []);
  • Updating : 상태나 props가 변경되어 컴포넌트가 재렌더링되는 단계
    • componentDidUpdate()

      🖥️ javascript
      
      			useEffect(() => {
      		console.log("컴포넌트가 업데이트되었습니다!");
      			}, []);
  • Unmounting : 컴포넌트가 DOM에서 제거되는 단계
    • componentWillUnmount()
   🖥️ javascript
   
	useEffect(() => {
    		return () => {
  	console.log("컴포넌트가 언마운트되었습니다!");
    	}
}, []);

🍐 모바일 앱에서의 라이프사이클 (Android 예시)

Android 앱에서는 액티비티(Activity)의 라이프사이클을 관리해야 한다.

  • onCreate() : 액티비티가 생성될 때 호출된다.
  • onStart() : 액티비티가 화면에 나타날 준비를 한다.
  • onResume() : 액티비티가 포커스를 얻고 사용자와 상호작용이 가능하다.
  • onPause() : 다른 액티비티가 포커스를 얻어 일시정지된다.
  • onStop() : 액티비티가 더 이상 사용자에게 보이지 않는다.
  • onDestroy() : 액티비티가 종료되거나 시스템에 의해 제거된다.
🖥️ java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Log.d("Lifecycle", "onCreate 호출됨");
}

🍑 Spring 프레임워크에서의 라이프사이클

Spring에서는 빈(Bean) 객체의 라이프사이클이 중요하다.

  • 객체 생성 : 컨테이너가 Bean을 생성.
  • 의존성 주입 (Dependency Injection) : 필요한 의존성을 주입한다.
  • 초기화 (Initialization) : @PostConstruct 메서드가 호출된다.
  • 사용 : Bean이 애플리케이션 로직에 사용된다.
  • 소멸 (Destruction) : 애플리케이션이 종료되거나 Bean이 제거될 때 @PreDestroy 메서드가 호출된다.
🖥️ java

@PostConstruct
public void init() {
    System.out.println("초기화 메서드 실행");
}

@PreDestroy
public void destroy() {
    System.out.println("소멸 메서드 실행");
}

➡️ 소프트웨어 개발 코드에서 라이프사이클이란
객체, 컴포넌트, 혹은 프로그램의 생성부터 종료까지의 흐름을 뜻한다.
이에 대한 이해는 자원을 효율적으로 관리하고 성능 문제를 예방하는 데 도움을 준다. 프레임워크마다 특화된 라이프사이클 관리 방법이 있지만, 궁극적 목적은 동일. 올바른 시점에 객체나 컴포넌트를 생성하고 적절히 해제해 프로그램의 효율성을 극대화하는 것이다.

profile
아무튼, 개발자

0개의 댓글