본문 바로가기
  • Jetpack 알아보기
Android/ʕ•ᴥ•ʔ

안드로이드 앱의 기본 구성 요소 (INTRO)

by 새우버거♬ 2021. 7. 8.

안드로이드의 구성 요소는 시스템이나 사용자가 앱에 들어올 수 있는 진입점입니다. 각 구성요소는 나름의 생명주기를 가지고 있기 때문에 각자의 목적을 수행하고, 생성과 소멸을 정의합니다.

 

앱의 기본 구성요소는 안드로이드 앱 개발을 할 때, 필수적으로 알아 둬야 하고, 목적에 맞게 구성 요소를 생성해야 합니다.  각 구성요소(Activity, Service, BroadCast Receiver, Content Provider) 에 대하여 간단하게 알아보려고 합니다. 


Activity

Activity는 사용자와 상호작용하기 위한 진입점입니다. 사용자 인터페이스와 화면(UI)을 포함하고 있기 때문에 setContentView(View)을 이용하여 UI를 배치하는 창을 생성할 수 있습니다. 우리가 보통 보는 앱의 화면이 Activity에 해당합니다. Context.startActivity()와 함께 사용하기 위해서는 AndroidManifest.xml 파일에 <activity> 태그로 선언이 되어야 합니다.

Activity vs AppCompatActivity
우리는 보통 AppCompatActivity 클래스를 상속받아서 Activity를 구성합니다. AppCompatActivity 클래스는 안드로이드 하위 버전을 대응하기 위한 Activity입니다.
예를 들어, ActionBar는 API 11버전부터 사용할 수있는 기능입니다. AppCompatActivity 클래스에서는 API 11 미만 버전에서도 setSupprtActionBar() API와 더불어 ActionBar 기능을 사용할 수 있습니다.

Service

Service는 백그라운드에서 앱을 계속 실행하기 위한 진입점입니다. 사용자 인터페이스를 제공하지 않습니다. 따라서, 사용자와 상호 작용을 하지 않는 동안 오래 실행되는 작업을 수행하거나 다른 앱과 함께 사용하기 위한 컴포넌트입니다.

Context.startService() 및 Context.bindService()와 함께 사용하기 위해서는 AndroidManifest.xml 파일에 <service> 태그로 선언이 되어야 합니다.

포그라운드 vs 백그라운드 vs 바인드
포그라운드 서비스는 사용자에게 보여지는 몇몇 작업을 수행합니다. 따라서, Notification을 생성하여 사용자에게 서비스가 실행 중이라는 것을 알려줘야 합니다. 대표적으로 오디오 서비스가 있습니다.
백그라운드 서비스는 사용자에게 직접 보이지 않는 작업을 수행합니다. 
바인드 서비스는 구성 요소가 bindService()를 호출하면 Service가 구성 요소에 바인드됩니다. 바인딩된 서비스는 클라이언트 - 서버 인터페이스를 제공하여 구성 요소와 서비스가 상호작용하고, 데이터를 받을 수 있습니다.

BroadCast Receiver

BroadCast Receiver는 시스템이 밖에서 앱으로 이벤트를 전달하도록 지원하는 구성 요소입니다. 예를 들어 비행기 모드로 전환하고, 해제할 때와 같이 다양한 시스템 이벤트가 발생하면 시스템은 앱으로 브로드 캐스트를 전달합니다. 브로드 캐스트를 수신받도록 등록한(register) 모든 앱에 전달이 됩니다.

정적 브로드 캐스트 vs 동적 브로드 캐스트
정적 브로드 캐스트는 manifest 파일에 broadcast receiver를 선언하면 브로드 캐스트가 전송될 때 앱이 아직 실행 중이 아니라면 시스템에서 앱을 실행합니다. API 26 레벨 이상부터 특정 브로드 캐스트를 예외하고 manifest에 선언할 수 없도록 제한되었습니다.
동적 브로드 캐스트는 Context에 broadcasat receiver를 등록합니다. Context가 유효한 동안 브로드 캐스트를 수신할 수 있습니다. 

Content Provider

Content Provider는 앱이 자체적으로 저장된 데이터와 다른 앱이 저장한 데이터에 대한 접근 권한을 관리하고, 다른 앱과 데이터를 공유할 수 있도록 지원하는 구성 요소입니다. 콘텐츠 제공자를 구성하면 다른 애플리케이션이 앱 데이터에 안전하게 액세스하여 이를 수정할 수 있도록 허용할 수 있다는 장점이 있습니다.