Android 공부

6. 안드로이드 context

young313 2023. 1. 8. 22:55

안드로이드 개발을 해본 사람이라면 context를 최소 한번은 봤거나 써봤을 것이다. 나도 처음에 context를 인자로 넣거나 사용할 때 아무 생각없이 context를 써왔는데, 계속 개발을 하다 보니 에러가 나기도 하고 에러를 찾다 보니 context에 대한 여러가지 자료가 존재했다. 이번 기회에 context가 정확히 뭔지 정리해보려 한다. 

 


 

context는 어플리케이션의 현재 상태를 가지고 있다. 시스템이 관리하고 있는 activity 나 application의 정보를 담고 있어 이를 얻기 위해 사용한다. 위에서 에러가 발생한 적이 있다고 했는데, context의 잘못된 사용은 메모리 릭 문제로 이어질 수도 있다고 한다. 자세히는 기억이 나지 않지만 내가 마주했던 에러 중 메모리 관련 에러도 있지 않았을까 하는 생각이 든다. 

 

context는 두 가지 종류로 나뉜다. 

 

Application Context

Activity 내에서 applicationContext라는 프로퍼티를 통해 얻을 수 있는 싱글턴 인스턴스로 app의 life cycle과 관련이 있다.

 

*싱글턴에 대해서는 전 게시물을 참고 바란다.

 

5. 안드로이드 Singleton 패턴

singleton 패턴은 아직 개발을 하면서 많이 접한 개념은 아니었다. singleton 패턴이라는게 있고 이런 상황에 쓰는 것이라는 정도만 알고 있었는데 공부를 하면서 singleton 개념과 관련한 글을 발견하

self-motivated-developer.tistory.com

 

그래서 app 전역에서 사용할 라이브러리를 MainActivity 등에서 초기화 하는 경우에 사용할 수 있다. 뒤에서 설명할 Activity context 와는 다른 점이다. 

이렇게 생각하면 복잡하게 activity 를 따지지 않고 app 단의 context를 모두 사용하면 되는 것이 아닌가 하는 생각이 들 수 있지만 해당 context는 모든 기능을 지원하지는 않는다. GUI 관련 동작에 있어 오류가 발생하는 경우가 많다. 

 

 

Activity Context

activity 안에서만 사용이 가능한 context로 특정 activity의 life cycle에 종속되어 있다. activity가 소멸되면 해당 context도 함께 소멸되기 때문에 life cycle을 잘 파악해서 에러가 발생하지 않도록 신경써야 한다. 앞에서도 말했듯 Application Context보다 Activity Context가 더 많은 기능을 제공한다. context를 사용할 때는 가장 가까운 스코프의 context를 골라 사용하는 것이 권장되기 때문에 activity context가 실제로 더 많이 사용되는 경우가 많다. 다만 전역에서 사용된다면 application context를 사용하는 것이 맞다. 

 

 

context에 대한 공식 문서나 자료는 많은 편은 아니지만 개발을 하는 과정에서 아주 많이 사용된다. 관련해서 조금 더 공부할 계획이다.