안드로이드의 4대 컴포넌트는 액티비티, 서비스, 방송 수신자, 콘텐츠 제공자 이렇게 4가지를 말합니다.
애플리케이션을 만들 때 주요 구성요소이며 각각의 구성 요소는 인텐트를 통해서 상호 통신을 합니다.
즉 액티비티에서 다른 구성요소를 호출할 때는 인텐트를 거쳐야 한다는 것입니다.
- 각 컴포넌트는 하나의 독립적인 형태로 존재합니다.
- 각 컴포넌트는 고유의 기능을 수행합니다.
- 각 컴포넌트는 인텐트를 통해 서로 상호작용합니다.
아래는 각 컴포넌트에 대한 설명입니다.
인텐트(Intent)
인텐트란 애플리케이션 컴포넌트 간에 작업 수행을 위한 정보를 전달하는 역할을 하며
통신 수단이라고 생각하시면 됩니다.
인텐트를 가장 많이 사용하는 예로는 액티비티 간의 화면 전환이 있습니다.
즉, 인테트는 컴포넌트 A가 컴포넌트 B를 호출할 때 필요한 정보를 가지고 있으며
이 정보에는 호출 대상이 되는 컴포넌트 B의 이름이 명시적으로 표시가 됨과 동시에
속성들이 암시적으로 표시됩니다.
- 서로 독립적으로 동작하는 4가지 컴포넌트들 간의 상호 통신을 위한 장치입니다.
- 컴포넌트에 액션, 데이터 등을 전달합니다.
- 인텐트를 통해 다른 애플리케이션의 컴포넌트를 활성화시킬 수 있습니다.
액티비티(Activity)
액티비티는 사용자가 애플리케이션과 상호작용하는 단일 화면을 의미하며 모든 안드로이드의
애플리케이션은 액티비티로 구성되어있습니다.
즉, 사용자와 상호작용을 담당하는 인터페이스라고 할 수 있습니다. (UI)
액티비티의 역할을 하기 위해서는 자바소스에서 Activity클래스를 상속해야 하며,
액티비티가 기본적으로 가지고 있는 생명주기(life cycle) 메서드를 재정의하여 원하는 기능을
구현하는 방식으로 제작합니다. 가장 많이 쓰이는 컴포넌트 이기때문에 중요합니다.
- 안드로이드 애플리케이션은 반드시 하나이상의 액티비티를 가지고 있어야합니다.
- 두 개의 액티비티를 동시에 볼 수 없습니다.
- 한 개 이상의 View 또는 ViewGroup을 포합 합니다.
- 액티비티 내에 프래그먼트를 추가하여 화면을 분할시킬 수 있습니다.
서비스(Service)
서비스는 사용자와는 직접적으로 상호작용하는 요소는 아닙니다.
백그라운드에서 어떠한 작업을 처리하기 위해 서비스를 사용하는데
PC로 예를 들면 백그라운드에서 동작하는 서비스 프로그램과 동일하며 안드로이드에서는
카카오톡을 사용하면서 멜론을 통해 음악을 듣는다든지 파일을 다운로드할 때 서비스를 사용합니다.
서비스는 사용자의 인터페이스(화면)를 방해하지 않고 눈에 보이지 않는 곳에서 작업을 처리하기 때문에
별도의 스레드에서 동작한다고 생각하지만 서비스는 메인 스레드에서 동작하기 때문에
서비스 내에서 별도의 스레드를 생성하여 작업을 처리해야 합니다.
서비스도 애플리케이션의 구성요소이므로 새로 만든 후에 항상 매니페스트에 등록을 해주어야 하고
메인 액티비티에서 서비스를 시작하고 싶은 경우 startService()라는 메서드를 이용해 서비스를 실행할 수 있습니다.
- 화면 없이 백그라운드에서 돌아가는 컴포넌트입니다.
- 한번 시작된 서비스는 애플리케이션이 종료돼도 백그라운드에서 돌아갑니다.
- 모든 서비스는 Service클래스를 상속받아서 사용합니다.
- 네트워크를 통해 데이터를 가져올 수 있습니다.
방송 수신자(BroadCast Receiver)
방송 수신자는 안드로이드 OS로부터 발생하는 각종 이벤트와 정보를 받아와서 핸들링하는 컴포넌트입니다.
사용자 안드로이드 디바이스의 시스템 부팅 시 앱 초기화, 네트워크 끊김 등등 특수한 이벤트에 대한 처리나
배터리 부족 알림, 문자 수신과 같은 정보를 받아 처리를 해야 할 필요가 있을 때 동작합니다.
즉, 안드로이드 OS에서 메신저 앱 또는 문자 메시지가 오면 모든 앱에 "메시지가 왔습니다"라는 하나의
정보를 방송합니다.
이 메시지를 받기 위해 방송 수신자를 구현하게 되면 해당 정보가 오면 특정 이벤트를 처리할 수가 있습니다.
- 대부분 UI를 가지지 않습니다.
- 안드로이드 디바이스의 특수한 상황에 대응하기 위해 사용됩니다.
- 특정한 상황을 제외하고는 브로드캐스트는 시스템에서 시작합니다.
콘텐츠 제공자(Content Provider)
콘텐츠 제공자는 데이터를 관리하고 다른 애플리케이션의 데이터를 제공하는데 사용되는 컴포넌트입니다.
특정한 애플리케이션이 사용하고 있는 데이터베이스를 공유하기 위해 사용하며
애플리케이션 간의 데이터 공유를 위해 표준화된 인터페이스를 제공합니다.
콘텐트 제공자는 생명주기(life cycle)를 가지고 있지 않습니다.
- 파일 입출력, SQLiteDB, WEB 등을 통해서 데이터를 관리합니다.
- 콘텐츠 제공자를 통하여 다른 애플리케이션의 데이터도 변경할 수 있습니다.
- 다른 애플리케이션이 현재 실행 중인 애플리케이션 내에 있는 데이터베이스에
함부로 접근하지 못하게 할 수 있으면서 나 자신이 공개하고 공유하고 싶은
데이터만 공유할 수 있도록 도와줍니다. - 작은 데이터들은 인텐트로 애플리케이션끼리 데이터를 서로 공유가 가능하지만
콘텐츠 제공자는 음악 또는 사진, 파일 등과 같이 용량이 큰 데이터를 공유하는데 적합합니다. - 프로바이더는 데이터의 읽기, 쓰기에 대한 퍼미션이 있어야 애플리케이션에 접근이 가능합니다.
- 데이터베이스에서 흔히 사용되는 CURD(Create, Read, update, Delete) 원칙을 준수합니다.
'Android' 카테고리의 다른 글
[Android] Palette (Widgets) (0) | 2021.01.26 |
---|---|
[Android] Palette (Button) (0) | 2021.01.26 |
[Android] Palette (Text) (0) | 2021.01.25 |
[Android] Manifest (0) | 2021.01.25 |