안드로이드 Context?

YAMAMAMO·2021년 11월 5일
0

안드로이드

목록 보기
3/13

안드로이드 프로그래밍을 하며 제일 흔하게 인자로 사용되는 타입이 Context 입니다. Context를 잘못 사용하면 앱이 비정상 종료되거나 메모리 누수가 발생하기도 합니다. 이번 포스팅은 Context에 대해 정리해 보겠습니다.

사전적 정의 네이버사전

1.[명사](어떤 일의) 맥락, 전후 사정

2.[명사](글의) 맥락, 문맥

Context?

Multi-Tasking을 지원하는 운영체제에서 Task들은 운영체제가 정한 기준에 따라 작업을 번갈아 가면서 수행한다. 이때, 해당 Task들의 수행상태를 기억하기 위해서 Task마다 실행 상태에 대한 정보를 구성하고 있는 것들을 Context라고 한다.

Android 개발 문서

Context는 애플리케이션 환경에 대한 글로벌 정보를 갖는 인터페이스입니다. Context는 Android 시스템에서 구현체를 제공하는 추상 클래스로, 애플리케이션 별 리소스 및 클래스 접근에 사용되며, 액티비티 실행, 브로드캐스트, 인탠트 수신 등과 같은 애플리케이션 수준 작업에 사용됩니다.

Android에서 Context?

Android에서 여러가지 형태의 실행 형식(Activity, Service 등)을 가지고 있다. 그래서 클래스 구현상 중복된 정보들이 있을 수밖에 없다. 이러한 중복된 정보들을 줄이고 일원화 시키기 위해서 실행 클래스들의 상위 클래스로써 Context 클래스를 제공한다. 따라서 Android에서 모든 실행 형식을 가지는 클래스들은 Context를 상속 받아 설계되어 있기 때문에 다형성을 적용하여 코드를 통일성있게 표현할 수 있다.

  • 애플리케이션의 현재 상태를 나타낸다.
  • 액티비티와 어플리케이션의 정보를 얻기 위해 사용할 수 있다.
  • 리소스, DB, SharedPreference 등에 접근하기 위해 사용할 수 있다.
  • 액티비티와 애플리케이션 클래스는 Context 클래스를 확장한 클래스이다.

Application Context

Application Context는 싱글턴 인스턴스이며, 액티비티에서 getApplicationContext()를 통해 접근할 수 있다. 이 컨텍스트는 애플리케이션 라이프사이클에 묶여있으며, 현재 컨택스트가 종료된 이후에도 컨텍스트가 필요한 작업이나 액티비티 스코프를 벗어난 컨택스트가 필요한 작업에 적합하다.

예를 들어, 애플리케이션에 싱글턴 오브젝트를 생성하고, 해당 오브젝트가 컨텍스트가 필요하다면 항상 애플리케이션 컨텍스트를 사용해야 한다. 만약 액티비티 컨텍스트를 전달한다면, 해당 오브젝트가 액티비티를 항상 참조하므로, 액티비티가 화면에 표시되지 않는 순간에도 가비지 콜렉션이 진행되지 않아 메모리 누수가 발생한다.

애플리케이션 전체에서 사용할 라이브러리를 특정 액티비티에서 초기화할 때 어플리케이션 컨텍스트를 사용해야 한다.

Activity Context

액티비티 컨텍스트는 액티비티 내에서 유효한 컨텍스트입니다. 이 컨텍스트는 액티비티 생명주기와 연결되어 있습니다. 액티비티 컨텍스트는 액티비티와 함께 소멸해야 하는 경우에 사용한다. 예를 들어, 액티비티 생명주기와 같은 객체를 생성해야 할 떄 액티비티 컨텍스트를 사용할 수 있다.

항상 가능한 가까운 컨텍스트를 사용해야 합니다. 액티비티에 있다면 액티비티 컨텍스트를, 애플리케이션에 있다면, 애플리케이션 컨텍스트를 사용합니다. 싱글턴의 경우에는 애플리케이션 컨텍스트를 사용합니다. 참조가 해당 컴포넌트의 생명주기를 넘어서지 않는 이상 메모리 누수 걱정 없이 컴포넌트를 유지할 수 있습니다. 액티비티나 서비스 이외의 객체에서 컨텍스트들을 참조해야 하는 경우 애플리케이션 컨택스트를 사용해 주세요.

참고

https://roomedia.tistory.com/entry/Android-Context란-무엇일까

https://enjoyplaying.tistory.com/7

profile
안드로이드 개발자

0개의 댓글