[Android] Context

강승구·2023년 7월 9일
0

context란 추상클래스로 Application environment의 global한 정보에 접근하기 위한 인터페이스이다.
context란 어플리케이션(객체)의 현재 상태의 맥락을 의미한다.

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

Context의 종류

Aplication Context

Aplication Context는 싱클톤 인스턴스이며 액티비티에서 getApplicationContext()를 통해 접근할 수 있다. 이 Context는 애플리케이션의 라이프 사이클과 연결되어 있으며, Application Context는 현재의 Context와 분리된 라이프 사이클을 가진 Context가 필요할 때나 액티비티의 범위를 넘어서 Context를 전달할 때 사용한다.


Activity Context

Activity Context는 액티비티에서 사용 가능하며, 이 Context는 액티비티의 라이프 사이클과 연결되어 있다. 액티비티의 범위 내에서 Context를 전달하거나, 라이프 사이클이 현재의 Context에 attach된 Context가 필요할 때 Activity Context를 사용할 수 있다.


예시

context는 TV를 조종하는 리모컨이라고 생각할 수 있다. TV를 앱이라고 한다면 TV의 다양한 채널들은 앱의 자원들이라고 할 수 있다.

리모컨은 TV의 다양한 채널(자원)들에 접근할 수 있게 해준다.
리모컨은 자원에 접근할 수 있게 해주는 역할을 하기 때문에 리모컨을 가진 사람은 당연히 자원에 접근할 수 있다.

context를 얻는 방법으로는 getApplicationContext(), getContext(), getBaseContext() 혹은 this(Context를 확장한 class의 경우)등이 존재한다.

//this -> 리모콘 (context)
TextView tv = new TextView(this);

Context 관련 메소드

  • View.getContext()
    현재 실행되고 있는 View의 context를 리턴하는데 보통은 현재 활성화된 액티비티의 context가 된다.
  • Activity.getApplicationContext()
    애플리케이션의 context가 리턴된다.
    현재 액티비티의 context 뿐만 아니라 애플리케이션의 라이프 사이클에 해당하는 context가 사용된다.
  • ContextWrapper.getBaseContext()
    자신의 Context가 아닌 다른 Context에 접근하려 할 때 사용한다.
    ContextWrapper는 getBaseContext()를 경유해서 Context를 참조할 수 있다.
  • this
    Context를 상속하는 Application, Activity, Service, IntentService와 같은 클래스들 내부에서 context를 참조할 때 사용할 수 있다.
profile
강승구

0개의 댓글