단비의 개발블로그

[Android] Context란? 본문

Android

[Android] Context란?

단비냥 2021. 10. 22. 18:51
반응형

Android 개발을 하다 보면 Context라는 것을 굉장히 많이 쓰게 되는데요

항상 자연스레 쓰기만 했던 공기같은 존재라서 오히려 눈에 띄지 않았는데,

많이 쓰는 만큼 중요한 것이라 이번 기회에 Context 개념에 대해 정리해볼까 합니다.

 

먼저 공식 Android 문서 발췌 내용입니다. 나름대로 번역을 해봤습니다.

 

Context는 어플리케이션 환경에 대한 전역 정보의 Interface이다. 이것은 Android 시스템에서 구현을 제공하는 추상 클래스 (Abstract Class)이다. Context는 어플리케이션 별 리소스와 클래스 접근을 허용해 줄 뿐만 아니라 Activity 시작, Intent 수신과 브로드캐스팅 등의 Application 수준 작업의 호출이 가능하다.

 

뭔가 저에게는 바로 와닿지 않아서 더 공부해 보았습니다.

Context란?

Context란 어플리케이션 현재 상태의 맥락(Context)을 의미합니다.

Context는 생성된 객체가 어떤 일이 일어나고 있는지 알 수 있습니다.

크게 두가지 역할을 하는 추상 클래스

  • 앱에 관하여 시스템이 관리하고 있는 정보에 접근 : 리소스, 클래스, 어플리케이션 환경 정보
  • 안드로이드 시스템 서비스에서 제공하는 API 호출 : startActivity(), bindService()

Context의 종류

Application Context

  • Application 라이프사이클에 귀속됨
  • Singleton Instance -> 앱이 죽기 전까지 동일한 객체 반환
  • getApplicationContext()로 접근
  • 어떤 Context보다도 오래 유지됨

☞ Activity Context

  • Activity 라이프사이클에 귀속됨
  • getContext()로 접근
  • Activity 범위 내에서 Context를 전달

메모리 누수 방지

메모리 누수를 피하기 위해 Activity Context에는 수명이 긴 참조를 피하고, 되도록이면 Application Context를 사용해야 합니다. 예를 들면 AppDatabase의 경우, Activity Context를 참조했을 때 Activity는 어느 시점에서 소멸되지만, AppDatabase는 싱글톤이므로 해당 Activity Context를 지속적으로 참조하고 있게되어 메모리 누수를 일으킵니다.

 

하지만 Application Context를 무조건 사용하는 것은 옳지 않습니다.

GUI 작업 등에서는 Activity Context가 필요한 경우가 존재하기 때문입니다. (Dialog, Toast 등등..)

 

즉, 생명주기의 범위를 잘 생각하고 Context를 참조해야 합니다.

반응형
Comments