📚Android 4대 컴포넌트

오늘은 지금까지 배웠던 내용들을 다시 한번 정리해 보기 위해, 그리고 포스트들이 많아질수록 블로그를 운영하는 의미가 있겠다 싶어서 Android 4대 컴포넌트에 대해서 다뤄보도록 하겠다.

📔Android 4대 컴포넌트란

Android 앱의 필수적인 기본 구성 요소로,

  • 액티비티(Activity)
  • 서비스(Service)
  • 방송 수신자(BroadCastReceiver)
  • 콘텐츠 제공자(ContentProvier)

를 두고 하는 말이다.

여기서 각 컴포넌트들은

  1. 하나의 독립적인 형태로 존재
  2. 고유의 기능을 수행
  3. 인텐트를 통해 서로 상호작용

위와 같은 공통적인 특징을 가진다.

우선 액티비티부터 알아보도록 하자.

📔액티비티(Activity)

액티비티는 사용자가 애플리케이션과 상호작용하는 단일 화면을 의미하며 모든 안드로이드 애플리케이션은 액티비티로 구성되어 있다. 다시 말해, 사용자와의 상호작용을 돕는 인터페이스라고 할 수 있다.

이메일 앱을 예로 들자면, 이메일 목록을 표시하는 액티비티가 하나 있고, 이메일을 작성하는 액티비티가 하나, 이메일을 읽을 수 있는 액티비티가 하나 있을 수 있다. 여러 액티비티가 함께 작동하여 이메일 앱에서 하나 된 흐름으로 동작되는 것처럼 보이면서도, 각각의 액티비티들은 서로 독립되어 있다.

액티비티는 다음과 같은 특징들을 가진다.

📖액티비티의 특징

  • 인텐트(Intent)를 통해 다른 애플리케이션의 액티비티를 호출할 수 있다.
  • 2개 이상의 액티비티를 동시에 보여줄 수 없다.
  • 1개 이상의 View 또는 ViewGroup을 포함한다.
  • 애플리케이션에는 반드시 하나 이상의 액티비티가 존재해야 한다.
  • 액티비티 내에는 프래그먼트(Fragment)를 추가해 화면을 분할하여 별도로 조작할 수 있다.

📖액티비티 생명주기

activity_lifecycle
[그림] Android Developer 사이트

액티비티 생명주기에 관해서는 나중에 더 자세히 다뤄보도록 한다.

📔서비스(Service)

서비스는 사용자와 직접적으로 상호작용하는 요소는 아니다. 흔히 백그라운드(Background)에서 특정 작업을 처리하기 위해 서비스를 사용하는데, 예를 들어, 다른 앱을 사용하면서 백그라운드를 통해 음악을 재생하거나 다른 작업을 하면서 다운로드를 진행할 때 서비스를 사용한다.

📖서비스의 특징

  • 네트워크와 연동할 수 있다.
  • 별도의 UI를 갖지 않는다.
  • 백그라운드에서 수행된다.
  • 액티비티와 동일하게 UI스레드에서 실행된다.
  • 애플리케이션이 종료되어도 이미 시작된 서비스는 백그라운드에서 계속 동작한다.

📔방송 수신자(Broadcast Receiver)

브로드캐스트 리시버는 안드로이브 OS로부터 발생하는 각종 이벤트와 정보를 받아와 핸들링하는 컴포넌트이다. 예를 들어, 사용자 디바이스의 시스템 부팅 시 앱 초기화, 네트워크 끊김 등 특수한 이벤트에 대한 처리나 배터리 부족 알림, 알람 설정과 같은 정보를 받아 처리해야 할 필요가 있을 때 동작한다.

즉, 문자 메시지가 오면 모든 앱에 “메시지가 왔습니다.”라는 하나의 정보를 방송(Broadcast)한다. 이러한 알림을 받기 위해 브로드캐스트 리시버를 구현해야 하며 해당 정보가 오면 특정 이벤트를 처리할 수 있다.

브로드캐스트 리시버는 10초 이내의 작업만을 보증하므로 오랜 시간 동작해야 한다면 별도의 스레드로 처리하거나 서비스에 구현해야 한다.

📖브로드캐스트 리시버의 특징

  • UI를 갖고 있지 않다.
  • 안드로이드 디바이스의 특수한 상황에 대응하기 위해 사용된다.
  • 특정한 상황을 제외하고는 브로드캐스트는 시스템에서 시작한다.

📔콘텐츠 제공자(Content Provider)

콘텐츠 제공자는 데이터를 관리하고 다른 애플리케이션의 데이터를 제공하는 데 사용되는 컴포넌트이다. 특정 애플리케이션이 사용하고 있는 데이터베이스 또는 저장소를 공유하기 위해 사용하며 애플리케이션 간 데이터 공유를 위해 표준화된 인터페이스를 제공한다.

콘텐츠 제공자는 외부 애플리케이션이 현재 실행 중인 애플리케이션이 사용하고 있는 DB에 접근할 수 있도록 권한을 부여할 수 있다. 예를 들어, 실행 중인 앱은 클립보드에 있는 이미지의 Uri를 배치할 수 있지만 다른 앱이 자유롭게 액세스할 수 없도록 콘텐츠 제공자에게 권한을 부여하지 않을 수 있다. 이외에도 임시 권한을 부여하여 클립보드의 데이터에 액세스하도록 허용할 수 있다.

📖콘텐츠 제공자의 특징

  • SQLite DB / Web / 파일 입출력 등을 통해 데이터를 관리한다.
  • 외부 애플리케이션이 현재 실행 중인 애플리케이션 내에 있는 DB에 함부로 접근하지 못하게 할 수 있으며 자신이 공개하고 싶은 데이터만 공유할 수 있도록 도와준다.
  • 음악 또는 사진 파일 등과 같이 용량이 큰 데이터들을 공유하는데 유용하다.
  • DB에서 흔히 사용되는 CRUD 원칙을 준수한다.