context , 안드로이드 앱 개발을 시작했다면 한 번은 마주쳤을 단어입니다.
이가 무엇을 뜻하는 지 부터 알아봅시다.
Android Studio 에서의 Context
Context 의 사전적 정의는 맥락, 문맥입니다.
그럼 Android Studio 에서의 Context는 애플리케이션의 맥락이 되겠네요!
무슨 기능을 하죠 ?
- Context는 애플리케이션의 맥락으로 어플리케이션의 현재 상태를 갖고 있습니다.
- 따라서 시스템이 관리하고 있는 어플리케이션, 액티비티의 정보 를 얻을 수 있는데요.
- 어플리케이션 정보는 Application Context 로,
- 액티비티 정보는 Activity Context 로 얻을 수 있음
Application 과 Activity 이 기능이 다르듯
Application Context 와 Activity Context의 기능도 굉장히 다른데 어떻게 다른 지도 보겠습니다.
( Application과 Activity 둘 다 Context를 확장한 서브클래스 입니다)
Application Context
Application
네 맞습니다, Manifest.xml 에서 당당히 맨 윗자리를 차지한 그 Application
Context를 확장한 Application 클래스
Application Context
- 안드로이드 애플리케이션 그 자체로, 현재 애플리케이션 상태를 표현합니다.
- ( 애플리케이션의 생명주기를 나타냅니다. )
- ex) MyApplication 라는 클래스가 있다면, Application context는 MyApplication 전용 인스턴스 입니다.
언제 사용해 ?
- 생명주기가 현재 Context와 분리된 Context가 필요할 때
- Activity 범위보다 큰 Context를 전달할 때
주의점
- Application의 범위는 Activity보다 크기 때문에 만약 Application 내에서 Activity를 참조하게 되면 메모리 누수가 발생합니다!
- 앱개발에 사용되는 많은 라이브러리들이 초기화에 Context가 필요한데 이때 Activity가 아닌 Application을 일반적으로 요구하는 이유가 바로 이점입니다.
Activity Context
Activity
Activity Context
- Activity 이자, Activity를 표현합니다.
- (Activity의 생명주기에 묶입니다 )
- ex) MainActivity 라는 클래스가 있다면 Activity Context는 MainActivity 전용 인스턴스 입니다.
언제 사용해 ?
- Activity 범위 안에서 동작이 끝나는 작업을 할 때 사용
- GUI와 관련된 작업에 컨텍스트가 필요한 경우 사용
(UI 와 관련된 동작들, Toast, dialog 등)
✓ 그림으로 이해
여러개의 Activity 와 하나의 Application 으로 동작하는 일반적인 구조입니다.
이 때 어떤 Context를 참조하는 지 생각해보면,
MyApplication : Application Context
MainActivity : Application Context , MainActivity Context
SubActivity : Application Context , SubActivity Context
이와 같습니다~!
참고
https://charlezz.medium.com/안드로이드의-context를-이해하고-메모리-누수를-방지하기-b092a09ef4ef