2023. 5. 28. 17:00ㆍandroid
이번 편에서는 안드로이드 context란 무엇인가에 대해 다뤄보도록 하겠습니다. 여타 프로젝트에서 Context를 사용하고 구글링으로 다른 코드들을 참고하려고 보면 Context가 있는 걸 봤어도 왜 사용하는지 무엇인지에 대해 깊게 고민해 본 적은 없었습니다. 그래서 막연하고 막막하였습니다. 지금 적으면서 똑같지만 이 끝에는 그래도 처음과 다르지 않을까 기대해 봅니다.
Context란 무엇인가
Context를 찾아보면 여러 블로그에 정의한 포스트들이 있습니다. 그것들을 전부 다 모아서 한번 살펴보겠습니다.
컨텍스트는 시스템에 대한 핸들입니다. 리소스 확인, 데이터베이스 및 기본 설정에 대한 액세스 권한 획득 등과 같은 서비스를 제공합니다.
애플리케이션(객체)의 현재 상태의 맥락(context)을 의미합니다. 컨텍스트는 새로 생성된 객체가 지금 어떤 일이 일어나고 있는지 알 수 있도록 합니다. 따라서 액티비티와 애플리케이션에 대한 정보를 얻기 위해서는 컨텍스트를 사용하면 됩니다.
또한, 컨텍스트(Context)는 시스템의 핸들과도 같습니다. 리소스. 데이터베이스, preferences 등에 대한 접근을 제공합니다.
Context는 애플리케이션 환경에 대한 글로벌 정보를 갖는 인터페이스입니다. Context는 Android 시스템에서 구현체를 제공하는 추상 클래스로, 애플리케이션 별 리소스 및 클래스 접근에 사용되며, 액티비티 실행, 브로드캐스트, 인탠트 수신 등과 같은 애플리케이션 수준 작업에 사용됩니다
애플리케이션의 현재 상태를 나타낸다. 액티비티와 애플리케이션의 정보를 얻기 위해 사용할 수 있다. 리소스, 데이터베이스, shared preference 등에 접근하기 위해 사용할 수 있다. 액티비티와 애플리케이션 클래스는 Context 클래스를 확장한 클래스이다.
애플리케이션 환경에 대한 전역정보가 컨텍스트로 연결됩니다. Context는 구현이 Android 시스템에 의해 제공되는 추상 클래스입니다. 애플리케이션 별로 리소스 및 클래스에 대한 접근은 물론 Activity의 실행, 브로드 캐스팅 및 Intent수신과 같은 애플리케이션 레벨에 대한 호출을 허용합니다
Context는 응용 프로그램 환경에 대한 전역 정보를 포함하는 인터페이스입니다. 컨텍스트를 통해 애플리케이션별 리소스(문자열, 테마, 자산 등) 및 클래스에 액세스 할 수 있습니다. 마찬가지로 시작 활동, 방송 및 의도 수신과 같은 애플리케이션 수준 작업을 처리합니다. 즉, Context는 환경 데이터를 가져오는 핸들을 나타냅니다.
공통적으로 Context는 시스템, 환경, 애플리케이션 상태 등을 말하고 있습니다. 다른 것들도 거의 대부분 이러한 이야기를 하고 있습니다.
종합해 보면, Context는 현재 애플리케이션의 상태와 시스템에 대한 환경 정보에 접근하기 위한 인터페이스이다.
아직도 근데 잘 모르겠네요. 일단 Context를 이용해 다양한 정보와 데이터를 가져올 수 있다고 생각이 됩니다. 여기까지만이라도 이해해 보고 넘어가 보도록 하죠. 감만 잡고.
Context는 그럼 누가 상속할까? 를 생각해 보죠.
https://developer.android.com/reference/android/content/Context
여기를 들어가 보면 하위 클래스가 있습니다.
Context 밑에는 ContextWrapper라는 직접 하위 클래스가 있습니다.
ContextWrapper의 하위 클래스에는 익숙한 Application 클래스와 Service 등 다양한 클래스
그 밑으로는 Application, Service 등 눈에 익숙한 클래스들로 있습니다.
여기서 ContextThemeWrapper 클래스를 들어가면
하위 클래스에 Activity 클래스가 있습니다.
Context거의 모든 컴포넌트들의 꼭대기에서 갈라지고 있습니다. 얼마나 많은 것들이 상속받고 있을지 모르겠습니다.
이렇듯 Context를 이용하면 전체를 관통하는 시스템, 환경, 앱 데이터 등 다양하고 중요한 정보들을 얻을 수 있게 될 것입니다.
하나의 예로, Content Provider의 기능인 contentResolver를 사용하기 위해서는 아래와 같이 해야 합니다.
context.contentResolver.query()
이것 외에도 아주 많은 곳에서 Context를 가지고 사용합니다.
Context는 결국 현재 앱의 상태와 데이터, 시스템 정보에 접근하기 위한 일종의 정보 집합이면서 동시에 ID 카드 같은 느낌이 듭니다. 그래서 아래와 같이 4가지의 특징을 가지고 정의하게 됩니다.
- Application의 현재 상태를 Context를 통해 표현한다.
- Activity 그리고 Application의 정보를 Context를 통해 얻을 수 있다.
- Context를 활용하여 Resource, Database, SharedPrefernces 등의 시스템 자원을 얻을 수 있다.
- Application과 Activity 클래스 둘 다 Context를 확장한 서브클래스다.
Context에는 크게 두 가지가 있습니다.
1. Application Context
2. Activity Context
Application Context
1. 애플리케이션의 전역 정보를 담고 있다.
2. 애플리케이션 라이프 사이클과 함께 한다.
2. 액티비티의 범위를 벗어난 곳에 Context가 필요할 때 사용 > 잘못 사용하면 Memory Leak
3. 싱글톤 패턴에 사용
Activity Context
1. 액티비티 라이프 사이클 안에서 사용 가능. 벗어날 수 없다.
2. 액티비티가 소멸할 때 함께 소멸.
3. 다이얼로그, Toast 등 사용하는 건 액티비티 안에서 이루어지므로 Activity Context를 이용한다.
Context는 `상황, 맥락, 문맥 상의 의미` 등으로 이해되는 용어이면서 그냥 텍스트(Text)처럼 바로 이해되는 단순히 원본 정도가 아니라, 문맥 및 상황에 따라, 어떤 해석이 가미되어 이해되는 한 차원 높은 공간, 영역을 의미한다고 하는데
글을 읽을 때도 맥락 상, 문맥 상이라는 개념을 많이 보았습니다. 글의 맥락 상 알맞은 것은?? 문제를 보면 분명 오지선다 중에 하나는 글에서 얻을 수 있는 것과 다른 말을 하는 걸 고를 수 있습니다.
이것과 같다는 느낌이 Android Context에 대해 생각할수록 비슷합니다. 불분명한 개념이 점점 구체화하는 느낌입니다.
Application Context는 하나의 Application안에서 그 Application을 관통하는 다양한 정보를 포함하고 있으며, 상황에 맞게 Application 안에서 참조하고 사용할 수 있다고 생각합니다. Application이라는 맥락에서 볼 때 말이 되면 되니까요. 또한 Activity Context는 Activity라는 문단 안의 맥락을 생각해 보면 다른 문단에서 볼 때 Activity Context는 분명 어색한 관계가 되겠죠.
참 추상적인 개념을 머릿속에 구체화, 실체화시키기란 어렵습니다. 오늘은 이렇게 Context에 대해 잠시 생각해 보는 시간을 가졌습니다. 잘못되거나 틀린 부분이 있다면 댓글 부탁드립니다! 읽어주셔서 감사합니다.
'android' 카테고리의 다른 글
Android Bitmap rotate, resize, combine Kotlin (0) | 2023.07.28 |
---|---|
Android Service 정리 자세하게 (0) | 2023.06.01 |
android contentProvider를 이용하여 공유 저장소 미디어 파일에 엑세스 하는 방법을 통한 예시와 공홈 번역 및 공부 (0) | 2023.05.27 |
Retrofit2 MockServer test case 작성 (0) | 2023.04.27 |
JUnit4를 이용한 Room DabaBase Test (0) | 2023.04.23 |