📌 Android에서 Context란?
말 그대로 애플리케이션의 맥락(context), 즉 현재 상태를 의미한다.
Context 클래스는 추상 클래스로 되어있고, Application, Activity, Service는 이 Context를 상속받아 Context의 기능들을 이용한다.
🧐 그래서 context로 뭘 할 수 있는데?
1. Application과 Activity의 정보를 얻을 수 있다.
2. Resource, Database, SharedPreferences 등의 시스템 자원을 얻을 수 있다.
3. Activity 실행, Intent 브로드캐스팅, Intent 수신 등과 같은 응용 프로그램 수준의 작업을 수행하기 위한 API를 호출할 수 있다.
Android에서 context를 Application context와 Activity context로 나눌 수 있다.
상황에 따라서 이를 적절히 사용해야 애플리케이션의 메모리 누수를 막을 수 있으니 제대로 알고 사용하자😉
📍 Application Context
- Activity에서
getApplicationContext()
를 통해 접근할 수 있으며, singleton 인스턴스이다.
- Application의 라이프사이클과 연결되어 있다.
따라서 그 어떤 context보다 오래 유지된다.
- 언제 사용할까?
1. 현재의 context와 분리된 라이프사이클을 가진 context가 필요할 때
2. Activity의 범위를 넘어서 context를 전달해야할 때
3. 싱글톤 인스턴스에서 참조해야할 때
🚨 주의할 점 🚨
-> Application context가 필요할 때 Activity context를 사용하게 되면 메모리 누수가 발생한다.
Activity context가 Activity에 대한 참조를 계속 유지하기 때문에 Activity가 가비지 콜렉터에 의해 수집되지 않기 때문이다.
📍 Activity Context
- Activity 내에서 사용 가능한 context이다.
- Activity의 라이프사이클과 연결되어 있다.
- 언제 사용할까?
1. 현재 context에 라이프사이클이 엮여있는 context가 필요할 때
2. Activity 범위 내에서 context를 전달할 때
3. GUI와 관련된(Dialog, Toast 등) 모든 것에 context가 필요할 때