Android

[Android] Kotlin Context 란 ?

izongg 2023. 5. 31. 16:51

 

Kotlin 개발을 하다보면 Context를 인자로 주는 경우가 많다. 

지금까지는 this, requireContext(), context as MainActivity 등 아무거나 넣어보고 작동이 되는걸로 사용만 하고, 제대로된 이해를 하지 못했다.

그래서 이번 기회에 완벽히 이해하고 넘어가고자 한다.

 

첫번째로 Android Developer 공식 문서를 보면 

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는 안드로이드 시스템에서 제공하는 추상 클래스이며, 애플리케이션 별 자원이나 클래스에 접근할 수 있도록 한다. 라는 말인 것 같다. 확실히 공식문서를 보고 이해하기란 쉽지 않다.

 

다음엔 ChatGPT에 물어보았다.

Kotlin에서 context는 안드로이드 애플리케이션의 현재 상태와 관련된 정보를 제공하는 객체입니다. Context는 안드로이드 애플리케이션의 컴포넌트(예: Activity, Service, Application)와 관련된 정보에 접근하고, 시스템 서비스를 호출하고, 리소스에 액세스하는 데 사용됩니다.

공식 문서와 비슷한 듯 싶지만 확실히 이해하기 쉬운 것 같다.

 

첫번째 문장을 보면 내가 생성한 애플리케이션이나 객체에다가 현재 상태, 내가 속한 그룹, 관련된 정보 등을 Context를 통해 알려준다고 이해하면 될 것 같다.

 

그런데 문제는, 내가 어떻게 알고 저걸 알려주냐는 것이다. 

그럼 어떤 Context가 뭐를 의미하는지를 알아야 할 필요가 있다.

 

Context는 크게 Application Context 와 Activity Context로 나뉜다. 

 

Application Context

Application 생명주기에 귀속되며 싱글톤으로 구현되어 있다.
그러므로 Application이 살아있는동안 동일한 하나의 객체를 반환하며,
Application이 살아 있는 동안에는 변경되지 않는다.  
하지만 GUI와 관련된 작업은 불가능 하다.
현재의 Context와 분리된 라이프 사이클을 가진 Context가 필요할 때나 액티비티의 범위를 넘어서 Context를 전달할 때 사용한다.

Activity Context

Activity의 생명주기에 귀속되며, Activity가 destroy 될때 같이 destroy된다.
그러므로 Activity가 종료되었을 때도 남아 있어야 한다면 Activity Context가 아닌 Application Context를 사용해야 한다.
Activity는 UI화면을 가지고 있으므로 GUI작업이 가능하다.

 

이렇게 두가지로 정리 해볼 수 있다. 실제 작업을 하다보면 Activity Context를 사용하는 경우가 많은 것 같다.

 

추가적으로, Fragment를 다룰때도 Context를 사용할 경우가 많은데, 이때는 대부분 requireContext()를 사용하였다.

지금까지 무슨 의미인지 모르고 사용하였다. 

생각보다 간단하였다. 그냥 Fragment가 속해있는 Activity의 Context를 가져와서 쓰는 것이었다.

 

 


reference:

https://developer.android.com/reference/kotlin/android/content/Context

https://june0122.tistory.com/16