[Android] 02. 안드로이드 앱의 기본 구조

02. 안드로이드 앱의 기본 구조


목차
  • 02-1 안드로이드 소개
    • 안드로이드는 어떤 특징이 있을까?
    • 안드로이드 버전에 관하여
  • 02-2 안드로이드 앱 개발의 특징
    • 컴포넌트를 기반으로 한 개발
    • 리소스를 활용한 개발
  • 02-3 앱 구성 파일 분석
    • 프로젝트의 폴더 구성 알아보기
    • 모듈의 폴더 구성 알아보기

02-1 안드로이드 소개

 안드로이드는 어떤 특징이 있을까?

  • 안드로이드는 공개 운영체제인 리눅스를 기반이다.
  • 안드로이드 앱은 자바나 코틀린 언어를 이용해 개발한다.
  • 안드로이드 운영체제의 주요 부분과 라이브러리, 구글에서 만든 앱 등의 코드는 대부분 공개되어 있다.
  • 안드로이드 스마트폰은 구글뿐 아니라 여러 제조업체에서 만들 수 있다.
  • 안드로이드 앱은 구글의 플레이 스토어뿐만 아니라 다양한 방법으로 사용자에게 배포할 수 있다.
  • 안드로이드 플랫폼에서는 모든 응용 프로그램이 평등하다는 원칙을 바탕으로, 모바일에서 기본으로 탑재된 앱과 개발자가 만든 앱이 똑같은 환경에서 똑같은 API를 이용한다.

  • 안드로이드 운영체제의 구조
    • 리눅스 커널(Linux kernel): 안드로이드는 리눅스에 기반을 둔 오픈소스 소프트웨어이다.
    • 하드웨어 추상화 레이어(hardware abstraction layer, HAL): 상위의 자바 API 프레임워크에서 하드웨어 기능을 이용할 수 있게 표준 인터페이스를 제공한다.
    • 안드로이드 런타임(Android runtime): ART라고 하며 앱을 실행하는 역할을 한다.
    • 네이티브 C/C++ 라이브러리: 네이티브 C/C++ 라이브러리를 이용할 수도 있는데 이를 안드로이드 NDK(native development kit)라고 합니다.
    • 자바 API 프레임워크: 앱을 개발할 때 사용하는 자바 API이다.

  • 안드로이드는 자바 클래스를 런타임 때 그대로 실행하지 않고 DEX파일로 컴파일한다.
  • DEX파일을 해석하는 ART Android runtime에서 실행한다.


 안드로이드 버전에 관하여

  • 안드로이드 버전은 12.0, 13.0처럼 운영체제 버전을 가리키지만 앱을 개발할 때 사용하는 버전은 API레벨 (SDK버전)이다.
  • Android 1.0: API Level 1, 2008, -
  • Android 1.1: API Level 2, 2009, Petit Four
  • Android 1.5: API Level 3, 2009, Cupcake
  • Android 1.6: API Level 4, 2009, Donut
  • Android 2.0~2.1: API Level 5~7, 2009, Eclair
  • Android 2.2: API Level 8, 2010, Froyo
  • Android 2.3: API Level 9~10, 2010, Gingerbread
  • Android 3.x: API Level 11~13, 2011, Honeycomb
  • Android 4.1~4.3: API Level 16~18, 2012, Jelly Bean
  • Android 4.4: API Level 19~20, 2013, Kitkat
  • Android 5.x: API Level 21~22, 2014, Lollipop
  • Android 6.x: API Level 23, 2015, Marshmallow
  • Android 7.x: API Level 24~25, 2016, Nougat
  • Android 8.x: API Level 26~27, 2017, Oreo
  • Android 9.0: API Level 28, 2018, Pie
  • Android 10.0: API Level 29, 2019, -
  • Android 11.0: API Level 30, 2020, -
  • Android 12.0: API Level 31, 2021, -
  • Android 13.0: API Level 33, 2022, Tiramisu



02-2 안드로이드 앱 개발의 특징

 컴포넌트를 기반으로 한 개발

    • 컴포넌트는 애플리케이션의 구성 요소다
      • 컴포넌트를 한마디로 정의하면 애플리케이션의 구성 요소라고 할 수 있다.
      • 안드로이드에서 클래스로 컴포넌트를 개발한다.
    • 안드로이드 앱을 구성하는 클래스는 모두 컴포넌트인가?
      • 앱은 여러 클래스로 구성되는데 크게 컴포넌트 클래스와 일반 클래스로 구분한다.
      • 클래스의 객체 생성부터 소멸까지 생명주기 관리를 개발자 코드에서 한다면 일반 클래스이다.
      • 생명주기를 안드로이드 시스템에서 관리한다면 컴포넌트 클래스이다.
    • 안드로이드 컴포넌트는 4종류이다
      • 액티비티: 화면을 구성하는 컴포넌트이다.
      • 서비스: 백그라운드 작업을 하는 컴포넌트이다.
      • 콘텐츠 프로바이더: 앱의 데이터를 공유하는 컴포넌트이다.
      • 브로드캐스트 리시버: 시스템 이벤트가 발생할 때 실행되게 하는 컴포넌트이다.
    • 4가지 컴포넌트를 어떻게 구분하는가?
      • 개발자가 컴포넌트 클래스를 만들 때는 지정된 클래스를 상속받아야 하는데 이 상위 클래스를 보고 구분할 수 있다.
      • 액티비티(Activity), 서비스(Service), 콘텐츠 프로바이더(ContentProvider), 브로드캐스트 리시버(BroadcastReceiver) 클래스를 각각 상속받아서 만든다.

    • 앱을 개발할 때 컴포넌트를 어떻게 구성해야 하는가?
      • 앱의 기능과 화면 등을 고려해 필요한 만큼만 구성한다.
    • 컴포넌트는 앱 안에서 독립된 실행 단위다.
      • 컴포넌트끼리 서로 종속되지 않아서 코드 결합이 발생하지 않는다는 의미이다.
    • 앱 실행 시점이 다양하다.
      • 컴포넌트가 앱 내에서 독립해서 실행되는 특징 덕분에 앱의 실행 시점이 다양할 수 있다.
      • 안드로이드 앱에는 메인 함수 main function 개념이 없다고 한다.

    • 애플리케이션 라이브러리를 사용할 수 있다.
      • 다른 애플리케이션을 라이브러리처럼 이용하는 것을 말한다.



       리소스를 활용한 개발


        • 리소스란 코드에서 정적인 값을 분리한 것이다.
        • 문자열 이외에 색상, 크기, 레이아웃, 이미지, 메뉴 등 많은 요소를 리소스로 활용할 수 있다.
        • 이미지 등 몇몇을 제외하면 대부분 리소스는 XML파일로 작성한다.



        02-3 앱 구성 파일 분석

         프로젝트의 폴더 구성 알아보기


        • 프로젝트 폴더에서 [모듈명] → [src] → [main]


         모듈의 폴더 구성 알아보기

        • gradle 빌드 설정 파일
          • gradle은 안드로이드 앱의 빌드 도구입니다.
          • gradle의 설정 파일이 바로 build.gradle
          • 프로젝트 수준의 bulid.gradle (Project: AndroidLab)과 모듈 수준의 build.gradle (Module: AndroidLab.app)

        • 컴파일 SDK 버전 설정
        • 앱의 식별자 설정: 패키지 이름 설정
        • SDK 버전 설정: minSdk(최소 SDK버전), targetSdk(설치 SDK버전)
        • 앱의 버전 설정: Application 버전을 설정한다.
        • 컴파일 옵션: 저바 버전, 코틀린 버전, 등을 설정한다.
        • targetSdk에 명시한 안드로이드 SDK는 기본으로 적용되지만 그 외에 개발자가 ㄱ추가하는 오픈소스 라이브러리나 구글의 androidx 라이브러리 등 SDK라이브러리가 아닌 것들은 모두 dependencies에 선언해야 한다.
        • 메인 환경 파일
          • AndroidManifest.xml은 안드로이드 앱의 메인 환경 파일이다.
          • URL이 http://schemas.android.com/apk/res/android로 선언되었다면 안드로이드표준네임스페이스이다.
        • <application> 태그는 앱 전체를 대상으로 하는 설정
        • icon 속성이 있는데 이곳에 지정한 이미지가 앱을 설치한 사용자의 폰에 보이는 실행 아이콘이다.
        • label 속성에는 앱의 이름을 등록한다.
        • theme 설정은 앱에 적용해야 하는 테마를 설정한다.
        • 액티비티는 <activity> 태그로, 서비스는 <service> 태그로, 브로드캐스트 리시버는 <receiver> 태그로, 그리고 콘텐츠 프로바이더는 <provider> 태그로등록한다.
        • name 속성에는 클래스 이름을 등록한다.
        • <intent-filter>가 선언되었고 그 안에 <action> 태그의 name값이 android.intent.action.MAIN 문자열로, <category> 태그의 name값이android.intent.category.LAUNCHER로 선언되면 이 액티비티는 앱아이콘을 클릭했을 때실행되는 액티비티라는 의미이다.

        • 리소스 폴더
          • drawable: 이미지 리소스
          • layout: UI 구성에 필요한 XML리소스
          • mipmap: 앱 아이콘 이미지
          • values: 문자열 등의 값으로 이용되는 리소스
          • 리소스를 식별하기 위한 int형 변수가 R.java 파일에 등록된다.
          • res/layout/test.xml 파일이라면 R.layout.test라고 이용된다.
          • res 하위의 폴더명은 지정된 폴더명을 사용해야 한다.
          • 각 리소스 폴더에 다시 하위 폴더를 정의할 수는 없다.
          • 리소스 파일명은 자바의 이름 규칙을 위해할 수 없다.
          • 리소스 파일명에는 알파벳 대문자를 이용할 수 없다.
        • 레이아웃 XML 파일
          • 화면을 구성하는 레이아웃 XML 파일이다. 우선 참고만 하자.
        • 메인 엑티비티(Activity) 파일
          • setContentView() 함수는 매개변수에 지정한 내용을 엑티비티 화면에 출력한다.
          • R.layout.activity_main으로 지정했으므로 res/layout/activity_main.xml 파일에 구성한 내용을 화면에 출력한다.


         마무리

         이번장에서는 안드로이드의 기본 구조와 간단한 소스를 확인해 봤습니다. 기존에 Java를 사용해보셨던 분들은 Kotlin을 이해하는데 큰 어려움이 없을 거지만, Java나 프로그램에 익숙하지 않으신 분들은 기본적인 Java 코스는 익히고 접근하시는 것을 추천드립니다.
         참고로 말씀드리면 Kotlin 소스는 기본적으로 Java와는 다르지만, 컴파일시 Java코드로 변환하여 빌드하게됩니다. 그러므로 Kotlin은 Java와 호환된다고 생각하시면 될 것 같습니다. Kotlin은 Java코드를 보다 가독성 좋게, 또는 버그를 줄이기 위해서 만들어진 언어라고 생각하시면 될 것 같습니다. Kotlin은 익숙하시지 않으시더라도 강좌를 이어가면서 같이 배워보도록 합시다. 수고하셨습니다.






          💬 가장 사랑한 '막내딸 용혜'

          가장 사랑한 '막내딸 용혜'
          사랑하는 대상이
          둘 이상인 경우에도 순위가
          존재하지 않을 수 있다. 내가 두 아이를
          사랑하는 마음에도, 두 아이 자체에도 순위는 없다.
          물론 자기 아이들이라고 해서 언제나 순위가 없는 것은
          아니다. 박경리의 소설 <김약국의 딸들>에서, 김약국은
          다섯 명의 딸 중에 막내딸 용혜를 가장 사랑하여
          임종을 앞두고 '노오란 머리칼이 물결치는'
          용혜를 오래오래 보고 있었다.


          - 장혜영의 《사랑과 법》 중에서 -


          * 열 손가락 찔러 안 아픈 것이 없다 하나
          사랑에도 순위가 있습니다. 임종에 이르면
          그 순위가 나타나기 마련입니다. 명상 기법 중에
          '가상의 문'이 있습니다. 이 문을 통과할 때마다
          자신이 가장 소중히 여기는 것을 내놓아야만
          합니다. 사람들은 망설입니다. 무엇을 먼저
          내놓아야 할까... 마지막 죽음의 문 앞에서는
          통곡을 합니다. 끝까지 지켰던 것을
          내줘야 하기 때문입니다.
          '막내딸 용혜'마저도.

          댓글

          이 블로그의 인기 게시물

          [컴퓨터] Office 무료 설치

          [컴퓨터] iptime 관리자계정 찾기 및 설정

          [주식] 레버리지 ETF/ETN 사전교육 이수방법 및 등록