[Android] 앱 기본 구성 요소 (Application 4대 요소)
안녕하세요 골드입니다.
오늘은 안드로이드 애플리케이션을 구성하는 기본 4대 요소에 대해서 글을 쓰도록 하겠습니다.
1. Android Application Basic
먼저 안드로이드는 기본적으로 앱 자기 자신의 작업을 수행하기 위해 필요한 구성 요소에 대한 액세스 권한을 갖고 그 이상은 허용되지 않습니다. 이런 방식을 최소 권한의 원리라고 이야기합니다. 필요한 구성 요소 외에 다른 요소들에 대한 액세스를 갖고 있지 않고 알고 싶거나 궁금해하지 않습니다.
- 안드로이드 운영체제는 Linux 기반입니다. 멀티유저 Linux 시스템으로, 각 애플리케이션은 하나의 사용자와 같습니다. 그러므로 시스템은 각 애플리케이션에 고유한 ID를 부여합니다. 시스템 안에 모든 기능들에 권한을 부여하고 이 기능들에 대한 액세스를 할당받은 ID만 해당 기능에 접근이 가능하게 되어 있습니다.
- 애플리케이션이 Detach 되어 프로세스 상태가 되면 각 프로세스는 자체적인 가상 머신을 갖습니다. 이러한 방식은 하나의 애플리케이션의 코드가 다른 애플리케이션에 영향을 미칠 수 없는 상태로 실행된다는 뜻입니다.
- 안드로이드의 구성 요소(4대 구성 요소) 중 어느 하나라도 실행된다면 프로세스를 실행하고, 더 이상 필요 없거나 다른 앱을 위해 메모리를 확보해야 하는 상태가 된다면 해당 프로세스를 종료합니다.
- 하지만 때에 따라서 두 개의 앱이 같은 Linux ID를 공유하는 경우도 있습니다. 이러한 경우 두 개의 앱이 같은 권한에 액세스 할 수 있게 됩니다. 가상 머신을 공유할 수도 있습니다. 이런 경우 같은 인증서로 서명되어야 합니다.
2. Application 구성 요소
애플리케이션을 구성하는 기본 요소는 네 가지가 있습니다.
- Activity
- Service
- Broadcast Receiver
- Contents Provider
각 요소들은 나름의 생명 주기를 갖고 각각의 목적을 수행하도록 설계되었습니다.
1. Activity
액티비티는 가장 익숙한 요소입니다. 안드로이드 스튜디오에서 프로젝트를 생성하면 언제든지 볼 수 있는 요소입니다. 액티비티는 사용자와 상호작용을 위한 진입점입니다. 좀 더 쉽게 표현하면 사용자 인터페이스를 포함한 하나의 화면입니다. 안드로이드 애플리케이션을 실행하면 나타나는 화면들은 액티비티로 표현됩니다.
- 사용자가 현재 화면에 지속적인 관심을 갖고 상호작용하고 있다면 프로세스를 계속 실행합니다.
- 사용자가 멀티 윈도우 환경에서 다른 앱과 상호작용을 하거나, 잠시 다른 앱을 사용하는 경우(링크를 통해 이동한다거나) 액티비티는 중단 상태가 됩니다. 이 상태가 오래 지속되거나 시스템이 메모리를 확보해야 한다면 프로세스가 종료될 수 있습니다.
- 사용자가 액티비티 프로세스를 종료하면 프로세스가 종료됩니다.
액티비티는 Activity 클래스를 상속받습니다. 다만, 모든 안드로이드 OS 버전의 호환을 위해서 현재 AppCompatActivity를 상속받습니다. 당연하게도 AppCompatActivity의 부모 클래스 역시 Activity입니다. 액티비티는 자체 수명 주기를 갖습니다. 액티비티의 수명주기에 대해서는 여기(혹은 공식문서)를 참고하세요.
https://kumgo1d.tistory.com/76
2. Service
서비스는 백그라운드에서 앱을 계속 실행하기 위한 진입점입니다. 예를 들어 오래 걸리는 작업을 실행하거나 동기화 작업, 음악을 재생하는 작업이 이에 속합니다. 서비스는 UI를 제공하지 않습니다. 서비스로 표현된 앱은 다른 앱에 바인딩할 수 있습니다. 이는 서비스가 다른 프로세스에 API를 제공한다는 뜻입니다. 이때, 시스템은 프로세스 사이에 어떠한 종속성이 있는지 확인할 수 있습니다. 서비스를 백그라운드에서 실행한다는 것은 이런 의미입니다. 예를 들어 프로세스 1이 프로세스 2의 서비스에 바인딩되었다면, 프로세스 1을 위해 프로세스 2도 실행해야 한다는 것을 의미합니다. 프로세스 1이 활성 상태라면 프로세스 2도 활성 상태인 것처럼 인식해야 합니다. 서비스에는 세 가지 유형이 있습니다.
- 포그라운드
- 백그라운드
- 바인드
서비스에 대해서는 나중에 추가적으로 포스팅하도록 하겠습니다.
3. Broadcast Receiver
브로드캐스트 리시버는 시스템이 정기적인 사용자 플로우 밖에서 이벤트를 앱에 전달하도록 지원하는 구성요소입니다. 예를 들어 알람을 예약한 경우 알람을 앱의 브로드캐스트 리시버에 전달하면 알람 앱을 계속 켜놓지 않아도 특정 시간에 알람 이벤트가 발생합니다. 대부분의 브로드캐스트는 시스템에서 발생하는데 대표적으로 배터리가 부족하거나 사진을 캡처했다는 알림같은 것들이 있습니다. 브로드캐스트 리시버는 UI를 표시하진 않지만, 알림을 생성하여 이벤트 발생을 사용자에게 전달합니다.
4. Contents Provider
콘텐츠 제공자는 파일 시스템, 로컬 데이터베이스나 웹이 액세스할 수 있는 다른 영구 저장 위치에 저장 가능한 앱 데이터의 집합을 관리합니다. 애플리케이션이 자체적으로 저장한 데이터, 다른 앱이 저장한 데이터에 대한 액세스 권한을 관리하도록 돕고 다른 앱과 데이터를 공유할 방법을 제공합니다. 예를 들어, 권한을 허용할 경우 앱에 사진 데이터에 접근하거나 연락처 정보에 접근할 때, 콘텐츠 제공자를 사용할 수 있습니다. 또한 액세스 하여 이를 읽는 것뿐만 아니라 수정할 수 있도록 허용할 수도 있습니다.
3. 결론
애플리케이션에 기본 구성 요소들에 대해 간단한 개념을 적었습니다. 이러한 구성 요소들을 사용하기 위해서는 반드시 애플리케이션의 매니페스트 파일에 해당 구성 요소를 사용한다고 명시해야 합니다. 그러면 후에 시스템이 앱의 매니페스트 파일을 읽고 사용할 수 있도록 합니다. 또한, 구성 요소들은 인텐트라는 비동기식 메시지로 활성화됩니다. Intent는 하나의 메신저로써 구성 요소에 작업을 요청하는 역할을 수행합니다.
여기까지 골드였습니다.
감사합니다.
본문 출처 및 참고자료 : https://developer.android.com/guide/components/fundamentals