1. 공식문서 정의
안드로이드 공식 문서의 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.
여기서 눈여겨 봐야할 부분은 크게 2가지이다.
첫째, 애플리케이션 별로 리소스 및 클래스에 대한 접근을 가능하게 한다.
둘째, 애플레이션 레벨에서 Activit의 실행, 브로드 캐스팅, Intent 수신을 가능하게 한다.
2. 상속도
상속도를 보면 Application, Activity, Service 모두 context를 상속받아 구현되는 것을 확인할 수 있다.
3. Context란?
상속도에서 보는 것처럼 context는 크게 두 가지 종류로 나눌 수 있다. 앱이 실행될 때 부여 받는 application context, 그리고 각 acivitiy 및 service 등이 실행될 때마다 부여 받는 context로 나눌 수 있다.
그럼 왜 Application, activity, service는 context를 상속받아 만들어지는 것일까?
이는 공식 문서에서 확인했던 두가지의 역할을 실행하도록 하기 위해서이다.
첫째, 애플리케이션 별로 리소스 및 클래스에 대한 접근을 가능하게 한다.
둘째, 애플레이션 레벨에서 Activit의 실행, 브로드 캐스팅, Intent 수신을 가능하게 한다.
첫번째부터 살펴보자.
안드로이드는 시스템 자체적으로 애플리케이션에 대한 정보를 관리하는 것이 아니라 ActivityManagerService라고하는 또 다른 어플리케이션에 의해 관리가 된다. 그래서 애플리케이션에 대한 정보에 접근할 때 통로 역할 및 자신이 나타내는 애플리케이션의 ID 역할을 해줄 수 있는 context가 필요해진다.
두번째는 애플리케이션 레벨에서의 필요성이다.
Activity는 애플리케이션이 현재 실행 중인 환경에 대한 핸들과 같고, 각 Activity가 실행이 될 때 context를 부여 받게 된다.
부여 받은 context를 통해 Activity의 실행, Intent 수신, 브로드 캐스팅 수신 등을 해당 Activity에서 핸들링될 수 있도록 해준다.
즉, Acitivity 든 Service 든 각 실행될 수 있는 문맥을 만들어줘 두번째 역할을 할 수 있도록 하는 것이다.
context라는 개념은 느슨하게 여러 개념들과 연관되어 있어 콕 집어 정의 내리기가 어렵다.
그래서 최대한 기본 개념에 집중해서 정리를 해보았다. 이러한 뼈대를 토대로 디테일한 내용을 추가하면 될 듯하다.
[참고]
https://developer.android.com/reference/android/content/Context
'안드로이드 > 개념' 카테고리의 다른 글
[Android/안드로이드] Fragment ( 프래그먼트 ) 정리 (0) | 2021.07.21 |
---|---|
[Android/안드로이드] Activity/Fragment 생명 주기 (0) | 2021.07.21 |
안드로이드 단위 ( px, dp, sp, mm, in ) (0) | 2021.07.02 |