개발/안드로이드

안드로이드 4대 컴포넌트

스몰스테핑 2024. 6. 25. 14:49

잡설:

면접때 받은 질문인 안드로이드 4대 컴포넌트.

아니 정확히는 안드로이드에 액티비티, 서비스, 브로드캐스트 리시버, 콘텐츠 프로바이더에 대해 설명해보라고 들었다.

맨 처음에 이 대답을 요구하셨는데 잘못 알아들어 컴포넌트가 아니라 Jetpack 컴포저블에 대해 설명해버렸다.

그래서 이후에 재차 질문하신 것이지만, 정확히 대답을 못했다.

 

나중에 면접이 끝나갈때야 머리속에서 망했다는 생각이 들었던 기억이 난다.

 

 

 

본문:

 

안드로이드 4대 컴포넌트(구성요소)를 알아보자.

각각의 구성요소는 시스템이나 앱의 진입점이며, 서로 Intent를 통해 상호작용이 가능하다.

 

특징으로는 다음과 같다.

  • 각 컴포넌트는 독립적이다.
  • 각 컴포넌트는 고유의 기능을 수행한다.
  • 각 컴포넌트는 Intent를 통해 상호작용이 가능하다.

 

 

1. 액티비티(Activity)

사용자와 상호작용을 담당하는 인터페이스이다.

앱을 실행할 때 앱을 전체적으로 호출하는 것이 아니라 앱의 액티비티를 호출한다.

액티비티는 안드로이드 생명 주기 관련 메서드를 오버라이드하여 원하는 기능을 구현할 수 있다.

  • 이 액티비티는 사용자가 애플리케이션과 상호작용하는 실제로 사용자에게 보이는 화면이다.
  • Intent를 통해 다른 애플리케이션의 액티비티를 호출할 수 있다.
  • 2개 이상의 액티비티를 동시에 보여줄 수는 없다.
  • 1개 이상의 View, ViewGroup을 포함한다.
  • 하나의 애플리케이션에는 반드시 하나의 액티비티가 포함되어야 한다.
  • 액티비티 내에 Fragment를 추가해 화면을 분할할 수 있다.

 

2. 서비스(Service)

서비스는 액티비티와 반대로 사용자와 직접적으로 상호작용하는 요소는 아니다.

다만, 백그라운드에서 어떠한 작업을 처리하기 위해 주로 사용된다.

  • 애플리케이션이 종료되더라도 백그라운드에서 작동하는 컴포넌트이다.
  • 음악 앱을 예시로 들었을 때, 앱을 종료시켜 스택에서 제거하더라도 앱은 백그라운드에서 작동 중이기 때문에 음악은 계속해서 재생된다. 타이머, 음성녹음 같은 애플리케이션도 마찬가지이다.
  • ForeGround Service - 사용자에게 보이는 작업으로 반드시 알림을 표시하며 사용자에게 작업을 보여주며, 앱과 상호작용하지 않을 때도 계속 실행하는 서비스
  • BackGround Service - 사용자에게는 보이지 않는 작업
  • 서비스가 눈에 보이지 않기에 다른 스레드를 생성해 작업한다고 생각할 수 있으나, 메인스레드에서 작동하며 서비스 내에서 별도의 스레드를 생성해 작업을 처리해야한다.
  • 네트워크와 연동이 가능하다

 

 

3. 방송 수신자(Broadcast Receiver)

방송수신자는 안드로이드 OS로부터 발생하는 각종 이벤트와 정보를 받아 핸들링하는 컴포넌트이다.

안드로이드 디바이스의 특수한 상황에 대응하기 위해 사용되며, 이 특수한 상황은 시스템 부팅시 애플리케이션 초기화, 네트워크 끊김 등과 같은 특수 상황에 대한 처리 및 배터리 부족 알림, 문자 수신 등의 정보를 받아 처리한다.

  • 거의 UI를 가질 일이 없다. 수신기를 통해 디바이스 상황을 감시하다가 이벤트 발생시 해당 이벤트에 맞게 사전에 정의된 작업들을 처리한다.
  • 특정 상황을 제외하고 브로드캐스트는 시스템에서 시작된다.

 

 

4. 콘텐트 제공자(Content Provider)

콘텐트 제공자는 데이터를 관리하고 다른 애플리케이션의 데이터를 제공하는데 사용되는 컴포넌트이다.

특정 애플리케이션이 사용하는 DB를 공유하기 위해 사용하며 애플리케이션 간의 데이터 공유를 위해 표준화된 인터페이스를 제공한다.

  • SQLite DB / WEB / file IO 등을 통해 데이터를 관리한다.
  • 외부 애플리케이션이 현재 실행중인 애플리케이션 내에 있는 DB에 함부로 접근하지 못하게 제한할 수 있으며 내가 공개하고 공유하고 싶은 데이터만 공유할 수 있도록 할 수 있다.
  • 작은 데이터들은 Intent로 애플리케이션 끼리 데이터를 서로 공유할 수 있다. 다만, 콘텐트 제공자는 음악, 사진 파일과 같은 대용량 데이터를 공유하는 것에 적합하다.
  • 제공자는 데이터의 Read-Write에 대한 권한이 있어야 애플리케이션에 접근이 가능하다.
  • DB에서 흔히 사용되는 CRUD 원칙을 준수한다.