안드로이드에서 context는 안드로이드 개발자라면 정말 많이 마주치는 녀석입니다. 하지만 그렇게 많이 사용해도 context의 정확한 의미와 기능을 아는 개발자는 많지 않을것이라고 생각합니다. 그래서 이 글에서 context가 무엇인지 그리고 어떤 기능을 하는지 정리를 해보겠습니다.
우선 안드로이드 공식 문서에서의 context 정의를 보도록 하겠습니다.
Interface to global information about an application environment. This is an abstract class whose implementation is provided by the Android system. It allows access to application-specific resources and classes, as well as up-calls for application-level operations such as launching activities, broadcasting and receiving intents, etc.
공식 문서에 따르면 context는 어플리케이션 관련 리소스와 클래스를 제공해주는 추상 클래스라고 하고 있습니다. 또한 어플리케이션 작업인 Activity 실행, intent 수신, 브로드캐스팅 등을 수행하기 위한 API를 호출할 수 있는 기능을 갖고 있다고 하고 있습니다. 즉 Activity 나 Application에 대한 정보를 얻기 위해서는 context를 사용하면 되는것 입니다.
즉 context는 2가지 기능을 가진 Abract 클래스 입니다.
우리가 안드로애드 앱 개발을 하면서 대표적으로 getPackageName(), getResouse(), startActivity() 그리고 bindService()와 같은 메서드들을 제공해주는 클래스입니다. 즉 시스템 기능 및 서비스를 사용할 수 있도록 해주는 연결 포인트로 안드로이드 어플리케이션의 핵심 기능을 위한 중심부 역할.
"어플리케이션이 실행되고 종료될때까지 동일 객체"
Application context는 singleton instance (전역 변수를 사용하지 않고 객체를 하나만 생성 하도록 하며, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 패턴)이며 getApplicationContext()를 통해 접근할 수 있다. Application Context는 라이프 사이클과 연결되어 있다. Application context는 현재 보여지는 Activity context와 분리되어 있는 라이프 사이클을 갖고 있기 때문에 분리된 context가 필요할때 또는 Activity의 범위 밖에서 context를 전달할 때 사용합니다.
즉, 어떤 context보다 더 오래 유지되는 context를 사용하고 싶을때 사용되는 context이다. Activity context는 Activity가 destroy되면 사라지는 반면 context인 Application context는 전역(앱 전체)으로 사용되는 context이다.
"Activity가 onCreate으로 생성되고 onDestroy로 종료될때 사라질 수 있는 객체"
Activity Context는 Activity 안에서 사용되고 Activity의 라이프사이클과 연결되어있다. 라이프 사이클이 Activity에 붙은 객체를 생성할때 사용된다.