안드로이드 4대 컴포넌트
컴포넌트(Component)란 구성 요소 혹은 부품을 의미하며, 소프트웨어 개발 분야에서는 특정 기능을 수행하는 독립적이고 재사용 가능한 코드 단위를 의미합니다.
안드로이드 앱 구성 요소에는 Activities, Services, Broadcast receivers, Content providers 네 가지 유형이 있으며, 이를 안드로이드 4대 컴포넌트라고 부릅니다.
각 유형은 각각의 고유한 용도로 사용이 되며 구성 요소가 생성되고 삭제되는 고유한 수명 주기를 가지고 있습니다.
Activities (액티비티)
액티비티(Activity)는 사용자와 상호작용하는 하나의 화면을 나타내는 컴포넌트이며, 사용자가 앱을 실행했을 때 가장 먼저 보이게 되는 것이 Activity입니다.
- 화면을 구성하는 UI(User Interface)를 담당하며, 사용자의 입력(터치, 제스처 등)을 처리하고 결과를 화면에 표시합니다.
- 앱은 반드시 하나 이상의 Activity를 가지고 있어야 합니다.
- onCreate부터 onDestory까지 고유한 생명 주기를 가지며 이 메서드들을 override하여 각 상태에 맞는 작업을 수행할 수 있습니다.
- Intent를 사용하여 다른 앱 구성요소을 호출하고 작업을 요청할 수 있습니다.
Services (서비스)
서비스(Service)는 사용자 인터페이스(UI) 없이 백그라운드에서 실행되는 작업을 처리하는 컴포넌트입니다.
화면에 보이지 않는 작업을 수행하며 사용자가 앱을 종료하더라도 서비스는 계속 실행될 수 있습니다.
유튜브, 멜론 같은 앱을 백그라운드 상태로 넘겨도 음악이나 영상이 계속 실행되는 것은 서비스가 백그라운드에서 계속 실행되기 때문입니다.
Started services
작업이 끝날 때까지 실행이 되며 음악을 재생하거나 데이터를 동기화하는 작업이 여기에 속합니다.
- 포그라운드 서비스 : 음악 재생처럼 사용자가 직접 인지하는 작업의 경우, 알림과 함께 실행되야 하고 시스템이 해당 서비스의 우선순위를 높게 유지합니다.
- 백그라운드 서비스 : 사용자에게 직접 보이지 않는 작업의 경우, 시스템이 필요에 따라 종료하고 나중에 다시 시작할 수 있습니다.
Bound Services
bindService()로 다른 컴포넌트와 연결할 수 있으며 연결된 컴포넌트가 모두 종료될 때까지 실행됩니다.
서비스는 기본적으로 main thread에서 실행되므로, 네트워크 통신과 같이 시간이 오래 걸리는 작업은 ANR( Application Not Responding)을 방지하기 위해 별도의 스레드나 코루틴을 사용하여 대응해야 합니다.
Broadcast Receiver (방송 수신자)
브로드캐스트 리시버는 안드로이드 시스템이나 다른 앱이 보내는 브로드캐스트 메시지를 수신하고 반응하는 컴포넌트입니다.
- 화면 꺼짐, 배터리 부족 등 시스템 이벤트를 수신하고 처리하기 위해 사용합니다.
- 대부분 UI가 없지만, 브로드캐스트 이벤트가 발생했을 때 사용자에게 알리기 위해 상태 표시줄 알림을 생성할 수 있습니다.
- 브로드캐스트 리시버는 이벤트를 수신하는 역할만 하며 복잡하고 시간이 오래 걸리는 작업은 서비스나 액티비티에 위임하여 처리합니다.
Content Provider(콘텐츠 제공자)
콘텐츠 프로바이더는 애플리케이션 간에 데이터를 공유하기 위해 표준화된 인터페이스를 제공하는 컴포넌트입니다.
- 데이터베이스, 파일, 네트워크 등 다양한 형태의 데이터를 관리할 수 있습니다.
- 다른 앱이 직접 데이터베이스에 접근하는 대신 Content Provider를 통해 CRUD(Create, Read, Update, Delete) 작업을 수행합니다.