- 안드로이드 Context는 앱의 현재 상태를 파악하여 토스트 메시지, 리소스 접근 등 다양한 기능을 수행하게 돕는 핵심 요소입니다. 💡
- ApplicationContext는 앱 전체 수명 주기를 가지며 전역 리소스(DB, SharedPreferences) 접근에 적합하지만, 화면 정보가 없어 UI 작업에는 부적합합니다. 🌍
- ActivityContext는 Activity 수명 주기에 연결되어 짧으며, 현재 화면 정보가 있어 UI 관련 작업에 주로 사용됩니다. 🖼️
- 수명이 짧은 ActivityContext를 외부 싱글톤이 참조하면 메모리 릭이 발생하여 앱 성능 저하 및 강제 종료를 유발할 수 있으므로, 오래 살아야 하는 경우 ApplicationContext를 사용해야 합니다. 💧
- View나 Fragment에서는
getActivity(), getContext(), requireContext()를 통해 Context를 참조하며, 각각 반환 타입과 기능, 사용 범위에 차이가 있습니다. 🧩
- Activity에서 ApplicationContext를 참조할 때는
getApplicationContext()로 앱의 Context를 얻거나, getApplication()으로 커스텀 Application 인스턴스를 얻을 수 있습니다. ⚙️
getBaseContext()는 원본 ContextImpl을 반환하여 커스텀 Context 주입에 사용되지만, ApplicationContext처럼 화면 정보가 없어 UI 컴포넌트에는 부적합합니다. 🏗️
- Context는 ContextImpl의 복잡한 내부 구현을 ContextWrapper와 ContextThemeWrapper로 감싸는 보호 프록시 패턴을 적용하여 개발자의 오용을 방지하고 시스템 안정성을 확보합니다. 🛡️
- Context의 내부 구현에 너무 집착하기보다는, 현재 코드의 문맥에 맞춰 적절한 Context를 선택하고 사용하는 것이 중요합니다. ✅
데브허브 | DEVHUB | [10분 테코톡] 제리의 Context란?