본문 바로가기
Mobile App

[안드로이드] - Android Component

by Jman 2022. 7. 11.

앱 구성요소(컴포넌트)란?

안드로이드 앱 아키텍처에서 가장 큰 특징은 컴포넌트 기반이라는 것이다.
컴포넌트는 앱의 구성 단위이며, 컴포넌트 여러 개를 조합하여 하나의 앱을 만든다.
또한, 앱의 필수적인 기본 구성요소이며 각 구성 요소는 시스템이나 사용자가 앱에 들어올 수 있는 진입점이다.
다른 구성 요소에 종속되는 구성요소도 있다.

* 진입점 (Entry Point) : 시스템 또는 사용자가 앱에 들어갈 수 있는 점

안드로이드 앱에서 컴포넌트의 물리적인 모습은 클래스이다.
이때, 모든 클래스가 컴포넌트는 아니다.

클래스는 컴포넌트 클래스 일반 클래스로 나뉜다.
이 둘 차이는 클래스의 생명 주기를 누가 관리하는 지에 달려있다.
  1. 일반 클래스 : 생명주기를 개발자 코드로 관리.
  2. 컴포넌트 클래스 : 안드로이드 시스템이 생성하여 관리, 소멸을 한다. 

 

 

앱 구성 요소(컴포넌트) 네 가지 유형

  • 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

 

애플리케이션 기본 항목  |  Android 개발자  |  Android Developers

애플리케이션 기본 항목 Android 앱은 Kotlin, Java, C++ 언어를 사용하여 작성할 수 있습니다. Android SDK 도구는 모든 데이터 및 리소스 파일과 함께 코드를 컴파일하여 하나의 APK를 만듭니다. Android 패

developer.android.com