안녕하세요 반가워요 소통해요
오늘은 안드로이드의 4대 컴포넌트에 대해 알아보겠습니다.
컴포넌트(Component)는 구성요소라는 뜻을 가지고 있습니다.
말 그대로 우리는 오늘 안드로이드라는 집을 짓는데에 필요한 4개의 주춧돌을 놓는다고 보시면 됩니다.
안드로이드라는 집을 짓는데에 있어 없어서는 안될, 필수적인 4대 요소!




주춧돌이 정확하게 어떤 원리인지는 잘 모릅니다 사실..

그건 제가 건축가가 된다면 포스팅하도록 하겠습니다




안드로이드 컴포넌트

4대 컴포넌트

  • 액티비티 (Activity)
  • 서비스 (Service)
  • 브로드캐스트리시버 (Broadcast Receiver)
  • 콘텐츠프로바이더 (Content Provider)

안드로이드 4대 컴포넌트는 위와 같은 구성으로 이루어져있습니다
그리고 컴포넌트들 간의 제약조건은 다음과 같습니다.

  • 각 컴포넌트들은 독립적인 형태로 존재한다.
  • 각 컴포넌트들은 고유한 기능을 수행한다.
  • 각 컴포넌트들은 인텐트를 통해 상호작용한다.

신호등에 비유하자면,

  • 각 등은 독립적으로 점등된다.
  • 각 등은 고유한 색깔을 가지고 있다.
  • 각 등은 회로를 통해 상호작용한다.

라고 설명이 가능하겠네요. 다음으로 설명할 것들을 위해

위의 키워드 3개만 기억하시면 컴포넌트를 이해하는데 도움이 될지도..?!



자자 진정하시고 이제 본격적으로 안드로이드의 4대 컴포넌트에 대한 이야기를 시작하겠습니다.

1) 액티비티

아무말도 없이 내 돈을 가져가는 넷플릭스 정기결제와 같이
아무것도 하지 않아도 말도 없이 나타나는 녀석!
안드로이드 개발을 해본 남녀노소를 불문하고 모두가 제일 많이 들어본, 제일 친근한!
프로젝트를 생성하기만 해도 기본적으로 생성되는 바로 그것!

첫 번째 구성요소, 액티비티입니다.
액티비티는 UI 화면을 구성하는 '기본 단위'라고 할 수 있습니다. 하나 이상의 액티비티를 가져야하며, 그 위에 여러 View를 올릴 수 있죠.

액티비티의 대표적인 특징 몇가지를 설명하자면 아래와 같습니다.

  • Activity 클래스를 상속받아 사용한다.
  • 최소 하나 이상의 Activity를 가진다.
  • 동시에 두 개 이상의 Activity를 DP할 수 없다.
  • 다른 어플리케이션의 Activity도 Intent를 통해 불러낼 수 있다.
  • Activity는 하나 이상의 View를 가질 수 있다.



2) 서비스

액티비티가 UI 화면에서 사용자와 직접적으로 상호작용하는 요소라면,
서비스는 그와 반대로 직접적으로 상호작용하지 않는 요소입니다.

일반적으로는 백그라운드에서 어떠한 작업을 처리하기 위해 사용합니다.
대표적인 예시로 음악을 들으며 카카오톡을 하는 것이 있습니다.
카카오톡을 하는 중이며 음악 프로그램은 백그라운드에서 수행되고 있는 것입니다.

서비스의 대표적인 특징은 다음과 같습니다.

  • 모든 서비스는 Service 클래스를 상속받아 사용한다.
  • DP되지 않으며 어플리케이션이 종료되어도 백그라운드에서 동작하는 컴포넌트이다.
  • 네트워크를 통해 데이터를 받아올 수 있다.
  • Activity와 같은 UI 스레드에서 실행된다.



3) 브로드캐스트 리시버

브로드캐스트 리시버안드로이드 OS로부터 발생하는 이벤트 정보를 받고 대응하는 컴포넌트입니다.
네트워크 오류, 앱 초기화, 재부팅 등 특수 이벤트 처리나 배터리 부족, 문자 수신, 전화 수신과 같은 정보를 받아 처리해야할 때 동작합니다.

어플리케이션이 백화점이라면 브로드캐스트 리시버는 안내방송에 비유할 수 있습니다.
브로드캐스트 리시버의 특징은 아래와 같습니다.

  • 디바이스에서 발생하는 중요한 이벤트를 어플리케이션에게 알려준다.
  • 리시버를 통해 디바이스 상황을 감지하고 대처한다.
  • 대부분 UI를 가지지 않는다.
  • 특수한 상황에 대응하기 위해 사용한다.
  • 특정 상황을 제외하면 시스템에서 시작한다.



4) 콘텐츠 프로바이더

콘텐츠 프로바이더데이터를 관리하고 다른 어플리케이션의 데이터를 제공하는데에 사용되는 컴포넌트입니다. 특정 어플리케이션이 사용중인 DB를 공유하기 위해 사용하며 그것을 위해 표준화된 인터페이스를 제공합니다.

전화번호부 어플리케이션을 예시로 들자면,

전화번호부에 저장되어 있는 DB를 많은 어플리케이션들이 사용한다.(ex: 카카5톡, 페2스북)
각각 제조사도 다르고 독립적인 어플리케이션인데 엏떢계 DB를 공유하는걸까?
-> 이 때 전화번호부 어플리케이션에서는 자신의 DB를 공유하기 위해 '콘텐츠 프로바이더'를 제공한다. 그렇게 되면 다른 어플리케이션에서는 컨텐츠 리솔버로 프로바이더가 제공하는 DB에 접근하여 데이터를 읽어올 수 있게 된다.

아래는 콘텐츠 프로바이더의 대표적인 특징입니다.

  • File I/O, SQLiteDB, Web 등을 통해 데이터를 관리한다.
  • 콘텐츠 프로바이더는 용량이 큰 데이터를 공유하는데 적합하다.



지금까지가 안드로이드의 4대 컴포넌트에 대한 설명이었습니다.
4대 컴포넌트는 독립적이며, 고유하고, 인텐트를 통해 상호작용한다고 말씀드렸었습니다.
지금부터 마지막으로 설명드릴 것은 그 중 컴포넌트 간의 상호작용을 위한 '인텐트'에 대한 것입니다.

5) 인텐트

인텐트란, 컴포넌트 간의 상호작용을 위한 통신수단의 역할을 합니다.
인텐트를 가장 많이 사용하는 대표적인 경우는 액티비티 간의 화면 전환이 있습니다.
또한 인텐트의 종류에는 명시적/암시적 두 가지가 있는데,

명시적 인텐트

  • 호출할 컴포넌트가 무엇인지 직접적으로 인텐트 객체에 정의하여 해당 컴포넌트를 호출
  • 어플리케이션 내부 컴포넌트를 호출할 때 사용

암시적 인텐트

  • 처리할 작업, 데이터, 액션 등의 정보를 인텐트 객체에 정의하고 이것을 처리할 수 있는 컴포넌트를 찾도록 요청

위와 같으며 인텐트의 대표적인 특징은 아래와 같습니다.

  • 서로 독립적이며 고유한 4대 컴포넌트간의 상호작용을 위한 장치이다.
  • 컴포넌트에 액션, 데이터 등을 전달한다.
  • 인텐트를 통해 다른 어플리케이션의 컴포넌트를 활성화시킬 수 있다.



제가 처음 안드로이드를 접했을 때가 생각나네요.

액티비티는 신이고 나는 무적이다

이런 느낌으로 액티비티 원툴라이프를 살았는데.. 이래서 머리가 나쁘면 고생하나봅니다 ㅎㅎ..
다른 분들은 구글에서 정성껏 마련해둔 컴포넌트 잊지말고 잘 활용하셔서 건강하고 효율적인 코딩하셨으면 좋겠습니다.

오늘은 이렇게 안드로이드의 4대 컴포넌트에 대해 알아봤는데요!
어떻게.. 도움이 되셨는지 모르겠네요 안됐다면 유감입니ㄷ

그럼 이만 가볼게요 오늘도 글 읽어주셔서 감사합니다 (__)

profile
키보드를 좋아합니다.

3개의 댓글

comment-user-thumbnail
2021년 9월 26일

그림 크기를 변경해도 적용되지 않는 문제가 있는 것 같습니다.
불편을 드려 죄송합니다 ^^

답글 달기
comment-user-thumbnail
2021년 9월 26일

ㅋㅋㅋ읽는데 너무 재밌어요~ 다른 포스팅도 해주세요!! :D

1개의 답글