안드로이드

[Android] Context에 대해 알아보자

코딩하는후운 2022. 10. 27. 10:21
반응형

Context란?

- 어떤 객체를 핸들링 하기 위한 접근 수단.

두가지 역할
-어플리케이션에 관하여 시스템이 관리하고 있는 정보에 접근하기
(ex. getPackageName(), getResource())
-안드로이드 시스템 서비스에서 제공하는 API를 호출 할 수 있는 기능
(ex. startActivity(), bindService())

안드로이드는 Context라는 인스턴스화된 매개체를 통해야만 유사한 일들을 수행할 수 있다.

Context는 어플리케이션이 시작될 때, 어플리케이션 컴포넌트들이 생성될때마다 생성된다

ContextWraper

Context의 대리인으로 원본 Context를 변화시키지 않고 수정할 수 있게 해주는 서브 클래스.
보호 프록시 패턴 혹은 어댑터 패턴으로 구현되어 ContextImpl의 변수를 노출하지 않고 ContextWraper에서는
ContextImpl의 공개 메서드만 호출하게 합니다.

ContextImpl

ContextWraper 생성자에 전달되는 아규먼트가 ContextImpl입니다.
ContextImpl는 앱에서 직접 사용할 수 있는 클래스가 아니므로 소스 코드로만 볼수 있습니다.
Context와 컴포넌트 사이에 위치한게 ContextWraper입니다.


ContextWraper는 ContextImpl에서 구현한 함수를 중간에서 일부만 공개해 주거나 수정을합니다.
그렇게 함으로서 컴포넌트(Activity, Service, Application)들이 ContextImpl을 직접 상속해서
Context메소드를 사용하는게 아니라 ContextWrapper을 중간에 두어 Context메소드를 사용하게합니다.



안드로이드 4가지 컴포넌트중 Activity, Service 그리고 Application만이 ContextWraper를 상속하고있습니다.
이는 각각 ContextImpl을 생성하고 ContextWraper에서 getBaseContext()와 getApplicationContext()
메서드를 사용해 Context를 가지고 옵니다.


우리는 Acitivty 에서 3가지 방법으로 Context를 가져옵니다.
1. Activity 인스턴스 자신(this)
2.getBaseContext()를 통해 가져오는 ContextImpl 인스턴스
3.getApplicationContext()를 통해 가져오는 ApplicationContext
이 세 개의 인스턴스는 모드 다른 인스턴스 입니다. 

Context의 올바른 사용

ApplicationContext는 싱글톤 프로세스에서 1개만 존재합니다.
싱글톤과 같은 오브젝트를 초기화 할 때 혹은 전역적으로 사용할 레퍼런스를 초기화 할 때 사용하면 좋다.
반면에 Context는 라이프 사이클을 잘 생각해야합니다.
만약 싱글톤에 Activity의 Context를 사용하면 Activity가 Destroy되어도 메모리에서
제거되지 않습니다.
이는 GC의 대상이 되기 위해서는 모든 객체의 참조가 null이 되어야 하기 때문입니다.
Activity는 파괴되었지만 싱글톤에 참조되어 있기 때문에 제거되지 않고 이는 메모리릭으로 직결됩니다.
따라서,
컴포넌트의 라이프 사이클 안에서만 사용할 경우 Context를 쓰고 전역적으로 사용할 경우에는 ApplicationContext를 사용하자!!

Context 구현 이미지

 

 

 

참조 :

https://www.charlezz.com/?p=1080
https://black-jin0427.tistory.com/220

 

[Android, Context] Context 넌 무엇이더냐?

안녕하세요. 블랙진입니다. 넌 무엇이더냐? 세번째 시리즈로 이번에는 Context에 대해 알아보겠습니다. 지난 시리즈 Thread 넌 무엇이더냐? Handler 넌 무엇이더냐? Context? Interface to global information ab..

black-jin0427.tistory.com

 

안드로이드의 Context | 찰스의 안드로이드

Android의 Context란? Application, Service, Activity 모두 Context를 상속 했다는 사실 알고계셨나요? 공식문서에 나와있는 Context의 개요를 확인해보면, 애플리케이션 환경에 대한 전역정보가 컨텍스트로 연

www.charlezz.com

 

반응형