Context 란?
“Android 로봇은 Google에서 제작하여 공유한 저작물을 복제하거나 수정한 것으로 Creative Commons 3.0 저작자 표시 라이선스의 약관에 따라 사용되었습니다.”
Context?
직역하면 '맥락'이란 뜻인데, 안드로이드를 잠깐이라도 써 본 사람들은 쉽게 들어봤을 것이다.
당장 많이 사용되는 Toast에서도 첫 매개변수로 Context를 요구한다.
Toast.makeText(context, message, duration).show()
AlertDialog.Builder(context).create()
가장 흔하게 많이 쓰이는 경우가 아닌가 싶다
그렇다면 이 Context는 정확히 무엇일까?
먼저 구글 문서를 참고해보면...
영어가 짧은 관계로 번역기의 힘을 빌려보겠다
애플리케이션 환경에 대한 글로벌 정보에 대한 인터페이스입니다. Android 시스템에서 구현을 제공하는 추상 클래스입니다. 이를 통해 애플리케이션 별 리소스 및 클래스에 액세스 할 수있을뿐만 아니라 활동 시작, 인 텐트 브로드 캐스트 및 수신 등과 같은 애플리케이션 수준 작업에 대한 상향 호출도 가능합니다.
구글 문서에 의하면 Context는 Android에서 구현을 도와주는 추상클래스의 형태로 제공되며
이를 활용하여 리소스 및 클래스에 접근하거나 애플리케이션 수준에서의 작업을 가능하게 해준다고 나와있다.
그 외에도 액티비티의 정보(현재 상태)를 얻기 위해서 사용되기도 한다.
Context에는 2가지 종류가 있다
- Application Context
- 싱글톤 인스턴스
- 애플리케이션의 생명주기에 귀속됨
- Activity의 범위를 넘어서 Context를 전달할 때 사용
- getApplicationContext()로 접근 - Activity Context
- Activity에서 사용가능한 Context로 액티비티 생명주기에 귀속됨
- Activity 범위 내에서 Context를 전달하거나, 현재의 Context를 전달
- getContext()로 접근
Context를 요구하는 클래스를 사용할 때는 어떤 Context를 요구하는지
잘 파악하고 사용해야한다.
이를테면 Activity Context를 요구하는데 Application Context를 사용하면
Activity의 생명주기가 끝나서 종료되어도 Application Context는 메모리에 그대로 남아서
메모리 누수가 발생할 수도 있기 때문이다.
번외로,
Fragment나 RectclerViewAdapter 등 Context를 기본적으로 제공하지 않는 곳이 있다.
Fragment는 생명주기 중 onAttach()를 오버라이딩하면 인자로 context를 받아온다.
RecyclerViewAdapter는 onCreateViewHolder 메소드에서 인자로 받아오는
parent(viewGroup)에서 context를 가져올 수 있다.
개인적으로 공부했던 것을 바탕으로 작성하다보니
잘못된 정보가 있을수도 있습니다.
인지하게 되면 추후 수정하겠습니다.
피드백은 언제나 환영합니다.
읽어주셔서 감사합니다.
Author And Source
이 문제에 관하여(Context 란?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jeep_chief_14/Context-란저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)