우리라이프

Context가 무엇인가? Intent가 무엇인가? 본문

IT/Android

Context가 무엇인가? Intent가 무엇인가?

적당히벌고아주잘살자 2018. 3. 16. 14:27
반응형


요즘 기술면접을 보면 자주 물어보는 질문 중 하나는

Android에서 Context가 무엇인가? 와 Intent가 무엇인가? 에 대한 질문이다.

1. Context가 무엇인가?

일단 Android Developer 사이트에서 제공하는 Context에 대한 정보이다.

Context

public abstract class Context 
extends Object 

java.lang.Object
   ↳android.content.Context
 Known Direct Subclasses



Interface to global information about an application environment. This is an abstract class whose implementation is provided by the Android system. It allows access to application-specific resources and classes, as well as up-calls for application-level operations such as launching activities, broadcasting and receiving intents, etc.

위의 내용이 Context에 대한 내용이다.

간결하게 정리하면 Context는 

어플리케이션 환경에 대한 전역 정보를 접근하기 위한 인터페이스로 어플리케이션에 관하여 시스템이 관리하고 있는 정보에 접근하고, Activity 실행, Intent 브로드캐스팅, Intent 수신등과 같은 안드로이드 시스템에서 제공하는 API를 호출할 수 있는 기능을 제공하는 클래스이다.

라고 정의할 수 있다. 


2. Context 역할

Context는 Application이 생성될 때나 Android 각 컴포넌트들이 생성될 때 서로 다른 종류의 Context가 생성됩니다. 안드로이드 플랫폼 관점에서 Context는 다음과 같은 두가지 역할을 수행한다. 

하나는 자신이 어떤 Application을 나타내고 있는지 Android System에 알려주는 ID 역할이고, 또 하나는 안드로이드에서 어플리케이션 관련된 정보에 접근하고자 할 때 통해야하만하는 ActivityManagerService에 접근할 수 있도록 하는 통로 역할을 합니다.


3. Context 종류.

Android Framework에서 Context는 2가지 종류가 있다. 하나는 Application Context이고, 다른 하나는 Activity Context이다.

Application Context : Application의 life-cycle에 접목되는 개념으로 하나의 애플리케이션이 실행되어 종료될 때까지 동일한 객체이다.

흔히 우리가 getApplicationContext() 함수를 사용해 얻는 객체를 의미한다. 또 하나 getApplication()이 있는데 이는 Application 객체를 참조하지만 Application 클래스는 Context 클래스를 상속받으므로 Application Context를 제공하는데 사용할 수 있다. 

Activity Context : Activity life-cycle에 접목되는 개념으로 하나의 액티비티가 실행되어 종료될 때까지 즉 onDextroy() 된 경우 사라질 수 있는                       객체이다. Activity에 대한 환경 정보들이 Context에 있고, 이 Context에 Intent를 통해 다른 Activity를 띄우면 액티비티 스택이                       쌓이게 된다.        

LoginActivity.this 는 Activity 를 상속받은 자신의 클래스를 참조하지만 Activity 또한 Context 클래스를 상속받으므로 Activity Context를 제공하는데 사용될 수 있다. getBaseContext()는 Activity Context를 제공한다.


4. Intent는 무엇인가?

일단 Android Developer 사이트에 나와있는 Intent에 대한 내용이다. Developer 사이트에 잘 나와 있기 때문에 따로 말을 첨부하지는 않아도 될거 같다.

Intent는 일종의 메시지 객체입니다. 이것을 사용해 다른 앱 구성 요소로부터 작업을 요청할 수 있습니다. 인텐트가 여러 구성 요소 사이의 통신을 용이하게 하는 데에는 몇 가지 방법이 있지만, 기본적인 사용 사례는 다음과 같은 세 가지입니다.


  • 액티비티 시작:

    Activity는 앱 안의 단일 화면을 나타냅니다. Activity의 새 인스턴스를 시작하려면 IntentstartActivity()로 전달하면 됩니다. Intent는 시작할 액티비티를 설명하고 모든 필수 데이터를 담고 있습니다.

    액티비티가 완료되었을 때 결과를 수신하려면, startActivityForResult()를 호출합니다. 여러분의 액티비티는 해당 결과를 이 액티비티의 onActivityResult() 콜백에서 별도의 Intent 객체로 수신합니다. 자세한 정보는 액티비티 가이드를 참조하세요.

  • 서비스 시작:

    Service는 사용자 인터페이스 없이 백그라운드에서 작업을 수행하는 구성 요소입니다. 서비스를 시작하여 일회성 작업을 수행하도록 하려면(예: 파일 다운로드) Intent를 startService()에 전달하면 됩니다. Intent는 시작할 서비스를 설명하고 모든 필수 데이터를 담고 있습니다.

    서비스가 클라이언트-서버 인터페이스로 디자인된 경우, 다른 구성 요소로부터 서비스에 바인드하려면 Intent를 bindService()에 전달하면 됩니다. 자세한 정보는 서비스 가이드를 참조하세요.

  • 브로드캐스트 전달:

    브로드캐스트는 모든 앱이 수신할 수 있는 메시지입니다. 시스템은 여러 시스템 이벤트에 대해 다양한 브로드캐스트를 전달합니다. 예를 들어 시스템이 부팅될 때 또는 기기가 변경되기 시작할 때 등이 해당됩니다. 다른 여러 앱에 브로드캐스트를 전달하려면 Intent를 sendBroadcast()sendOrderedBroadcast() 또는 sendStickyBroadcast()에 전달하면 됩니다.

위 세가지 기능을 구현할 때 Intent를 많이 사용하며, 알고 있듯이 Activity끼리나 기타등등에서 작은 자료를 전달 할 때도 Intent를 활용하여 전달한다. 

기타 자세한 내용은 Android Developer 사이트를 참조하길 바란다.


참조 

Context 참조

https://developer.android.com/reference/android/content/Context.html

http://shnoble.tistory.com/m/57

Intent 참조 

https://developer.android.com/guide/components/intents-filters.html?hl=ko


반응형
Comments