본문 바로가기

Android

안드로이드 4대 컴포넌트 / 인텐트 / 인텐트필터

안드로이드 4대 컴포넌트(Component)

 컴포넌트(Component)는 구성요소라는 뜻으로 안드로이드에는 4대 컴포넌트라고 불리는 액티비티(Activity), 서비스(Service), 방송수신자(Broadcast Receiver), 콘텐트 제공자(Content Provider)가 있다. 각 컴포넌트들은 독립적인 존재로 고유의 기능을 수행한다. 각각의 컴포넌트들은 인텐트(Intent)를 통해 서로 상호작용한다. 즉 각각의 컴포넌트들이 다른 컴포넌트를 호출할때는 인텐트를 거쳐야 한다. 인텐트에 대한 자세한 설명은 4대 컴포넌트 설명 이후에 할 예정이다.

 

1. Activity(액티비티)

 UI를 구성하는 기본 컴포넌트로 기본적으로 인터페이스를 포함한 화면 하나를 나타낸다. 각 액티비티에 대한 연결은 intent라는 것을 통해 이루어진다. 사용자와 상호작용을 담당하는 인터페이스 액티비티는 생명주기(Life Cycle) 관련 메서드들을 재정의하여 원하는 기능들을 구현할 수 있다. 2개의 액티비티를 동시에 디스플레이 할 수는 없고, 액티비티 내에는 프래그먼트(Fragment)를 추가하여 화면을 분할시킬 수 있다.

 

2. Service(서비스)

 UI없이 백그라운드로 수행되는 앱의 형태이다. 사용자와 직접적으로 상호작용하는 요소는 아니다. 예를 들면, 화면이 꺼져도 Melon이나 FLO에서 음악이 계속 재생되거나 업데이트시 화면이 꺼져도 네트워크를 통해 데이터를 가지고 오는 작업 등이 대표적이다. 즉, 한번 시작된 서비스는 어플리케이션이 종료되도 계속해서 백그라운드에서 돌아간다.

 

3. Broadcast Receiver(방송수신자)

 안드로이드 OS로부터 발생하는 각종 이벤트와 정보를 받아와 핸들링할때 사용한다. 예를 들면, 사용자 안드로이드 디바이스의 시스템 부팅시 앱 초기화, 네트워크 끊김 등등 특수한 이벤트에 대한 처리나 배터리 부족 알림 ,문자 수신과 같은 정보를 받아 처리를 해야 할 필요가 있을 때 동작한다. 즉, 안드로이드 OS에서 메신저앱 또는 문자 메시지가 오면 모든 앱에 "메시지가 왔다"라는 하나의 정보를 방송(BroadCast)을 한다. 또한 대부분 UI가 존재하지 않는다.

 

4. Content Provider(콘텐트 제공자)

 데이터를 관리하고 다른 애플리케이션의 데이터를 제공하는 데 사용되는 컴포넌트이다. 특정한 애플리케이션이 사용하고 있는 데이터베이스(DB)를 공유하기 위해 사용하고 SQLite DB / Web / 파일 입출력 등을 통해서 데이터를 관리한다.외부 애플리케이션이 현재 실행 중인 애플리케이션 내에 있는 데이터베이스(DB)에 함부로 접근하지 못하게 할 수 있으면서 나 자신이 공개하고 공유하고 싶은 데이터만 공유할 수 있도록 도와준다. 작은 데이터들은 인텐트(Intent)로 애플리케이션끼리 데이터를 서로 공유가 가능하지만 콘텐 프로바이더는 음악 또는 사진 파일 등과 같이 용량이 큰 데이터들을 공유하는데 적합하다.

인텐트(Intent)

 인텐트(Intent)는 위에서 짧게 설명했듯이 컴포넌트에 액션, 데이터 등을 전달하는 메시지 객체이다. 이 구성 요소를 활용하면 다른 애플리케이션의 액티비티를 실행하거나 데이터를 전달해줄 수 있다. 인텐트를 가장 많이 사용하는 예로는 액티비티 간의 화면 전환(이동)이 있다. 즉, 인텐트는 컴포넌트 A가 컴포넌트 B를 호출할 때 필요한 정보를 가지고 있으며, 이 정보에는 호출 대상이 되는 컴포넌트 B의 이름이 명시적으로 표시가 됨과 동시에 속성(Attribute)들이 암시적으로 표시되기도 합니다. 그리고 호출된 컴포넌트 B가 호출한 컴포넌트 A로 어떠한 결과를 전달할 때도 인텐트가 사용이 된다. 인텐트에는 명시적 인텐트, 암시적 인텐트 2개가 있다.

 

1. 명시적 인텐트

  • 애플리케이션을 명시적으로 지정
  • 일반적으로 앱 안에서 구성 요소를 시작할 때 사용

2. 암시적 인텐트

  • 특정 구성 요소의 이름을 대지 않지만, 그 대신 수행할 일반적인 작업을 선언하여 다른 앱의 구성요소가 처리하도록 함
  • 인텐트 내용을 다른 여러 앱의 매니페스트 파일에서 선언된 인텐트 필터와 비교하는 방식을 사용

인텐트필터(Intent Filiter)

 인텐트 필터(IntentFilter)는 특정 인텐트를 받을지 말지를 정의하는 역할을 수행하며, 이를 통해 컴포넌트의 특징이 정해진다. 인텐트 객체 내의 여러정보들을 바탕으로 가장 적절한 컴포넌트를 찾는 과정을 인텐츠 해석이라 하고 이 과정에서 인텐츠 객체의 정보와 각 컴포넌트의 정보를 비교하게 되며, 이를 위해 각 컴포넌트는 자신이 받을 수 있는 인텐트의 종류를 Manifest에 정의하게 되는데, 이를 인텐트 필터(IntentFilter)라고 한다. 인턴트 필터 내에는 action filter, category filter, data filter와 같은 속성들이 있다. 각 필터는 이름대로 액션, 카테코리, 데이터들을 검사한다.