앱 구성요소(컴포넌트)란?
안드로이드 앱 아키텍처에서 가장 큰 특징은 컴포넌트 기반이라는 것이다.
컴포넌트는 앱의 구성 단위이며, 컴포넌트 여러 개를 조합하여 하나의 앱을 만든다.
또한, 앱의 필수적인 기본 구성요소이며 각 구성 요소는 시스템이나 사용자가 앱에 들어올 수 있는 진입점이다.
다른 구성 요소에 종속되는 구성요소도 있다.
* 진입점 (Entry Point) : 시스템 또는 사용자가 앱에 들어갈 수 있는 점
안드로이드 앱에서 컴포넌트의 물리적인 모습은 클래스이다.
이때, 모든 클래스가 컴포넌트는 아니다.
클래스는 컴포넌트 클래스와 일반 클래스로 나뉜다.
이 둘 차이는 클래스의 생명 주기를 누가 관리하는 지에 달려있다.
- 일반 클래스 : 생명주기를 개발자 코드로 관리.
- 컴포넌트 클래스 : 안드로이드 시스템이 생성하여 관리, 소멸을 한다.
앱 구성 요소(컴포넌트) 네 가지 유형
- Activity (액티비티)
- Service (서비스)
- Broadcast Receiver (브로드캐스트 리시버)
- Content Provider (콘텐트 제공자)
컴포넌트의 특징
- 앱 내에서 각 구성요소는 독립적인 실행 단위이다.
- 인텐트를 통해 서로 상호작용을 할 수 있음
- 각 자 고유의 기능을 수행한다는 공통적인 특징이 있음.
- 컴포넌트가 앱 내에서 독립해서 실행되는 특징 덕분에 앱의 실행 시점이 다양하다.
- 그리하여 앱은 main 함수 개념이 없다.
Activity : 사용자 화면을 담당하는 구성요소다.
- 두 개 이상 Activity 를 동시에 보여줄 수 없다.
- Intent 를 통해 다른 애플리케이션의 Activity 를 호출할 수 있다.
- 반드시 애플리케이션에는 하나 이상의 Activity 가 존재해야 한다.
- 하나 이상의 View 또는 ViewGroup을 포함한다.
ex) 카메라 앱이라면? 이메일 앱 안의 액티비티를 시작하여 사용자가 새 이메일을 작성하고 사진을 공유하게 할 수 있다.
Service : 백그라운드 에서 실행되는 프로세스를 의미한다.
- 따로 UI를 가지지 않아, 화면상에 보이지 않고 백그라운드에서 수행된다.
- 애플리케이션이 종료되더라도, 시작된 Servic는 백그라운드에서 계속 수행된다.
- 네트워크 연동이 가능하다
ex) 오랫동안 실행되는 작업, 음악 재생, 상호 작용을 하지 않는 상태에서 네트워크에 데이터를 가져오는 행위 등..
BroadCast Receiver : 안드로이드 OS 로부터 발생하는 이벤트와 정보를 받아와 핸들링한다.
- 사용자 디바이스의 네트워크(와이파이 접속과 같은) 연결 해제나 위치 정보 사용 해제 등 특수한 이벤트에 대한 처리
- 또는 일부 데이터가 장치에 다운로드되어 사용할 수 있다는 문자나 수신과 같은 정보를 받아 처리를 해야할 때 사용된다.
- 거의 UI를 가지고 있지 않다.
ex) 화면이 꺼졌거나 배터리가 부족하거나 사진을 캡처했다고 알릴 때 사용된다.
Content Provider : 데이터를 관리하고 다른 애플리케이션의 데이터를 제공하는데 사용된다.
- 데이터베이스
- 파입 입출력
- Web 등을 통해서 데이터를 관리
ex) 안드로이드 시스템은 사용자의 연락처 정보를 관리하는 콘텐츠 제공자를 제공
안드로이드 시스템
안드로이드 시스템 디자인은 어떤 앱이든 다른 앱의 구성 요소를 시작할 수 있다는 점에서 독특한 측면이 있다.
시스템이 구성요소(컴포넌트)를 시작할 때, 그 앱에 대한 프로세스를 시작하고, 해당 컴포넌트에 필요한 클래스를 인스턴스화 한다.
따라서, 안드로이드 앱은 단일한 진입 지점이 없습니다.
ex ) 여러분의 앱이 카메라 앱 내에서 사진을 캡처하는 액티비티를 시작하면, 해당 액티비티는 여러분 앱의 프로세스가 아니라 카메라 앱에 속한 프로세스에서 실행됩니다
시스템이 다른 앱에 대한 엑세스를 제한하는 파일 권한을 가지고 각 앱을 별도의 프로세스에서 실행하기 때문에,
내 앱은 다른 앱에서 직접 구성요소를 활성화할 수 없다.
하지만, 안드로이드 시스템으로는 이것이 가능하다.
다른 앱에 있는 컴포넌트를 활성화 하려면? 시스템에 메시지를 전달하여 특정 구성 요소를 시작하고자 하는 인텐트를 밝혀야 한다.
그러면 시스템이 대신 해당 구성 요소를 활성화 해준다.
https://developer.android.com/guide/components/fundamentals#Components
'Mobile App' 카테고리의 다른 글
[안드로이드] - Android Process lifecycle (0) | 2022.07.13 |
---|---|
[안드로이드] - Android Process & Thread (0) | 2022.07.13 |
[안드로이드] - Android Platform (0) | 2022.07.09 |
[안드로이드] - Android Design pattern (MVC, MVP, MVVM) (0) | 2022.07.06 |
[안드로이드 에러] AAPT: error: duplicate attribute. Error (0) | 2022.03.19 |