[Android] 안드로이드 앱 기본 요소

곽호택·2021년 7월 29일
0

안드로이드

목록 보기
1/16
post-thumbnail
post-custom-banner

! 앱잼이 끝나고 코드를 리팩토링 하기위해 안드로이드 권장 아키텍처를 공부하다가 먼저 안드로이드 기본요소에 대해 공부할 필요성을 느끼고 안드로이드 공식 문서를 참고해서 공부했다. Android Developer - 앱 기본 구성 요소

1. 안드로이드의 4대 컴포넌트

안드로이드의 4개의 컴포넌트는 필수적인 기본 구성 요소이며, 각 구성 요소는 시스템이나 사용자가 앱에 들어올 수 있는 진입점이다.

앱 컴포넌트에는 다음과 같이 4가지 유형이 있다.

  • Activity

  • Service

  • BroadCast Receiver

  • Content Provider

여기서 각 컴포넌트들은 뚜렷한 목적을 수행하고 수명 주기가 있다.
자세하게 각 컴포넌트들을 알아보도록 하자!

2. Activity

사용자와 상호작용하기 위한 진입점이고, 사용자 인터페이스(UI)를 포함한 화면 하나를 나타낸다.

예를 들자면, 만약 이메일 앱일 경우 새 이메일 목록을 표시하는 Activity가 있고, 이메일을 작성하는 Activity 하나, 이메일을 읽기 위한 Activity가 있을 수 있다. 즉 한 앱은 여러 Activity로 구성되어 있지만 각각의 Activity는 서로 독립되어 있다.

서로 독립되어 있기 때문에 다른 앱에서 이메일 Activity 중 하나에 접근이 가능하다.

Activity는 시스템과 앱의 주요 상호작용을 다음과 같이 돕는다.

  • 사용자의 화면에 표시된 것을 추적하여서 Activity를 실행하고 있는 프로세스를 계속해서 시스템에서 실행하도록 한다.

  • 중단된 Activity에서 사용자가 다시 찾을 만한 Activity를 인지하여 해당 프로세스를 유지하도록 하며 이때 더 높은 우선순위를 부여한다.

  • 앱이 프로세스를 종료하도록 도와 이전 상태가 복원되는 동시에 사용자들이 Activity로 돌아갈 수 있도록 한다.

추가적인 특징으로

  • Activity의 크기는 상태바 영역을 제외하고 화면 전체로 고정이다.

  • Activity내에서는 Fragment를 추가하여 화면을 분할하여서 별도로 조작할 수 있다.

이러한 Activity 하나는 Activity 클래스의 subClass로 구현된다.

(생명 주기는 따로 Activity 포스팅 할때!)

3. Service

Service는 백그라운드에서 앱을 계속 실행하기 위한 다목적 진입점이다.

Serivce는 위에 말했다시피 특정 액티비티와 상관 없이 백그라운드에서 실행되는 컴포넌트이다. 주로 오랫동안 실행되는 작업을 수행하거나 원격 프로세스를 위한 작업을 수행하는데, 예를 들면 백그라운드에서 음악을 재생하거나, 사용자와 Activity 간의 상호작용을 차단하지 않고 네트워크를 통해 데이터를 가져오는 작업을 수행한다.

이러한 작업들을 수행하기 때문에 사용자 인터페이스(UI)는 제공하지 않는다.

Service를 구현할 경우 Service 클래스를 상속한 후, 생명주기 메소드를 재정의하며 원하는 기능을 구현한다.

- 생명 주기

Service의 생명 주기는 두가지로 분류가 가능한데 로컬 서비스 / 원격 서비스로 나뉜다.

  • Local Service

» onCreate() : Service가 생성될 때 호출

» onStart() : startService()메소드에 의해 Service가 시작될 때마다 호출

» onDestroy() : Service가 종료될 때 호출

  • Remote Service

» onCreate() : Service가 생성될 때 호출

» onBind() : bindService()메소드에 의해 Service가 시작될 때마다 호출

» onUnbind() : 서비스와 연결이 끊겼을 때 호출

» onDestroy() : Service가 종료될 때 호출

4. Broadcast Receiver

시스템이 사용자 플로우 밖에서의 이벤트를 앱에 전달하도록 지원하는 구성 요소로, 앱으로 들어갈 수 있는 명확한 진입점이다.

Service와 마찬가지로 UI를 가지고 있지 않지만, 상태 표시줄 알람을 생성해서 사용자에게 Broadcast 이벤트가 발생했다고 알릴 수 있다.

Broadcast에는 시간대 변경, 배터리 부족, 언어 설정 변경이 있고, 이 Broadcast를 받을 때 Broadcast Reciver가 이를 처리하고 다시 대기모드로 진입한다.

추가적으로 10초 이내의 작업만을 보장하기 때문에 오랜 시간 동작해야 할 경우 별도의 스레드로 처리하거나 서비스에 구현을 해야 한다!!

Broadcast Reciver를 동작 시키기 위해서는 BroadCastReceiver 클래스를 상속한 다음에 onReceive() 메소드에 원하는 기능을 작성하면 된다.

5. Content Provider

애플리케이션 간의 데이터 공유를 위해 표준화된 인터페이스를 제공하는 컴포넌트.

파일 시스템, 데이터 베이스, 웹 또는 앱이 접근할 수 있는 다른 모든 저장 위치에 저장 가능한 앱 데이터의 공유형 집합을 관리한다.

예를 들어 Android 시스템의 경우 사용자의 연락처 정보를 관리하는 Content Provider를 제공한다. 이 연락처에 접근할 수 있는 권한을 가진 앱일 경우 Content Provider를 통해 특정한 연락처에 대한 정보를 읽고 쓸 수 있다.

즉 Content Provider는 읽기, 쓰기, 수정하기, 삭제하기의 기능을 작성할 수 있고, 인터페이스를 제공하기 때문에 다른 앱에서 구현된 메소드를 호출하기만 하면 사용이 가능하다!


이상 정리 끝!

profile
잘하고싶다
post-custom-banner

0개의 댓글