JVM이 프로그램을 실행할 때 .class 파일을 메모리로 불러옵니다.
ClassLoader에 의해 이루어지고,
클래스 로딩 → 링크(Linking) → 초기화(Initialization) 순서로 진행됩니다.
new 키워드를 통해 객체가 힙 메모리에 생성됩니다.
생성자(Constructor)가 호출되어 객체 초기화가 이루어집니다.
MyClass obj = new MyClass(); // 생성자 호출
생성된 객체는 메서드 호출, 필드 접근 등으로 사용됩니다.
프로그램의 로직 대부분이 이 단계에서 작동합니다.
더 이상 객체에 대한 참조가 없을 때 GC(Garbage Collector)의 대상이 됩니다. 직접 제거하는 것이 아니라 JVM이 자동으로 제거할 시점을 판단합니다.
obj = null; // 참조 해제
GC가 객체를 힙 메모리에서 제거합니다.
필요 시 finalize() 메서드가 호출될 수 있으나, 지금은 Deprecated(비권장) 상태입니다.
🔁 전체 흐름 요약
클래스 로딩 → 객체 생성 → 객체 사용 → GC 대상 → 객체 소멸
📌 참고: 자바 애플리케이션의 전체 생명주기 (Main 기준)
public static void main(String[] args) 메서드를 시작으로 프로그램이 실행됩니다.
이 안에서 여러 객체가 생성되고 사용되며 종료됩니다.
예를 들어, Java Web(Servlet)에서는 객체 생명주기가 더 복잡해지고, Spring에서는 Bean 생명주기가 따로 있습니다.
✅ 1. 일반 자바 애플리케이션 (Java SE)
앞서 말한 객체 중심 생명주기를 따릅니다.
생명주기 요약
클래스 로딩 → 객체 생성 → 사용 → 참조 해제 → 가비지 컬렉션 → 객체 소멸
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() |