Android Context 개념

'context라는 무엇인가?' 란 질문을 들었을때 뭐라고 대답해야 할지 애매한 경험 있으신가요?
개발을 하면서 사용 안되는 곳이 없을 정도로 다양한데 정의를 물어보면 사용법 같은걸로
대신 대답을 해서 위기를 모면하는 경우도 참 많았던 것 같습니다.

그래서 context의 개념을 알아보고자 합니다.

context 가장 사용 많이 하는 곳은 어디인가요?
대부분의 개발자들은 Activity를 이야기 할 것이라고 생각합니다.
UI에서 context값은 항상 필수로 사용 됩니다.
이렇게만 사용 할때는 좀 context를 알것 같다 생각이 듭니다.

getApplicationContext() 같이 Application 의 context를 쓰면서 부터는
정말 헷갈리기 시작합니다.
Activity에서는 context를 활용해서 다이얼로그 띄우는등의 UI에서 사용 할수 있었습니다.
getApplicationContext()를 활용 해서는 UI를 그리는 작업은 에러가 나면서 안되는 것을 보면서
서로 다른건가?란 생각을 하게 될 것입니다.

Context기본 역할
1) 어플리케이션에 관하여 시스템이 관리하고 있는 정보에 접근하기
  -> getPackageName(), getResource()등의 함수 호출

2) 안드로이드 시스템 서비스에서 제공하는 API 를 호출 할 수 있는 기능
  -> startActivity(), bindService()등의 함수 호출 

설명을 정리하자면 Android App내에서 시스템 API를 호출 하기 위해 사용되는 객체라고 할 수 있습니다.

context를 활용 해야지만 시스템의 함수를 호출 할수 있는 이유는 어플리케이션과 프로세스의 관계 때문이라고 합니다. Android 같은 경우는 프로세스 같은 경우는 OS 커널에서 관리되고 어플리케이션의 Activity같은 경우는 ActivityManagerService에서 관리되고 있다고 합니다.

 처음에 이야기 했던 context 인데 할수 있는 것은 왜 일까요?
이유는 바로 아래 그림 처럼 어플리케이션의 컴포넌트들이 context를 상속받아 생성 되었기 때문입니다.
그렇기 때문에 같은 context라도 할수 있는것이 다른 것입니다.






























context는 Android를 개발 하는 모든 곳에 쓰이는 만큼 완벽하게 알고 쓸수 없더라도 역할 정도는 알고 사용 해야 하지 않을까 생각을 하게 됩니다.


댓글

주간 인기글

[정보] 인스타그램은 당신의 소리를 '듣고' 있을 수도 있습니다

안드로이드에서 당겨서 새로고침(SwipeRefreshLayout) 쉽게 구현하기

[앱 디자인] 벤치마킹에 유용한 사이트

[앱 디자인] 디자인 가이드 만들기 - 아이폰

[AWS] WinSCP 를 이용해 Linux 인스턴스로 파일 전송하기