전키의 방황일지
article thumbnail

💨들어가기 전에..

자료를 찾아보면서 공부한 내용을 기록합니다.
잘못된 표현이나 개념이 있을 수 있으니 따끔하게 지적해주시면 감사히 받아들이겠습니다.🥰

Android 구조와 동작 원리 2편을 작성하게 되었습니다.

2편에서는 Android의 4대 구성요소로 불리는 요소들의 개념과 특징, 빌드 과정에 대해서 설명해보려고 합니다.


 

Android 구성 요소(컴포넌트)

 

Android 4대 구성요소

 

Android의 앱(Application)은 4대 구성요소를 통합 관리하는 번들의 개념입니다.

그 구성요소로는 Activity, Service, Broadcast Receiver, Content Provider가 있습니다.

그럼, Android의 구성요소를 쭉 살펴보도록 하겠습니다!

 


Activity

사용자와 상호작용하기 위한 진입점입니다. UI를 포함한 하나의 화면 단위를 나타냅니다.

즉, 화면에 UI를 포함하기 위한 틀이라고 보시면 됩니다.

액티비티는 다른 요소들과는 다르게 Lifecycle이 존재합니다. 수명주기에 대한 자세한 내용은 아래 카드에서 볼 수 있습니다.

 


Service

별도의 UI를 제공하지 않고 백그라운드에서 앱을 실행하게 해주는 다목적 진입점입니다.

예를 들어, 우리가 웹툰을 보면서 백그라운드에서 음악을 재생하고 싶을때의 동작을 구현해주는 역할을 합니다.

뿐만 아니라 다른 앱에서 서비스를 통해 백그라운드에서 서비스 동작을 수행할 수 있습니다. 

 

이러한 서비스에는 포그라운드, 백그라운드, 바인드 세 가지 유형이 존재합니다.


포그라운드

포그라운드 서비스는 말 그대로 사용자에게 보여지는 작업을 수행하는 것입니다.

앞서 서비스는 백그라운드로 앱을 실행하게 해주는 요소라고 했는데, 포그라운드 방식으로 이루어지는 서비스도 있습니다.

예를 들어, 오디오 앱에서 오디오 트랙을 재생할 때 포그라운드 서비스를 사용하게 됩다. 이 때 포그라운드 서비스는 알림을 표시해야 하고, 사용자가 앱과 상호작용을 하지 않더라도 계속 실행됩니다.

 

포그라운드 서비스의 한 종류

 

백그라운드

백그라운드 서비스는 포그라운드와 반대로 사용자에게 직접 보이지 않는 작업을 수행하는 것입니다.

앱의 대부분은 백그라운드 서비스로 구현이 됩니다.

 

바인드

앱 구성 요소가 bindService()를 호출하여 해당 서비스에 바인딩되면 서비스와 상호작용할 수 있습니다.

바인딩된 서비스는 클라이언트-서버 형태로 상호작용되는 것입니다. 

또한 프로세스 간 통신으로 수행할 수도 있습니다.

 


서비스의 세 가지 유형에 대해 간단하게 살펴보았는데, 서비스를 구현하는 자세한 방법에 대해서는 다른 포스팅으로 다시 다뤄보도록 하겠습니다🙅‍♂️

 


Broadcast Receiver

운영체제가 메시지를 받으면 실행되는 실행 단위를 말하는데, Broadcast는 '방송하다, 광고하다'라는 사전적 의미를 가지고 있습니다. 

안드로이드에서 Broadcast는 문자·전화 등의 알림을 받고 방송을 해주는 기능이라고 생각하면 이해하기 쉽습니다. 이 방송은 intent라는 객체를 통해 발송하게 되는데 이를 수신하는 것이 바로 Broadcast Receiver입니다. 

즉, 앱이 Broadcast를 전달받기 위해선 Broadcast Receiver를 등록해야합니다.

 

 

Broadcast Receiver는 다음 두 가지 형태로 등록이 가능합니다.

1️⃣정적 Broadcast Receiver : AndroidManifest.xml에 선언하여 앱 설치 시 receiver를 등록

2️⃣동적 Broadcast Receiver : 앱이 실행중일 때 receiver를 실행, 소스 코드에서 등록

 


 

Content Provider

데이터를 저장하는 역할을 합니다. 응용프로그램(앱)끼리 데이터를 공유하는 방법입니다.

앱에서 Content Provider를 구현하면 다른 앱에서는 Content Resolver를 통해 데이터를 전달 받을 수 있습니다.

Content Provider 및 Resolver를 구현하여 앱끼리 데이터를 공유하는 방법에 대해서는 다른 포스팅으로 좀 더 자세히 다뤄보도록 하겠습니다!👨🏻‍💻


Android 빌드 과정

 

Android Studio에서 디버그 및 릴리즈를 실행하면 다음과 같은 프로세스를 통해 우리에게 apk 또는 aab 형식의 파일을 제공해줍니다.

 

  1. 작성된 소스 코드 및 리소스파일, AIDL 파일이나 Gradle을 통해 의존성으로 추가한 모듈/라이브러리를 컴파일러가 변환을 한다. 이 때, 소스 코드는 DEX(Dalvik Executable)파일로 변환하고 그 외 모든 것들은 컴파일된 리소스로 변환한다.
  2. 패키저는 DEX파일과 컴파일된 리소스를 결합하여 APK 또는 AAB를 만든다.
  3. 만약 Play 스토어나 기기에 설치하려면 키스토어를 통해 APK/AAB에 서명을 해야 한다.
  4. 최종 APK를 생성하기 전에, 패키저는 앱이 기기에서 실행될 때 더 적은 메모리를 사용하도록 앱의 최적화를 위해 zipalign 도구를 사용한다.

 


마치며

이번 포스팅에서는 Android의 구성요소와 빌드 과정에 대해서 공부한 내용을 다뤄봤습니다.

좀 더 심도있는 내용을 다루고 싶었지만, 제가 공부한 내용을 보다 이해하기 쉽게 설명한다는 것이 생각보다 어려운 과정인 것 같습니다. 그렇다는 것은 공부한 내용에 있어서 아직 제가 확실한 이해가 되지 않았다는 생각이 들기도 합니다. 앞으로는 하나의 꼭지를 공부할 때도 모르는 부분이나 모호한 개념을 확실히 짚고 이해할 수 있도록 공부해서 양질의 포스팅을 써보도록 해보겠습니다 😊


👀Reference

애플리케이션 기본 항목  ::  Android Developers

빌드 구성  ::  Android Developers

 

 

profile

전키의 방황일지

@전키

인테리어와 운동에 관심이 많은 개발자입니다 :)