자바 객체 생명주기란?

labbiel·2025년 4월 12일

자바

목록 보기
1/9
post-thumbnail

1단계. 클래스 로딩 (Class Loading)

JVM이 프로그램을 실행할 때 .class 파일을 메모리로 불러옵니다.

ClassLoader에 의해 이루어지고,
클래스 로딩 → 링크(Linking) → 초기화(Initialization) 순서로 진행됩니다.


2단계. 객체 생성 (Object Creation)

new 키워드를 통해 객체가 힙 메모리에 생성됩니다.
생성자(Constructor)가 호출되어 객체 초기화가 이루어집니다.

MyClass obj = new MyClass(); // 생성자 호출

3단계. 객체 사용 (Object In Use)

생성된 객체는 메서드 호출, 필드 접근 등으로 사용됩니다.
프로그램의 로직 대부분이 이 단계에서 작동합니다.


4단계. 객체 소멸 요청 (Eligible for Garbage Collection)

더 이상 객체에 대한 참조가 없을 때 GC(Garbage Collector)의 대상이 됩니다. 직접 제거하는 것이 아니라 JVM이 자동으로 제거할 시점을 판단합니다.

obj = null; // 참조 해제

최종. 객체 소멸 (Object Destruction)

GC가 객체를 힙 메모리에서 제거합니다.
필요 시 finalize() 메서드가 호출될 수 있으나, 지금은 Deprecated(비권장) 상태입니다.

🔁 전체 흐름 요약
클래스 로딩 → 객체 생성 → 객체 사용 → GC 대상 → 객체 소멸



📌 참고: 자바 애플리케이션의 전체 생명주기 (Main 기준)
public static void main(String[] args) 메서드를 시작으로 프로그램이 실행됩니다.
이 안에서 여러 객체가 생성되고 사용되며 종료됩니다.

예를 들어, Java Web(Servlet)에서는 객체 생명주기가 더 복잡해지고, Spring에서는 Bean 생명주기가 따로 있습니다.




✅ 1. 일반 자바 애플리케이션 (Java SE)
앞서 말한 객체 중심 생명주기를 따릅니다.

생명주기 요약

클래스 로딩 → 객체 생성 → 사용 → 참조 해제 → 가비지 컬렉션 → 객체 소멸

  • main() 메서드가 진입점
  • new 키워드로 객체 생성
  • 더 이상 참조하지 않으면 GC 대상
  • finalize()는 deprecated (사용 비추)

✅ 2. 자바 웹 애플리케이션 (Servlet 생명주기)
서블릿(Servlet)은 웹 서버에서 실행되는 자바 프로그램이고, HTTP 요청/응답 처리를 합니다.

Servlet 생명주기 흐름

init()service()destroy()

설명

단계메서드설명
초기화init()서블릿이 최초 요청 시 한 번만 호출됨. 초기 설정 수행
요청 처리service()클라이언트 요청이 올 때마다 호출되어 실제 작업 수행
소멸destroy()서블릿 종료 시 호출. 자원 정리 수행

✅ 3. Spring Bean 생명주기
Spring에서는 Bean 객체가 컨테이너에 의해 관리됩니다.

Spring Bean 생명주기 흐름

객체 생성 → 의존성 주입 → 초기화 → 사용 → 소멸

주요 단계 & 메서드

단계설명관련 메서드/인터페이스
객체 생성스프링 컨테이너가 Bean 생성생성자
의존성 주입필요한 의존성 주입@Autowired
초기화초기 설정@PostConstruct, InitializingBean.afterPropertiesSet()
사용빈이 실제 로직 수행일반 메서드
소멸컨테이너 종료 시 정리@PreDestroy, DisposableBean.destroy()

추가적으로 BeanPostProcessor를 통해 초기화 전후 커스터마이징도 가능합니다.


✅ 4. Android Activity 생명주기
안드로이드는 화면(Activity) 단위로 동작하며, 시스템에 의해 생명주기를 관리합니다.

기본 생명주기 흐름

onCreate()onStart()onResume()(사용 중)onPause()onStop()onDestroy()

주요 메서드 설명

메서드설명
onCreate()액티비티가 처음 생성될 때 호출
onStart()화면에 보이기 시작할 때 호출
onResume()사용자와 상호작용 가능한 상태
onPause()다른 액티비티로 전환될 때 호출
onStop()더 이상 화면에 보이지 않을 때
onDestroy()액티비티가 완전히 종료될 때

상태 저장을 위해 onSaveInstanceState() 같은 메서드도 사용됩니다.





📌 자바 생명주기 정리

구분생명주기 단계
Java SE (일반 자바)클래스 로딩 → 객체 생성 → 사용 → 참조 해제 → GC(Garbage Collection)
Servlet (자바 웹)init()service()destroy()
Spring Framework (빈 관리)생성자 → 의존성 주입(@Autowired) → 초기화(@PostConstruct) → 사용 → 소멸(@PreDestroy)
Android (앱 화면)onCreate()onStart()onResume()(사용 중)onPause()onStop()onDestroy()

0개의 댓글