안드로이드 소개
안드로이드(Android)는 리눅스 커널을 기반으로 구글에서 제작한 모바일 운영체제입니다. 구글은 2008년 안드로이드 1.0 버전을 출시한 이후 새 버전을 계속 내놓고 있습니다.
안드로이드의 특징
- 리눅스 기반입니다.
- 자바나 코틀린 언어를 이용해 개발합니다.
- 운영체제의 주요 부분과 라이브러리 구글에서 만든 앱 등의 코드는 대부분 공개되어있습니다.
- 안드로이드 스마트폰은 여러 제조 업체에서 만들 수 있습니다.
- 플레이 스토어뿐만 아니라 여러 방법으로 배포할 수 있습니다.
- 기본 탑재 앱과 개발자가 만든 앱이 똑같은 환경에서 똑같은 API를 이용합니다.
안드로이드 운영체제의 구조
리눅스 커널(Linux kernel) : 안드로이드는 리눅스에 기반을 둔 오픈 소스 소프트웨어 스택입니다.
하드웨어 추상화 레이어(hardware abstraction layer, HAL) : 하드웨어 추상화 계층, 상위의 자바 API 프레임워크에서 하드웨어 기능을 이용할 수 잇게 표준 인터페이스를 제공합니다.
안드로이드 런타임(Android runtime) : ART라고 하며 앱을 실행하는 역활을 합니다.
안드로이드는 자바 클래스를 런타임 때 실행하지 않고 DEX 파일로 만들어 컴파일 합니다. DEX 파일은 ART에서 실행합니다.
네이티브 C/C++ 라이브러리 안드로이드 앱은 대부분 자바 프레임워크로 개발하지만 네이티브 C/C++ 라이브러리를 이용할 수 있는데 이를 안드로이드 NDK라고 합니다.
자바 API 프레임워크 : 앱을 개발할 때 사용하는 자바 API입니다.
언어
안드로이드는 자바로 앱을 개발하였으나 2017년 부터 코틀린을 안드로이드 공식 언어로 지정하며 안드로읻 개발 언어는 자바와 코틀린 두 가지를 사용합니다.
앱 개발의 특징
컴포넌트 기반으로 개발
앱 개발의 핵심은 컴포넌트로 앱 개발과 관련 문서를 읽으면 컴포넌트라는 용어가 자주 등장합니다.
애플리케이션 구성요소 중 하나는 컴포넌트
컴포넌트는 애플리케이션을 개발할 때 사용하는 개념입니다. 컴포넌트는 애플리케이션의 구성 요소입니다.
컴포넌트는 애플리케이션을 구성하는 단위입니다. 애플리케이션은 여러 컴포넌트가 모여 구성됩니다.
안드로이드에서 클래스로 컴포넌트를 개발합니다. 하나의 클래스가 하나의 컴포넌트가 됩니다.
클래스는 모두 컴포넌트인가
모든 클래스는 컴포넌트는 아닙니다.
클래스는 크게 컴포넌트 클래스와 일반 클래스로 나뉩니다.
앱이 실행될 때 클래스의 객체 생성부터 소멸까지 생명주기 관리를 개발자 코드에서 하면 일반 클래스이고 생명주기를 안드로이드 시스템에서 관리하면 컴포넌트 클래스입니다.
컴포넌트의 종류
- 액티비티 : 화면을 구성하는 컴포넌트입니다. 화면을 출력하려면 액티비티를 만들어야 하며 액티비티에서 출력한 내용이 폰에 출력됩니다.
- 서비스 : 백그라운드 작업을 하는 컴포넌트입니다. 화면 출력 기능이 없어 백그라운드에서 실행할 업무를 담당합니다.
- 콘텐츠 프로바이더 : 앱의 데이터를 공유하는 컴포넌트입니다. 앱이 자신의 데이터를 다른 앱에 공유하려면 콘텐츠 프로바이더를 만들어야하고 다른 앱에서 콘텐츠 프로바이더를 이용해 데이터에 접근합니다.
- 브로드캐스트 리시버 : 시스템 이벤트가 발생할 때 실행되게 하는 컴포넌트입니다. 시스템에서 발생하는 상황으로 부팅 완료, 배터리 방전 같은 상황을 말합니다.
컴포넌트를 구분하는 방법은 액티비티는 Activity 클래스를 상속받고 서비스는 Service, 콘텐츠 프로바이더는 ContentProvider, 브로드캐스트 리시버는 BroadcastReceiver 클래스를 상속받아 만듭니다.
앱 개발 시 컴포넌트 구성
컴포넌트는 앱의 기능과 화면 등을 고려해 구성합니다. 앱을 만들 때 어떤 컴포넌트를 어떻개 구성하는지는 설계에 따라 달라집니다.
컴포넌트는 독립된 실행 단위
컴포넌트는 애플리케이션 안에서 독립된 실행단위라는 특징을 가집니다. 즉 컴포넌트끼리 종속되지 않아 코드 결합이 발생하지 않습니다.
즉 두 개의 Activity 클래스가 존재할 때 첫 번째 Activity 클래스에서 두 번째 Activity 클래스로 화면 전환을 할 때 한 클래스 안에서 다른 클래스를 실행된다고 생각됩니다. 하지만 컴포넌트의 생명주기를 안드로이드 시스템에서 관리하므로 코드에서 직접 객체를 생성해 실행할 수 없습니다. 따라서 시스템에 의뢰해 시스템이 클래스를 실행해야 합니다.
다양한 앱 실행 시점
컴포넌트가 앱에서 독립적으로 실행되는 특성으로 다양한 앱 실행 시점을 가집니다.
애플리케이션 라이브러리
컴포넌트로 구성된 안드로이드 앱은 애플리케이션 라이브러리를 사용할 수 있습니다. 애플리케이션 라이브러리란 다른 애플맄이션을 라이브러리로 사용하는 것을 말합니다.
리소스를 활용한 개발
안드로이드 앱은 리소스를 많이 활용합니다. 리소스란 코드에서 정적인 값을 분리한 것입니다. 동적인 값이 아니라 똑같은 값이면 코드에 담지 않고 분리해서 개발합니다. 즉 운영체제의 매크로와 프로그래밍 언어의 함수와 비슷한 역활을 합니다. 미리 작성하고 필요할 때 호출합니다.
앱 구성 파일 분석
프로젝트 폴더 구성
프로젝트를 생성하면 대부분 빌드 도구와 관련이 있는 것입니다. 개발자가 볼 파일은 모듈명 -> src -> main 안에 있는 것입니다.
프로젝트를 만들면 app라는 모듈이 자동으로 생성됩니다. 모듈은 하나가 앱 하나이며 프로젝트는 여러 모듈을 묶어서 관리하는 개념입니다.
모듈의 폴더 구성
gradle 빌드 설정 파일
gradle은 안드로이드 앱의 빌드 도구입니다. build.gradle은 설정 파일이며 앱을 빌드하는데 필요한 설정을 이 파일에 등록합니다.

build.gradle 파일이 2 개 존재하는데 하나는 프로젝트 수준의 build.gradle(Project:Androidlab)이고 다른 하나는 모듈 수준의 build.gradle(Modul:app)입니다.
메인 환경 파일
AndroidManifest.xml 파일은 안드로이드 앱의 메인 환경 파일입니다. 안드로이드 시스템은 파일에 설정한 대로 사용자의 폰에서 앱을 실행합니다.

xml 파일의 루트태그입니다. xmlns는 XML의 네임스페이스 선언이며 URL이 위 처럼 선언되었다면 안드로이드 표준 네임스페이스입니다.

<application> 태그는 앱 전체를 대상으로 하는 설정입니다. icon 속성은 지정한 이미지가 앱을 설치한 사용자의 폰에 보ㅗ이는 실행 아이콘입니다.
label 속성에는 앱의 이름을 등록하는데 @string/app_name으로 지정했으므로 res/values/strings.xml 파일에 app_name으로 등록된 문자열 리소스를 가리킵니다.
안드로이드 컴포넌트는 시스템에서 생명주기를 관리하므로 시스템은 매니페이스트 파일에 있는 대로 앱을 실행합니다. 즉 컴포넌트는 매니페스트파일에 등록해야 시스템이 인지합니다.
리소스 폴더
res 폴더는 앱의 리소스를 등록하는 목적으로 사용합니다.
- drawable : 이미지 리소스
- layout : UI 구성에 필요한 XML 리소스
- mipmap : 앱 아이콘 이미지
- values : 문자열 등의 값으로 이용되는 리소스
res 폴더 아래에 리소스를 만들면 자동으로 R.java 파일에 상수 변수로 리소스가 둥록되며 코드에서는 이 상수 변수로 리소스를 이용합니다.
개발자가 res/drawable 폴더에 a.png 파일을 만들면 리소스를 식별하기 위해 int형 변수가 R.java 파일에 드록됩니다. 그리고 코드에서 리소스 파일을 이용하려면 R.drawable.a로 식별합니다.
안드로이드 리소스 파일이 R.java 파일에 상수 변수로 등록되며 이용 시 다음과 같은 규칙이 생깁니다.
- res 하위의 폴더명은 지정된 폴더명을 사용해야 합니다.
- 각 리소스 폴더에 하위 폴더를 정의할 수 없습니다.
- 리소스 파일명은 자바의 이름 규칙을 위배할 수 없습니다.
- 리소스 파일명에는 알파벳 대문자를 이용할 수 없습니다.
레이아웃 XML 파일
기본으로 만들어지는 activity_main.xml 파일은 화면을 구성하는 레이아웃 XML 파일입니다.
메인 액티비티 파일
매니페스트 파일의 설정값에 따라 폰에 앱을 설치한 후 앱 아이콘을 터치하면 메인액티비티 파일이 실행됩니다.
'Programming > Android' 카테고리의 다른 글
앱의 기본 기능 구현 (0) | 2024.09.26 |
---|---|
안드로이드 처음 시작하기 (0) | 2024.09.23 |