본문 바로가기
Programming 개발은 구글로/JAVA[Android]

[안드로이드] getContext(), getApplicationContext(), getBaseContext(), this의 차이

by 40대직장인 2022. 4. 18.

Context 

: 애플리케이션 환경에 대한 인터페이스이자, 추상 클래스이다. 즉, 애플리케이션의 현재 상태를 뜻한다. Context를 통해 애플리케이션에 접근할 수 있고, 애플리케이션 수준 작업을 호출할 수 있다.


안드로이드 개발 중 Context에 자주 접근하게 되므로 Context를 잘못 사용하면 메모리 누수가 발생할 수 있다. 따라서 Context에 관한 내용을 확실히 정리하고 넘어가려 한다.

Context에는 두 가지 유형이 존재한다. Application Context와 Activity Context이다. Application Context는 Application 전용 인스턴스이고, Activity Context는 Activity 전용 인스턴스이다.

 

Application Context

싱글톤 패턴으로, getApplicationContext()를 통해 액티비티 내에서 접근 가능한 인스턴스이다. 애플리케이션 라이프사이클과 연결되어 있으며 현재 Context와 분리된 Context가 필요한 경우 사용한다.

Ex) MVVM 패턴 적용 시 Activity의 Context가 아닌 Application Context 접근을 통해 Database에 접근하려는 경우

 

 

관련 글: JAVA 싱글톤 패턴

2022.04.16 - [Programming 개발은 구글로/Android[Java]] - [안드로이드] JAVA 싱글톤 패턴

 

 

Activity Context

액티비티 라이프사이클과 연결되어 있으며 액티비티 수준의 Context가 필요한 경우 사용한다.

Ex) Toast 메시지를 띄우는 것과 같은 UI 작업 시

 

 

액티비티는 자신의 Context와 애플리케이션 Context를 모두 가지고 있으며 getContext() 혹은 this를 사용할 경우 액티비티 Context가 return 된다.

 

  • View.getContext()

     : 현재 실행되고 있는 View의 context를 return 하는데 보통은 현재 활성화된 activity의 context가 된다.

 

  • Activity.getApplicationContext()

     : 애플리케이션의 Context가 return 된다.

       현재 activiy의 context 뿐만 아니라 application의 lifeCycle에 해당하는 Context가 사용된다.

 

  • ContextWrapper.getBaseContext()

     : 자신의 Context가 아닌 다른 Context를 access 하려 할 때 사용한다.

       ContextWrapper는 getBaseContext()를 경유해서 Context를 참조할 수 있다.

 

  • this

     : View.getContext()와 같다.

 

 

 

 

댓글