Android 기본 4대 구성요소

Android 4대 Component
  • 액티비티
  • 서비스
  • 컨텐트 프로바이더
  • 브로드캐스트 리시버
안드로이드를 구성하는 4대 핵심 구성요소가 바로 위의 네가지입니다.
어떤 어플리케이션을 만드는지에 따라 위의 구성요소를 모두 사용할 수도 있고 그렇지 않을 수도 있습니다.
각각의 구성요소가 어떤 역할을 하고 사용자에게 어떤 기능을 제공하는지 알아보도록 합니다.
Activity
액티비티는 사용자가 어플리케이션과 상호작용하는 단일 화면을 의미합니다. 

모든 어플리케이션은 액티비티로 구성되어 있습니다. 어떤 어플리케이션이든 사용자에게 가치를 제공하기 위해서는 화면을 보여주고 상호작용을 해야하기 때문입니다. 

기억해야 할 점은 액티비티는 레이아웃이 아니라는 점입니다. 

레이아웃은 사용자가 액티비티를 통해 상호작용하기 위해 나타내는 형식이라고 할 수 있습니다.

우리는 흔히 키보드를 통해 컴퓨터에 문자를 입력합니다. 키보드는 문자를 입력하기 위해 사용하는 도구입니다. 

액티비티를 사용자와 상호작용하기 위한 도구라고 한다면 액티비티를 키보디에 비유할 수 있습니다. 
그렇다면 레이아웃은 키보드의 형식 즉, 두벌식 자판이냐 Tenkeyless 자판이냐 같은 키보드의 모양이라고 할 수 있습니다. 

ACTIVITY LIFE CYCLE
스마트폰은 일반 컴퓨터와는 달리 한정적인 자원을 사용합니다. 가장 먼저 배터리를 떠올릴 수 있습니다. 

이 뿐만 아니라 데스크탑 컴퓨터처럼 여러개의 창을 띄우고 한번에 여러가지 작업을 하는 것에 제한이 있습니다. 

사용자는 하나의 액티비티를 보다가 다른 액티비티로 전환을 해야 하며 여러 액티비티를 동시에 볼 수 없습니다. 

이 때문에 한정적인 스마트폰의 자원을 최대한 효율적으로 활용하기 위해 액티비티는 생명주기를 가집니다.







Service 
서비스는 사용자와 직접적으로 상호작용하는 구성요소는 아닙니다. 

흔히 백그라운드에서 작업을 처리하기 위해 서비스를 사용하는데, 예를 들면 다른 어플리케이션을 사용하면서 음악 재생을 한다던지 다른 작업을 하면서 파일을 다운로드 받을 때 서비스를 사용합니다. 

서비스가 사용자의 인터페이스(UI)를 방해하지 않고 보이지 않는 곳에서 작업을 처리하기 때문에 별도의 쓰레드에서 동작한다고 오해하는 경우가 있습니다. 

서비스는 엄연히 메인 쓰레드에서 동작하며 그렇기 때문에 지속적인 작업을 처리하기 위해서는 서비스내에서 별도의 쓰레드를 생성하여 작업을 처리해야 합니다.

Content Provider
컨텐트 프로바이더는 말 그대로 안드로이드 내에서 컨텐트(데이터)를 제공해주는 구성요소입니다. 

다른 어플리케이션에 정보를 주고 싶을 때나 반대로 정보를 가져와야 할 떄 컨텐트 프로바이더를 통해서 작업을 수행해야 합니다. 
예를 들어, 채팅 어플리케이션에서 사진을 전송하고 싶을 때, 사진 어플리케이션(갤러리)에 접근하여 사진 정보를 가져오게 됩니다. 
이때 컨텐트 프로바이더를 통해 사진 정보를 가져올 수 있습니다. 

이외에도 연락처 정보나 다른 어플리케이션에서 관리하는 정보를 가져오고 싶을 때 혹은 보내고 싶을 때 컨텐트 프로바이더를 사용하게 됩니다.

Broadcast Receiver
브로드캐스트 수신자는 시스템 레벨에서 사용자나 다른 어플리케이션에 알람을 전달해주기 위한 구성요소입니다.

예를 들어, 채팅 어플리케이션에서 메시지가 온 경우 브로드캐스트 수신자에 의해 메시지가 왔다고 사용자에게 푸시 알람을 줄 수 있습니다.

이 부분을 좀 더 자세히 살펴보면 다음과 같습니다.
  • 채팅 어플리케이션의 서비스가 채팅 서버로부터 메시지를 받을 때까지 계속 대기합니다.
  • 메시지가 오면 서비스에서 메시지를 확인한 다음 브로드캐스트 수신자에게 메시지 내용과 알람 레벨을 주고 알람을 띄워달라고 요청합니다.
  • 브로드캐스트 수신자는 서비스에서 받은 메시지 내용을 가공하여 푸시 알람으로 사용자에게 메시지가 왔음을 알려줍니다.

이외에도 브로드캐스트 수신자는 사진 다운로드가 완료되었다거나 배터리가 얼마 안남았다는 알림같은 시스템 레벨의 알람을 사용자에게 알려주는 역할을 하기도 합니다.


댓글()