Android 4대 컴포넌트 알아보기
오늘은 Android Application을 구성하는 요소인 Android 4대 컴포넌트에 대해 알아보려합니다. 이번 글에서는 각 컴포넌트에 대해 간단한 개념, 특징과 각 컴포넌트가 서로 상호작용하는 방식에 대해 알아보려합니다.
(컴포넌트별 자세한 내용은 추후에 다른 포스트로 작성하려합니다!)
1. 4대 컴포넌트들의 간단한 개념 및 특징
Android의 4대 컴포넌트는 Activity, Service, BroadCast Receiver (방송수신자), Content Provider (콘텐츠 제공자) 총 4가지로 이루어져 있습니다. Activity부터 각 컴포넌트별로 간단히 개념과 특징에 대해 알아보도록 하겠습니다.
1-1. Activity
Activity는 Application이 사용자와 상호작용 하기 위해 실제 보이는 화면을 담당하는 컴포넌트 입니다.
Activity는 아래와 같은 특징을 가지고 있습니다.
- Activity는 View또는 ViewGroup을 포함해야한다.
- 하나의 Application에는 무조건 1개 이상의 Activity가 존재해야한다.
- 동시에 2개 이상의 Activity를 한번에 화면에 노출시킬 수 없다.
- Fragment를 이용하여 Activity화면을 분할하여 사용할 수 있다.
1-2. Service
Service는 Activity와 반대로 사용자가 볼 수 없는곳에서 이루어지는 작업들을 담당하는 컴포넌트입니다.
Service는 아래와 같은 특징을 가지고 있습니다.
- Service는 동작에 따라 3가지 Service로 나눌 수 있다.
- Foreground Service: 기기의 작업 표시줄을 통해 사용자가 Service의 실행 여부를 파악할 수 있는 Service를 의미합니다.
ex) 음악 앱, 타이머 앱 -> 음악 앱이나 타이머 앱은 앱을 나가고 종료해도 음악이 계속 재생되고 타이머가 계속 돌아갑니다. 이때 사용자가 작업표시줄을 통해 해당 작업들의 실행 여부를 알 수 있기 때문에 이들은 Foreground Service입니다.. - Background Service: 사용자가 Service의 실행 여부를 인식할 수 없는 Service를 의미합니다.
ex) 메신저 앱의 메세지 수신 -> 메신저 앱에서 메세지를 받는 로직의 실행 여부를 사용자는 알 수 없기 때문에 이는 Background Service입니다. - Binding Service: 다른 앱이나 또 다른 Service에 의해 실행되는 Service를 의미합니다.
- Foreground Service: 기기의 작업 표시줄을 통해 사용자가 Service의 실행 여부를 파악할 수 있는 Service를 의미합니다.
- Service는 사용자가 보이지 않는 곳에서 실행되기 때문에 다른 스레드에서 실행된다고 착각할 수 있지만 Main 스레드에서 실행된다.
1-3. BroadCast Receiver
BroadCast Receiver는 기기에 발생하는 여러가지 이벤트를 수신하는 컴포넌트 입니다.
이벤트는 대표적으로 베터리 부족 알림, 전화 등등이 있습니다.
BroadCast Receiver는 아래와 같은 특징을 가지고 있습니다.
- 대부분의 이벤트는 시스템이 발생시킨다.
1-4. Content Provider
Content Provider는 Application에 데이터를 전달하기 위해 사용하는 컴포넌트 입니다.
Content Provider는 아래와 같은 특징을 가지고 있습니다.
- Content Provider를 사용하여 Application 끼리 데이터를 공유할 수 있다.
- URI를 통해 데이터에 접근할 수 있다.
- 주로 이미지 같은 용량이 큰 데이터를 주고받는데 사용한다.
2. 각 컴포넌트의 상호작용
위에서 Application을 구성하기 위한 4가지 구성요소를 알아보았습니다. 그렇다면 각 구성요소들은 어떻게 상호작용할까요?
먼저 Activity, Service, BroadCast Receiver는 Intent라는 메세지를 통해 서로 상호작용 합니다.
Intent가 런타임 시점에 Component의 위치 (내 앱에 속해있는지) 여부와 관계없이 각 Component를 연결합니다. 이게 무슨 뜻이냐면 서로 다른 앱의 Component끼리 통신할 때도, 앱 내의 Component끼리 통신할 때도 Intent를 사용하는 것이죠.
각 Component의 통신에 Intent를 사용하는 이유는 각 Component가 시스템에서 관리되고 있기 때문입니다. 이 때문에 서로에게 직접 요청을 보낼 수 없고, Intent를 통해 요청해야 하는 것이죠. 이 Intent 정보를 시스템이 파악할 수 있도록 만들어진 클래스가 우리가 사용하는 Intent 클래스 입니다.
Content Provider는 Intent가 아닌 ContentResolver를 통해 상호작용합니다.
데이터를 가져오려는 주체가 ContentResolver의 메서드를 호출하면 ContentResolver가 Content Provider에게 요청을 보냅니다. 이후 Content Provider는 작업을 실행하고 ContentResolver에게 그 결과를 반환하는것이죠.
마무리
오늘은 Android Application을 구성하는 4대 컴포넌트에 대해 알아보았습니다.
다음 글에서는 각 컴포넌트별로 좀더 깊은 내용을 다뤄볼 생각입니다!
글 읽어주셔서 감사합니다!
'Android' 카테고리의 다른 글
[Android/Basic] 3. Activity의 State Changes 알아보기 (0) | 2024.08.21 |
---|---|
[Android/Basic] 2. Activity의 LifeCycle 알아보기 (3) | 2024.07.22 |
[Android/Thread] 2. Thread간의 통신과정 알아보기 (1) | 2024.06.05 |
[Android/Thread] 1. Android의 Thread환경 (0) | 2024.05.16 |
[Android] Firebase Remote Config 알아보기! (3) | 2024.03.14 |