Development/Android (Kotlin)

[Android] Application과 기본요소!

수달05 2020. 6. 30. 10:28

안녕하세요 :)

 

개발새발 초보 프로그래머 수달입니다.

 

Android Studio를 이용하여 애플리케이션을 개발하기에 앞서, 

 

- 대체 이 Application은 무엇인지!

- 무엇으로 구성되어 있는지!

- 어떻게 구성해야 하는지!

 

차근차근 알아보도록 하겠습니다~!

 

그럼 레쓰고우!

 

1. Android Application이란 무엇인가?

 

Android앱은 Kotlin, Java, C++과 같은 개발 언어를 사용하여 제작한 하나의 아카이브 파일입니다.

 

"아카이브가 뭔데..?"

 

아카이브(archive)는 역사적 가치 혹은 장기 보존의 가치를 가진 기록이나 문서들의 컬렉션을 의미하며, 동시에 이러한 기록이나 문서들을 보관하는 장소, 시설, 기관 등을 의미한다.
 

아카이브 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 레이블이 붙은 상자에 기록물들이 담겨 있다. 아카이브(archive)는 역사적 가치 혹은 장기 보존의 가치를 가진 기록이나 문서들의 컬렉션을 의미하며[1], 동시에 �

ko.wikipedia.org

 

즉, 앱이란, "원하는 콘텐츠가 들어간 기록과 문서의 컬렉션"이다!

 

라고 볼 수 있겠습니다.

 

그렇다면, 사용자가 설치한 앱은 쓰고싶은 사용자의 기기의 모든 부분을 마음대로 가져다가 쓸 수 있을까요?

 

 

앱 :  나 카메라 써야되는데, 쓸거니까 뭐 알아서 해.

 

운영체제 (Android) : 엥? 뭐래 너 누군데 갑자기 권한요청도 없이 막 해달래?

 

네 그렇습니다! 앱은 기록의 컬렉션일 뿐, 이 기록을 사용하기 위해서는 사용자의 권한과 시스템의 권한이 허용이 수반되어야 합니다.

 

 

권한 요청 예시 (저장소)

즉, 운영체제 시스템을 통하여 허락을 받은 앱만이 사용이 가능한 형태라고 볼 수 있습니다 :)

 

그렇다면 사용자에게 유용하게 사용이 가능하도록 제작한 Android앱에 대하여 엄격하게 권한까지 관리하는 것일까요?

 

그 이유는 바로바로 '보안' 때문입니다!

 

아무리 좋은 기능을 가진 컬렉션의 집합이라고 하더라도 기능의 사용이 너무 지나치게 요구되거나 필요 구성 요소 이상의 권한을 요청하는 것은 시스템에 무리를 가져올 수 있으며, 다른 시스템을 가동할 수 없을 가능성을 낮추기 위해서 입니다.

 

OS가 권한 승인이 안된 앱에게 대하는 태도

 

 

정리해보면, Android앱이란, Android 운영체제에서 사용이 가능한 일정 기능들의 컬렉션이며, 이를 사용하기 위해 권한 요청, 승인이 수반되어야 한다. 라고 정리할 수 있습니다 

 


2. Android Application의 기본요소

 

이번엔, Android Application의 기본 구성요소에는 무엇이 있는지 살펴봅시다!

 

 

"그래 Android 앱이 뭔진 대충 알 것 같아. 그래서,,, 뭘로 구성되는데?"

 

 

Android 앱은 크게 네 가지로 구성된다고 볼 수 있습니다.

(각 구성요소는 다른 구성 요소에 종속되는 요소가 존재할 수 있습니다. )


1) Activities

 

2) Services

 

3) Broadcast Receivers

 

4) Content Providers


1) Activity

첫 번째 구성요소로 Activity입니다.

 

An activity is the entry point for interacting with the user. It represents a single screen with a user interface.

 

Activity란 사용자와 상호작용을 진행하는 Entry point이다!

 

또한, 하나의 스크린에서 UI(user interface)를 나타낸다!

 

이것이 의미하는 것은 다음과 같습니다.

 

하나의 기능을 수반하는 유저 인터페이스 = Activity

 

모든 기능의 개별은 Activity라고 볼 수 있는 것입니다! :)

 

예시를 살펴볼까요?

 

Gmail 화면 예시

 

여러분들에게도 친숙한 Google사의 Gmail입니다.

 

'메일'이라는 큰 기능에서 위 사진만 보더라도, 메일을 리스트하여 사용자에게 보여주는 기능과 각 메일을 클릭했을 때, 메일을 읽을 수 있는 기능등,,, 굉장히 다양한 기능들이 하나의 화면에서 이뤄지고 있습니다.

 

그렇다면, 이 모든 기능들이 하나의 Activity일까요?

 

천만의 말씀 만만의 콩떡!

 

이러한 화면의 하나하나의 개별적 기능을 우리는 모두 Activity라고 정의합니다.

 

즉, 위의 화면에서 가능한 기능들은 Activity들의 집합이라고 볼 수 있는 것이죠. :)

 

이 때, 모든 기능들은 한꺼번에 이뤄지는 것 같아 보이지만, 사실상 독립적인 기능들이랍니다~!

 

모두가 다른 Activity이기 때문이죠! (각, Activity끼리는 독립적이기 때문!)

 

 

2) Service

 

두 번째 구성요소는 서비스입니다.

 

A service is a general-purpose entry point for keeping an app running in the background for all kinds of reasons.

 

서비스란, 앱이 구동되고 있을 때, Background에서 어떠한 이유에 있어서든 이뤄져야 하는 범용적인 목적을 가진 Entry point 다!

 

 

Background?

 

??? : "Background, 그거 배경이라는 뜻 아닌가요?"

 

 

맞긴한데,,, 정확한 의미는 아래와 같습니다. :)

 

 

 

<현재 유저가 보고 있는 뷰>

 

- Foreground (ex. 인터넷 웹, 앱 ...)

 

 

<유저가 보지 않고 있는 시스템적인 부분>

 

- Background

 

 

즉, 유저와 다른 Activity 사이에서 상호작용이 이뤄지고 있을 때, (혹은 아닐 때에도,,,) 계속적으로 이뤄져야 하는 활동!

 

 

이것을 우리는 Service라고 부릅니다.

 

 

ex) 음악을 계속 들어야 일을 할 수 있는 앱이 존재할 때,  Background에서 음악을 계속 재생하는 과정 => 시스템

 

음악만이 앱을 구동할 수 있다는 가정하에,,, 여기서 음악은 시스템 ^,^

 

 

 

3) Broadcast Receiver

 

세 번째 구성요소! Broadcast Receiver입니다. ;)

 

A broadcast receiver is a component that enables the system to deliver events to the app outside of a regular user flow, allowing the app to respond to system-wide broadcast announcements.

 

 

Broadcast Receiver라는 말은 설명과 정의가 많이 어렵기 때문에, 예시를 통해 알아보도록 합시다~

 

 

알람시계!

 

여기 사용자가 설정한 알람이라는 앱이 있습니다!

 

10분 뒤에 알람이 울리도록 설정했는데, 그렇다면 10분동안 알람시계는 계속 울릴 준비를 하며 사용자가 관심을 가지도록 유도할 필요가 있을까요??

 

정답은...?

 

.

.

.

 

No입니다!

 

 

즉, 유저가 사용할 수 있는 기기의 리소스를 계속 받으면서 예정된 업무를 하기 위해 낭비하는 것을 줄이기 위해 필요한 것이 바로 Broadcast Receiver입니다!

 

좀 더 쉽게 말해, 예정된 알림을 위해서 계속 앱을 구동시킬 필요는 없다는 의미입니다. :)

 

 

 

유저의 Flow 외부에서 발생하는 이벤트를 Android 앱에 전달할 수 있도록 지원하는 구성요소가 바로 Broadcast Receiver가 되겠습니다~~!

 

 

 

 

4) Content Provider

 

마지막 구성요소! Content Provider입니다.

 

A content provider manages a shared set of app data that you can store in the file system, in a SQLite database, on the web, or on any other persistent storage location that your app can access.

 

Content Provider는 앱들이 공유하는 데이터를 파일 시스템, 데이터베이스, 웹 등 저장소에 저장 가능한 앱 데이터의 공유형 데이터 집합을 관리한다고 하는데요, 이건 무슨말일까요??

 

 

 

Content Provider에 대한 전반적인 흐름

 

위 그림을 보시면 조금 더 쉽게 이해가 가능하실 겁니다. :)

 

저희가 사용하는 Android 기기의 앱들에서는 공유하면서 사용하는 데이터자원이 있는데요, 예를 들어,,

 

앗 잘못된 자원 공유 사진이 올라왔어요!

이런 데이터 자원 공유가 아니구요 ^,^,,

 

 

인터넷에서 받아오는 정보들, 데이터베이스에 저장된 유저의 정보, 그리고 사진, 영상과 같은 파일 형태의 데이터를 많은 앱들이 함께 읽고 사용하는 경우가 있을 때, 이를 안정적이고 효율적으로 관리하는 체계가 바로...!

 

 

Content Provider 입니다!

 

 


3. 구성요소를 선언하는 방법

 

위에서 이야기했듯, Android 앱이 사용자를 위해 구동되기 위해서는 시스템의 권한 허용과 자신의 정보등을 확인시켜 주어야해요!

 

즉, 제대로 기능하기 위해서 Android 앱은 자신만의 자기소개서를 준비해야 합니다!

 

자기소개를 해보자!

 

· Manifest

Manifest라는 파일을 들어보셨나요~~?

 

Manifest가 바로바로 Android 앱이 각각 가지고 있는 자신만의 자기소개서 입니다. :)

 

기본적으로 Manifest는 Android 앱의 구성요소를 선언합니다!

 

rManifest 예시코드

구성요소 선언 말고도 Manifest가 알려주는 정보들은 더 있습니당!

 

-> 앱을 사용할 때 필요한 사용자 권한 정보

ex) 인터넷 사용 권한, 사용자 연락처 확인 권한 ...

 

-> 앱에서 필요로 하는 최소 API 레벨

 

-> 앱에서 사용되거나 요구되는 하드웨어, 소프트웨어 기능

ex) 카메라, 블루투스, 멀티터치 등등..

 

-> 앱에서 링크되어야 하는 API 라이브러리

ex) 구글 Maps

 

 

등등 Manifest를 통해 Android 앱은 자신을 소개합니다~!

 

 

 

 

 

 

 

자, 여기까지 Android 앱의 기초에 대해서 알아보았는데요~~

 

다음엔 기본적인 어플리케이션을 제작하는 과정부터 차근차근 발전해나가보도록 합시다!!

 

그럼, 오늘은 여기까지~~~~~~~~~~~~~~~~~~

 

 

 

 

 

참고 자료: https://developer.android.com/guide/components/fundamentals

 

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

Android 앱은 Kotlin, Java, C++ 언어를 사용하여 작성할 수 있습니다. Android SDK 도구는 모든 데이터 및 리소스 파일과 함께 코드를 컴파일하여 하나의 APK를 만듭니다. Android 패키지는 접미사가 .apk인 아

developer.android.com