[Android] 4대 컴포넌트(기본 구성 요소)

승민·2022년 4월 24일
0

Android

목록 보기
4/4

안드로이드 기본 구성 요소

앱 구성 요소에는 4가지 유형이 있습니다. 각 유형은 뚜렷한 목적을 가지고 있으며 나름의 수명 주기가 있어 생성 및 소멸의 방식을 정의합니다.

1. 액티비티(Activity)

액티비티는 사용자와 상호작용하기 위한 진입점입니다. 액티비티는 사용자 인터페이스를 포함한 화면 하나를 나타냅니다. 여러 액티비티가 함께 작동하여 하나의 앱에서 짜임새 있는 사용자 환경을 구성하지만 각 액티비티는 서로 독립되어 있습니다. 따라서 인텐트(Intent)를 통해 하나의 앱에서 다른 앱의 액티비티를 시작할 수도 있습니다. 액티비티는 다음과 같이 시스템과 앱의 주요 상호 작용을 돕습니다.

  • 사용자가 현재 관심을 가지고 있는 사항을 추적하여 액티비티를 호스팅하는 프로세스를 시스템에서 계속 실행하도록 합니다.
  • 이전에 사용한 프로세스에 사용자가 다시 찾을 만한 액티비티(중단된 액티비티)가 있다는 것을 알고, 해당 프로세스를 유지하는 데 더 높은 우선순위를 부여합니다.
  • 앱이 프로세스를 종료하도록 도와서 이전 상태가 복원되는 동시에 사용자가 액티비티로 돌아갈 수 있게 합니다.
  • 앱이 서로 사용자 플로우를 구현하고 시스템이 이러한 플로우를 조정하기 위한 수단을 제공합니다.

또한 액티비티는 다음과 같은 특징을 갖습니다.

  • 2개 이상의 액티비티를 동시에 보여줄 수 없습니다.
  • 1개 이상의 View 혹은 ViewGroup을 포함합니다.
  • 어플리케이션에는 반드시 하나 이상의 액티비티가 있어야 합니다.
  • 액티비티 내에 프레그먼트를 추가하여 화면을 분할시킬 수 있습니다.

2. 서비스(Service)

서비스는 여러 가지 이유로 백그라운드에서 앱을 계속 실행하기 위한 다목적 진입점입니다. 이는 백그라운드에서 실행되는 구성 요소로, 오랫동안 실행되는 작업을 수행하거나 원격 프로세스를 위한 작업을 수행합니다. 서비스는 사용자 인터페이스를 제공하지 않습니다. 예를 들어 다른 앱을 실행했을 때에도 백그라운드에서 음악을 재생하거나 사용자와 액티비티 간의 상호작용을 차단하지 않고 네트워크를 통해 데이터를 가져올 수도 있습니다. 서비스는 다음과 같은 특징을 갖습니다.

  • 네트워크와 연동이 가능합니다.
  • 액티비티와 서비스 모두 UI 스레드라고 불리는 동일한 어플리케이션 스레드로 실행되기 때문에 서비스 내에서 별도의 스레드를 생성하여 작업을 처리해야 합니다.
  • 어플리케이션이 종료되어도 이미 시작한 서비스는 백그라운드에서 계속 동작합니다.

3. Broadcast Receiver

Broadcast Receiver는 시스템(안드로이드 os)이 정기적인 사용자 플로우 밖에서 이벤트를 앱에 전달하도록 지원하는 구성 요소로, 앱이 시스템 전체의 브로드캐스트 알림에 응답할 수 있게 합니다. Broadcast Receiver도 앱으로 들어갈 수 있는 또 다른 명확한 진입점이기 때문에 현재 실행되지 않은 앱에도 시스템이 브로드캐스트로 전달할 수 있습니다. 대다수의 브로드캐스트는 시스템에서 발생합니다. 예를 들어 배터리가 부족하거나 사진을 캡쳐했다고 알리는 등의 경우에 자주 쓰이며 예정된 이벤트에 대한 알림과 같이 앱에서도 브로드캐스트를 시작할 수 있습니다. Broadcast Receiver는 사용자 인터페이스를 표시하지 않지만 상태 표시줄 알림을 생성하여 사용자에게 브로드캐스트 이벤트가 발생했다고 알릴 수 있습니다.

4. 콘텐츠 제공자

콘텐츠 제공자는 파일 시스템, SQLite 데이터베이스, 웹상이나 앱이 액세스할 수 있는 다른 모든 영구 저장 위치에 저장 가능한 데이터를 관리하고 다른 어플리케이션의 데이터를 제공하는 데 사용되는 컴포넌트입니다. 특정 어플리케이션이 사용하고 있는 데이터베이스를 공유하기 위해 사용하며 어플리케이션 간의 데이터 공유를 위해 표준화된 인터페이스를 제공합니다. 다음은 콘텐츠 제공자의 특징입니다.

  • 외부 어플리케이션이 현재 실행 중인 어플리케이션 내에 있는 데이터베이스(DB)에 함부로 접근하지 못하게 할 수 있으면서 나 자산이 공개한 데이터만 공유할 수 있도록 도와줍니다.
  • 작은 데이터들은 인텐트로 어플리케이션끼리 데이터를 공유하고 음악 또는 사진 파일과 같은 큰 데이터들은 콘텐츠 프로바이더를 사용하는 것이 적합합니다.
  • 프로바이더는 데이터의 Read, Write에 대한 퍼미션이 있어야 어플리케이션에 접근이 가능합니다.
  • 데이터베이스의 CRUD 원칙을 준수합니다.

인텐트(Intent)

액티비티, 서비스, Broadcast Receiver는 인텐트라는 비동기식 메시지로 활성화됩니다. 인텐트는 런타임에서 각 구성 요소를 서로 바인딩합니다. 컴포넌트에 액션(action), 데이터(data) 등을 전달하는 일종의 메신저 역할이라고 생각하면 됩니다. 즉 구성 요소가 어느 앱에 속하든 관계없이 다른 구성 요소로부터 작업을 요청하는 역할을 합니다. 가장 많이 사용하는 예로는 액티비티 간의 화면 전환이 있습니다.

참고 사이트: 구글 공식 문서, 참고 블로그

profile
안녕하세요 승민입니다

0개의 댓글