안드로이드 어플리케이션에는 크게 4가지의 구성요소가 존재합니다.
그것이 바로 '안드로이드 4대 컴포넌트'라고 불리우는
- Activity(액티비티)
- Service(서비스)
- Broadcast Recevier(방송 수신자)
- Content Provider(콘텐츠 제공자)
입니다.
위의 컴포넌트는 각각이 독립된 형태로 존재하고, 서로 인텐트(Intent)라는 것을 이용하여 상호작용을 하게 됩니다.
즉, 인텐트를 이용하여 다른 구성 요소를 호출할 수 있습니다.
그러나 이러한 4개의 컴포넌트 요소가 모두 앱에 있어야하는 것은 아니지만,
하지만 액티비티(Activity)는 반드시 하나 이상은 존재해야합니다.
안드로이드에는 main() 이라는 시작점이 존재하지 않고, 컴포넌트 단위로 객체가 생성하고 소멸됩니다.
따라서 시스템은 이러한 객체를 생성 및 소멸시킬 수 있는 기본적인 컴포넌트를 갖게 됩니다.
그러면 각각 컴포넌트들이 어떤 기능을 하는지, 특징은 무엇인지에 대해서 알아봅시다.
1. Activity(액티비티)
액티비티는 사용자에게 UI가 있는 화면을 제공하기 위한, 화면 단위를 구성하는 컴포넌트입니다.
하나의 앱에 반드시 하나 이상의 액티비티가 존재해야합니다.
Activity 클래스를 상속받아 사용하며, 액티비티를 새로 만들어 사용할 경우에는 manifest 파일에 선언해야합니다.
가장 처음 안드로이드 스튜디오에서 어플리케이션을 생성하면 만들어지는 MainActivity 또한 하나의 액티비티이며, 이는 사용자가 앱을 처음에 실행하였을 때에 보여지는 메인 액티비티라고 할 수 있습니다.
이와 같이 카메라 화면, 뮤직 어플리케이션 화면, 지도 화면 등 사용자들에게 보여지는 화면을 액티비티의 예로 들 수 있습니다.
하나의 앱은 여러가지의 액티비티로 이루어져있으며, 각 액티비티들은 다른 액티비티를 실행할 수 있습니다.
그러나 두개의 액티비티를 동시에 Display하는 것은 불가능합니다.
뿐만 아니라, 액티비티 내에서 Fragment라는 기능을 사용하면 화면을 분할시킬 수도 있습니다!
2. Service(서비스)
서비스는 어플리케이션이 백그라운드에서 동작하는 작업을 수행하는 컴포넌트입니다. 음악 어플리케이션에서 음악을 재생한 후, 다른 어플리케이션을 실행하여도 백그라운드에서 계속 음악을 재생하는 등의 기능을 예로 들 수 있습니다.
Serivce class를 상속받아 사용할 수 있고, 이 또한 Activity처럼 새로 만든 후에는 manifest 파일에 등록을 해주어야 사용할 수 있습니다.
이는 액티비티와 달리 화면이 별도로 존재하지 않고, 한번 서비스가 시작되면 어플리케이션이 종료되어도 지속해서 백그라운드에서 실행되게 됩니다.
3. Broadcast Recevier(방송 수신자)
Broadcast Receivier은 간단하게 BR로 표현하기도 합니다. 이는 BroadcastReceiver 라는 class를 상속받아 사용하며, 시스템이나 어플리케이션으로부터 다양한 이벤트나 정보를 받아 알맞은 작업을 수행하는 컴포넌트 입니다.
우리가 SNS 앱에서 메세지가 오면 이를 화면에서 확인할 수 있듯이, 앱끼리도 특정 앱에서 이벤트가 발생했는지, 그렇지 않은지를 알 수 있도록 하는 것이 바로 BR의 역할입니다.
문자가 수신되면 수신된 문자를 특정 앱의 BR이 캐치하여 해당 문자가 스팸인지 아닌지 감별하는 기능을 예시로 들 수 있습니다.
이처럼 해당 이벤트를 여러 객체에게 전달하는 것이죠. 이 또한 대부분 UI가 존재하지 않습니다.
4. Content Provider(콘텐츠 제공자)
Content Provider는 간단하게 CP로도 표현됩니다. 콘텐츠 제공자는 다른 어플리케이션에게 데이터를 제공 및 관리해주는 컴포넌트로, DB의 데이터를 전달하기 위해서 많이 사용됩니다.
다른 컴포넌트와는 다르게 생명주기를 갖고 있지 않습니다.
ContentProvider class를 상속받아 사용합니다.
기본적으로 안드로이드는 주소록, 이미지, 오디오 등의 주요 데이터에 대해서 내장 CP를 제공합니다. 예시로, 특정 앱에서 연락처 정보에 대한 내용이 필요하면 CP를 이용하여 연락처 앱을 통해 연락처 정보를 가져올 수 있습니다.
가져올 뿐만 아니라 필요하다면 데이터 변경 또한 가능합니다.
이를 위해서, 데이터의 읽기와 쓰기에 대한 권한이 있어야 해당 데이터에 접근이 가능합니다.
주로 파일 입출력이나 SQLiteDB, Web 등을 이용해 데이터를 관리하게 됩니다.
'Android Develop' 카테고리의 다른 글
[Android] 우여곡절 개발기 : Fragment에서 Dialog 값 받아오기 (0) | 2021.02.11 |
---|---|
[Android] 우여곡절 개발기 : Bitmap 이미지 업로드가 느릴때 (0) | 2021.01.23 |
[Android] 액티비티의 생명주기 (0) | 2021.01.23 |
[Android] Manifest file이란? (매니페스트 파일의 역할) (0) | 2021.01.15 |
[Android] 객체 직렬화, Serializable (0) | 2020.12.19 |