안드로이드 앱 컴포넌트를 공부하며 우리는 컴포넌트간의 전환을 위해서는 시스템에 다른 컴포넌트의 생성을 요청해 전환한다는걸 알게되었다. 그렇다면 시스템에 어떻게 다른 컴포넌트의 생성을 요청할까? 그렇다 바로 이 요청에 사용되는 메시징 객체를 우리는 인텐트라고 부른다.
우리는 코드를 작성해 인텐트 객체를 생성하고 시스템에 전달함으로써 실행할 컴포넌트의 정보를 시스템에 전달하며, 시스템에서는 해당 인텐트 메시지를 수신한 뒤 내용을 분석해 요청에 맞는 컴포넌트를 실행하게 된다.

인텐트에 대해 알아보기 이전에 우선 안드로이드 메니페스트라는 파일을 살펴보자. 안드로이드 메니페스트 파일은 안드로이드 프로젝트에 반드시 포함되어야 하는 파일로 앱의 패키지 이름이나, 사용되는 컴포넌트, 앱의 권한 등 앱에 대한 정보들을 담고 있는 파일이다.

우리는 인텐트에 대해 알아보기 위해 매니페스트 파일에 사용되는 컴포넌트의 정보가 담겨있다는 점에 주목해야한다. 안드로이드 앱은 여러개의 컴포넌트들로 이루어질 수 있고, 각 컴포넌트들은 이름을 가지고 있으며, 이름은 매니페스트 파일에 선언된다. 이것이 우리가 인텐트를 통해 컴포넌트를 실행할 수 있게하는 첫 시작점이다.
(암시적 인텐트를 설명하며 위쪽에 보이는 인텐트 필터에 대해서도 알아보자)
인텐트에는 크게 2가지 종류가 있다. 직접 실행시킬 컴포넌트를 선택하는 명시적 인텐트와 실행해야하는 동작을 지정해 원하는 컴포넌트를 찾아 실행시키는 암시적 컴포넌트로 나뉘는데, 우선 명시적 인텐트에 대해서 알아보자.
위에서 말했듯 안드로이드 앱내의 모든 컴포넌트는 각자 이름을 가지고 있다. 명시적 인텐트란 이러한 컴포넌트의 이름을 직접적으로 지정해 인텐트를 작성하는 방식을 말한다. 이러한 방식은 특정 액티비티나 서비스를 실행하는 작업을 수행해야할 때 사용한다.
명시적 인텐트는 컴포넌트를 정확하게 지정해 실행하기 때문에 주로 애플리케이션 내부에서 활용된다.
암시적 인텐트는 명시적 인텐트와는 반대로 실행해야하는 대상을 직접적으로 지정하지 않는 방식을 말한다. 대상을 직접 지정하지 않는다면 과연 어떤 방식으로 대상을 찾아 실행하는 걸까?
이를 알기위해서는 앞서 말했던 인텐트 필터에 대해 알아야한다. 인텐트 필터는 해당 컴포넌트가 어떤 인텐트 호출에 대해 응답할 수 있는지 시스템에 알려주는 역할을 한다.
예를들어 우리가 카메라 앱을 만들어 인텐트 필터에 카메라 액션에 대해 응답할수 있다는것을 명시한다. 이후 다른 앱에서 카메라가 필요한 작업을 실행하기 위해 인텐트 메시지를 시스템에 보낼경우 우리가 만든 카메라앱도 이에 응답해 실행될 수 있다고 나오게 되는것이다.
그리고 놀랍게도 위의 예시는 암시적 인텐트를 모두 설명하고 있다. 암시적 인텐트는 컴포넌트를 실행하기 위해 필요한 컴포넌트가 수행해야하는 작업을 메시지에 명시한다. 시스템에서는 인텐트 메시지를 수신한 뒤 인텐트 필터에 해당 작업이 가능하다고 명시된 앱들을 찾아 실행시킨다. 그렇다면 해당 작업을 수행할 수 있는 앱이 여러개라면 어떻게 될까?

우리가 종종 볼 수 있는 이러한 상황이 된다. 해당 작업을 수행할 수 있는 모든 앱의 목록이 보여지며, 사용자의 선택에 따라 실행될 앱이 결정된다.
인텐트는 컴포넌트간에 실행을 요청하는 메시징 객체이기도 하지만, 컴포넌트간에 데이터를 공유하기 위해 사용하기도 한다. 인텐트 객체에는 Extra Data라는 것을 통해 간단한 타입의 데이터를 담을 수 있고, 인텐트 메시지가 시스템에 요청되면서 컴포넌트가 실행될 때 이를 전달할 수 있다. 전달받는 컴포넌트에서는 인텐트 메시지에 추가된 Extra Data에서 원하는 데이터를 가져와 사용할 수 있다.
이전에 쉽게 정리해본 글을 첨부한다.