안드로이드 With Java #14 Context

Jake Seo·2020년 8월 10일
0

안드로이드 With Java

목록 보기
14/31

안드로이드 With Java #14 Context

Context 개념

  • 자신이 어떤 어플리케이션인지 알려주는 ID 역할
  • 안드로이드 시스템 서비스에서 제공하는 기능을 호출하는 역할

안드로이드 시스템 서비스는 토스트 메세지나 카메라 등 앱 외부에 있는 안드로이드 자체에서 제공해주는 기능을 사용할 때 사용되는 서비스이다.

Context를 이해해야 하는 이유?

Toast.makeText() 또는 Intent를 만드는 등의 행위에서 Context는 널리 사용된다. 그럴 때 내가 무엇을 넣어야 하는지 알기 위해.

Context의 종류

Application Context

앱 전체를 의미함

Application Context의 경우 앱 전체를 Context로 보면 이해가 수월하다.

Activity Context

어플리케이션 안에 등록된 Activity를 의미함. 앱을 개발하며 추가하는 화면(Activity)의 컨텍스트

Activity Context의 경우 Activity 자체를 Context로 보면 이해가 더 수월하다.

위에 보듯이 우리가 Activity를 만들 때는 AppCompatActivity를 상속받는다. AppCompatActivity 내부에는 우리가 이전에 사용했던 startActivity, startActivityForResult 등이 이미 구현되어 있다.

Context 실습

Context 타입에 MainActivity 넣어보기

ContextMainActivity를 의미하는 this 키워드를 넣어도 아무런 에러가 없다. 그 말은 Contextthis와 같은 타입이거나 그 상위 타입이라는 뜻이다.

Activity는 어떤 클래스를 상속받았을까?

위에 Context 타입에 Activity를 넣어도 별다른 에러가 없었다. Context의 구현 내용을 디컴파일해보면 위와 같이 추상 클래스로 정의되어 있다.

Activity타입은 어떤 클래스를 상속받았길래 Context 타입에 넣어도 에러가 나지 않을까?

위의 내용을 보면 ContextThemeWrapper라는 클래스를 상속받는다.

ContextThemeWrapperContextWrapper를 상속받는다.

ContextWrapperContext를 상속받는다.

결국 Activity는 거치고 거쳐서 Context에 있는 모든 내용을 상속받았다는 것을 알 수 있다.

Application Context 얻어오기

위와 같이 getApplicationContext() 메소드를 통하여 Application Context를 얻어올 수 있다.

위 내용처럼 manifest.xml을 봤을 때 application 내부에 구성요소로서 activity가 들어있는 것을 확인할 수 있다. 우리는 저 application의 컨텍스트를 getApplicationContext() 메소드를 통해 가져올 수 있다.

Activity Context 얻어오기

위와 같이 2가지 방법이 있는데

첫번째는 this 키워드를 통해서 얻어오는 것이고 두번째는 MainActivity.this를 통해 얻어오는 방법이 있다.

profile
풀스택 웹개발자로 일하고 있는 Jake Seo입니다. 주로 Jake Seo라는 닉네임을 많이 씁니다. 프론트엔드: Javascript, React 백엔드: Spring Framework에 관심이 있습니다.

0개의 댓글