본문 바로가기
기타/면접준비하기

[기 술 면 접] '안드로이드' 4대 컴포넌트

by 하루디 2021. 12. 15.

안드로이드 기본문서의 내용을 참고하여 작성되었음 (상시 수정 예정)

https://developer.android.com/guide/components/fundamentals?hl=ko 

 

애플리케이션 기본 항목  |  Android 개발자  |  Android Developers

애플리케이션 기본 항목 Android 앱은 Kotlin, Java, C++ 언어를 사용하여 작성할 수 있습니다. Android SDK 도구는 모든 데이터 및 리소스 파일과 함께 코드를 컴파일하여 하나의 APK를 만듭니다. Android 패

developer.android.com

 

<앱 구성 요소> = 4대 컴포넌트

: 앱 구성요소는 Android 앱의 필수적인 기본 구성 요소를 말한다. 각 구성요소는 시스템이나 사용자가 앱에 들어올 수 있는 진입점이다. 각 유형은 뚜렷한 목적을 수행하고 각자 나름의 생명주기가 있어 구성요소의 생성 및 소멸 방식을 정의한다. 앱 구성 요소에는 네 가지 유형이 있다. 

  1. 액티비티
  2. 서비스
  3. Broadcast Receiver
  4. 콘텐츠 제공자

-> 주로 액티비티와 서비스를 사용하여 앱을 만든다

 

   1. 액티비티 

: 사용자와 상호작용하기 위한 진입점을 말하며, 사용자 인터페이스를 포함한 화면 하나를 나타낸다. 

  -> 간단히 말하면 UI화면을 담당하는 구성요소이다. 

예를 들어 이메일 앱이라면 새 이메일 목록을 표시하는 액티비티가 하나 있고, 이메일을 작성하는 액티비티가 또 하나, 그리고 이메일을 읽는 데 쓰는 액티비티가 또 하나 있을 수 있습니다. 여러 액티비티가 함께 작동하여 해당 이메일 앱에서 짜임새 있는 사용자 환경을 구성하는 것은 사실이지만, 각자 서로 독립되어 있습니다. 따라서 이메일 앱에서 허용할 경우 다른 앱이 이런 액티비티 중 하나를 시작할 수 있습니다.

-> 액티비티 하나를 Activity 클래스의 하위 클래스로 구현한다 ex) MainActivity -> SubActivity 등등 만들어서 다 메인 위에 뿌려서 화면 만드는 것들

 

 

    2. 서비스

: 백그라운드에서 앱을 계속 실행하기 위한 다목적 진입점이다. 오랫동안 실행되는 작업을 수행하거나 원격 프로세스를 위한 작업을 서비스 단에서 수행한다.  

 -> 화면에 존재하지 않고 백그라운드에서 실행되는 컴포넌트 이다. 

예를 들어 서비스는 사용자가 다른 앱에 있는 동안에 백그라운드에서 음악을 재생하거나, 사용자와 액티비티 간의 상호작용을 차단하지 않고 네트워크를 통해 데이터를 가져올 수도 있습니다. 다른 구성 요소(예: 액티비티)가 서비스를 시작한 다음 실행되도록 두거나 자신에게 바인딩하여 상호작용하게 할 수도 있습니다.

서비스는 Service 하위 클래스로 구현된다. 

 

🤞 추가 🤞

서비스는 크게 3가지로  포그라운드, 백그라운드, 바운드로 나뉜다

 ⑴ 포그라운드 서비스

: 알림을 표시해두고 사용자와 상호작용하지 않아도 계속 실행됨

 ⑵ 백그라운드 서비스

: 사용자가 직접 알지 못하는 작업을 수행할 때 사용

 ⑶ 바운드

: 앱 내에서 서비스를 사용하여 간단한 클라이언트-서버 환경을 구성함

 

 

   3. 브로드캐스트 리시버(Broadcast Receiver) 🤔

: 시스템이 정기적인 사용자 플로우 밖에서 이벤트를 앱에 전달하도록 지원하는 구성요소로, 앱이 시스템 전체의 브로드캐스트 알림에 응답할 수 있게 합니다. 

-> 단말기에서 발생하는 다양한 이벤트, 정보를 받고 반응하는 컴포넌트

예를 들어 앱이 사용자에게 예정된 이벤트에 대해 알리는 알림을 게시하기 위한 알람을 예약할 경우, 그 알람을 앱의 Broadcast Receiver에 전달하면 알람이 울릴 때까지 앱을 실행하고 있을 필요가 없습니다. 대다수의 브로드캐스트는 시스템에서 발생합니다. 예컨대 화면이 꺼졌거나 배터리가 부족하거나 사진을 캡처했다고 알리는 브로드캐스트가 대표적입니다

 화면이 on/ off되었을때, 재부팅할때 등에 반응한다.

 

🤞 추가 🤞

  ⑴ 정적 리시버

: 매니페스트에 등록하여 리시버를 구현하는 형태, 한번 등록하면 해제할 수 없는 방식

  ⑵ 동적 리시버

: 클래스 파일에서 리시버를 등록, 해제할 수 있는 형태로 앱에 부하를 줄일 수 있으나 해제를 해주지 않는다면 메모리 릭이 발생할 수 있다. 

 

 

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

: 파일시스템, SQLite DB, 웹상이나 앱이 접근 할 수 있는 다른 모든 영구 저장 위치에 저장 가능한 앱 데이터의 공유형 집합을 관리한다. 다른 앱은 이것을 통해서 해당 데이터를 쿼리하거나 수정한다. 

-> 데이터를 저장하고, 가져오고 모든 앱에 접근할 수 있도록 하는 컴포넌트

콘텐츠 제공자는 ContentProvider의 하위 클래스로 구현되며, 다른 앱이 트랜잭션을 수행할 수 있도록 활성화하는 표준적인 API 집합을 구현해야 합니다.