반응형
Context
우선 공식문서에 따른 Context의 정의는
이렇게 정의되어있다. 영어로 정의되어있는 내용을 한국어로 해석하여 이해할때 여러 어려움이 존재한다.
그에 따라 지금부터 Context의 대한 내용을 조금더 찾아보며 정리하겠다.
Context 란?
Context 는 뜻 그대로 해석한다면 애플리케이션 현재 상태의 맥락(Context)를 뜻한다.
새롭게 생성된 객체가 지금 무슨일이 일어나고 잇는지를 알 수 있도록 한다.
그에 따라 애플리케이션과 액티비티에 대한 정보를 얻기 위해서는 Context를 사용하면 된다.
Context는 크게 두가지의 역할을 하고 있는 추상 클래이이다.
- 앱에 관하여 시스템이 관리하고 있는 정보에 접근한다. (resource , class , 애플리케이션 환경 정보)
- 안드로이드 시스템 서비스에서 제공하는 API 호출 ( startActivity() , bindService() )
종류
Application Context
- Application 생명주기에 귀속된다.
- 싱글톤 - 앱이 죽기 전까지 동일한 하나의 객체를 반환한다.
- getApplicationContext() 를 통해 접근한다.
- 어떠한 Context보다도 오래 유지된다.
Activity Context
- Activity 생명주기에 귀속된다.
- getContext() 를 통해 접근한다.
- Activity의 범위 내에서 Context를 전달한다.
그렇다면 어떤 Context를 언제 사용해야할까?
데이터베이스를 관장하는 AppDatabase 처럼 싱글톤으로 존재하는경우 초기화할때 context가 필요하게 되는데 그때 activity context로 전달하게 된다면 Activity의 생명주기에 따라 어느 시점에 context는 소멸이 될것이다.
하지만 AppDatabase는 싱글톤이기 때문에 해당 Activity Context를 지속적으로 참조하게 되어 메모리 누수가 발생되게 된다. 이럴때는 Application Context 를 사용하는것이 바람직하고
GUI에 관련된 것들에는 Application Context가 정상적으로 동작하지 않을 수 있기 때문에 무조건적으로 Application Context를 쓰는것 또한 바람직하지 않다.
생명주기에 따른 범위(Scope)를 명심하여 Context를 참조하여야 한다.
반응형
'안드로이드(Kotlin)' 카테고리의 다른 글
Kotlin 코틀린의 RecyclerView (0) | 2022.08.25 |
---|---|
Kotlin 코틀린의 SharedPreferences (0) | 2022.08.08 |
Kotlin 코틀린의 Handler 와 Looper (0) | 2022.08.04 |
Kotlin 코틀린의 Intent와 Inflate (0) | 2022.08.04 |
Kotlin 코틀린의 Layout (0) | 2022.08.04 |