코린이 탈출기

Context 본문

안드로이드/안드로이드

Context

50HEE 2021. 9. 30. 21:49

Context는 단어 뜻으로는 문맥, 맥락을 의미합니다. 이러한 뜻과 비슷하게 현재의 상태를 나타낸다고 생각하면 됩니다.

 

Context의 본문의 경우 아래의 사이트를 참고하시면 됩니다. 하지만 읽어도 이해하기가 어렵기 때문에 다양한 글을 읽고 정리해보았습니다.

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

 

Context  |  Android Developers

 

developer.android.com

 

 

안드로이드에서의 Context를 정리해보겠습니다.

Application의 현재 상태를 나타냅니다.

Activity와 Application의 정보를 나타냅니다.

Resource, Database, SharedPreferences에 접근하기 위해 사용할 수 있습니다.

Appllication과 Activity 클래스의 부모 클래스입니다.

 

 

Context는 안드로이드 앱 개발을 할 때 모든 곳에서 쉽게 접근할 수 있고, 중요한 요소입니다. 

그래서 Context를 잘 이해하고 사용해야 합니다.

 

이러한 Context는 어떤 위치에서 어떤 Context를 대입할지 헷갈리는 경우가 있습니다.

잘못 대입할 경우에는 메모리 누수가 발생할 수 있습니다. 예를 몇 가지 들어보겠습니다.

ViewModel 등에서 Activity를 멤버 변수로 참조하는 경우, Singleton에서 Activity를 참조하는 경우 등이 있습니다.

 

 

헷갈릴 수 있는 Context 중 대표적인 Context 두 개를 설명하겠습니다.

 

 

Application Context

Application에 관한 정보를 담은 Application 단의 Context입니다. 코틀린에서는 Activity에서 applicationContext라는 변수를 통해 접근이 가능합니다. 이 Context는 애플리케이션 단의 생명주기와 바인딩되어있습니다.

Application Context는 생명주기가 현재 Context와 분리된 상황이나 Activity 범위보다 큰 Context를 전달할 때 사용합니다.

만약 Activity보다 큰 Application 범위 내에서 Activity를 참조하게 되면 메모리 누수가 발생합니다. Application이 유지되는 동안 Activity는 가비지 콜렉팅이 되지 않기 때문입니다.

라이브러리를 초기화하는 경우 Application Context를 활용하는 이유입니다.

Activity Context

Activity 관한 정보를 담은 Activity 단의 Context입니다. 이 Context는 Activity단의 생명주기와 바인딩되어있습니다. Context는 Activity 마다 존재합니다.

Activity 범위 내에서 Context를 전달하거나 현재 Context에 생명주기가 엮여있는 Context가 필요한 경우에만 사용합니다.

예를 들면, Activity에서 사용되는 Dialog, Toast 등 UI 작업에 필요한 Context는 Activity Context를 사용합니다.

 

 

정리를 하면 Activity나 Service 이외의 컴포넌트나 객체에서 Context 참조가 필요한 경우에는 Application Context를 사용합니다.

'안드로이드 > 안드로이드' 카테고리의 다른 글

ConstraintLayout - match_constraint(0dp) vs match_parent  (0) 2022.04.10
Vector Asset  (0) 2021.09.29
start vs left / end vs right  (0) 2021.09.06
Constraint Layout (1) - Relative Positioning  (0) 2021.09.06
isEmpty vs isBlank  (0) 2021.09.06
Comments