Android 앱은 제한된 메모리로 실행되며 메모리 압박 시 시스템이 앱을 종료하는 대상이 됩니다. 메모리 관리 — 특히 메모리 누수 방지(흔하고 심각한 Android 문제) — 를 이해하는 것은 안정적이고 성능 좋은 앱에 중요합니다.
Android 메모리 기초
→ 앱은 제한된 힙을 가짐; 시스템이 메모리 회수를 위해 백그라운드 앱을 종료할 수 있음
→ 가비지 컬렉션이 도달 불가한 객체를 회수 — 하지만 GC 일시정지가 jank를 유발할 수 있고,
도달 가능한 상태로 남은 객체(누수)는 절대 회수되지 않음
→ 저메모리 기기가 흔함 (Android의 범위) → 메모리 효율이 중요
메모리 누수 — 흔한 문제
누수 = 더 이상 필요 없지만 여전히 참조되는 객체 (GC가 해제할 수 없음).
고전적 Android 누수:
✗ Activity/Context 참조를 lifecycle 너머로 보유:
- Activity/Context를 보유하는 정적 필드나 singleton
- Activity를 캡처하는 오래 사는 리스너/콜백
- Activity를 보유하는 내부 클래스 / 취소되지 않은 coroutine / handler
→ Activity가 소멸 후 GC될 수 없음 → 전체 view 트리가 누수 (큼!)
