[Android] 1. 코틀린 안드로이드 이해하기

2 minute read

1. 코틀린 안드로이드 이해하기

이 장의 핵심 개념

  1. 안드로이드가 무엇이고 어떻게 발전해 왔는지 알아본다.
  2. 코틀린을 자바와 비교하며 코틀린을 사용하는 이유에 대해 알아본다.
  3. 안드로이드 아키텍처를 살펴보고, 스마트폰에 설치된 앱이 실행되기까지의 과정을 본다.

1. 안드로이드와 코틀린

1.1 운영체제와 플랫폼


안드로이드 플랫폼은 리눅스 운영체제 안에서 리눅스와 상호작용하면서 동작합니다.

  • 안드로이드 플랫폼

image1

1.2 플랫폼 버전과 API 레벨


안드로이드는 플랫폼 버전과 별개로 API 레벨 이라는 것이 있습니다. API는 개발자에게 유용한 기능들을 제공해주는 도구로, API 레벨이 변경될 경우 기존의 코드를 다시 봐야 할 필요가 있습니다.

2020년 12월 기준으로 API 레벨 16, 젤리빈 이상을 사용하는 디바이스가 전체의 99.8% 입니다.

  • 안드로이드는 일 년에 한 번 정도 버전이 변하는 짧은 업데이트 주기를 가지는 플랫폼이지만, 새로운 버전으로 사용자가 옮겨가는 데는 몇 년의 시간이 소요되기 때문에 항상 최신 버전에 맞춰서 개발해야 할 필요는 없습니다.

1.3 코틀린


자! 이제 코틀린에 대한 이야기입니다.

사실 본 작성자도 처음 안드로이드 앱 개발 언어로 자바를 공부했었습니다. 하지만 점차 코틀린을 공부해야 한다는 소리가 주변에서 많이 들렸고, 실제로 최근에는 네이티브 안드로이드 앱은 코틀린으로 개발하는 추세죠.

그렇다면 코틀린을 사용해야 하는 이유에 대해 살펴봅시다!

  1. 2017년 5월 구글이 코틀린을 안드로이드 앱 개발 공식 언어로 채택한 후 코틀린으로 앱을 개발하는 기업이 차츰 늘어나고 있습니다.
  2. 2019년에는 Google I/O에서 코틀린 퍼스트 를 선언하며 모든 문서에서 코틀린 문서를 먼저 노출하고 있습니다.

  3. 객체 지향 언어인 자바 에 비해 함수형 언어인 코틀린 을 사용하면 코드의 양이 훨씬 적어집니다. 아래의 예를 보시죠.

image2

코틀린 언어는 자바와 100% 호환됩니다. 이는 분명 장점이지만, 여전히 자바의 형식에 맞춰서 개발해야 한다는 단점이 될 수도 있습니다.

하지만 코틀린으로 개발하는 것에 분명 장점이 느껴지지 않나요?

2. 안드로이드 아키텍쳐

이번 장의 핵심 키워드는 컴파일, 빌드, 런타임, APK 입니다.

안드로이드 아키텍쳐란, 앞서 설명한 안드로이드 플랫폼의 실제적인 동작 구조 또는 형태를 말합니다. 아래 그림을 보시죠.

image3

우리가 안드로이드 개발을 할 때 생각하는 플랫폼은 단순히 안드로이드 운영체제와 소프트웨워만 포함됩니다. 하지마, 넓게 보면 앱 스토어, 앱이 실행되는 스마트폰까지도 하나의 거대한 안드로이드 플랫폼입니다.

2.1 소스 코드 작성에서 실행까지


  • 소스 코드 작성에서 실행까지는 다음의 과정을 따릅니다.

    A. 소스 코드 작성

    B. 설치 파일 생성

    C. 업로드

    D. 앱 등록

    E. 앱 선택/설치

    F. 스마트폰에서 실행

2.2 코드가 스마트폰에서 실행되는 과정


  • 앞서 간단하게 살펴보았던 과정을 그림과 함께 더 자세하게 들여다보죠. (귀찮으시면 넘어가서도 될 듯..?)

image4

  1. 빌드 (컴파일 + 비밀번호): ‘B. 설치 파일 생성’ 단계는 빌드를 통해 진행됩니다. 이 과정에서 먼저 소스 코드를 바이트 코드로 변환하며 APK 매니저에서 비밀번호를 가지고 있는 키 스토어와 조합해서 최종 설치 파일을 생성합니다.
  2. 파일 검증: ‘C. 업로드’ 단계로, 업로드와 더불어 구글 플레이 스토어에서 앱을 검수합니다. 이때 정상적인 동작, 보안상의 문제 등을 검사합니다.
  3. 플랫폼 버전 체크: ‘E. 앱 선택’ 단계입니다. 구글 플레이 스토어는 스마트폰의 플랫폼 버전을 확인하고 설치 가능한 앱만을 보여줍니다.
  4. AOT 컴파일/설치 권한 체크: ‘E. 앱 설치’ 단계입니다. APK 파일을 설치하면 리눅스에서 실행 가느한 파일로 안드로이드 폰 내부에서 한 번 더 컴파일합니다. 이 과정을 통해 실행 속도가 빨라지며 기능의 사용 권한을 요청합니다.
  5. JIT 컴파일/실행 권한: ‘F. 스마트폰에서 실행’ 단계입니다. 4에서 설치할 때는 필요하 파일만 컴파일 합니다. 그리고 첫 번째 앱을 실행할 때 미리 컴파일 되지 않은 파일을 호출하면서 리눅스 실행 파일로 컴파일합니다. 그리고 권한 중에 ‘실행 시 권한’이 포함되어 있으면 해당 코드가 동작해서 사용자에게 확인 요청을 합니다.

2.3 빌드


  • 빌드란?
    • 소스 코드를 변환해서 안드로이드에서의 실행 파일인 APK 파일로 만드는 것
    • 소스 코드를 기계어로 변환(컴파일)한 후 라이브러리와 연결해서 실제 실행 파일로 만드는 과정
  • 컴파일이란?
    • 사람이 읽을 수 있는 형태의 소스 코드를 컴퓨터가 읽을 수 있는 형태의 기계어로 변환해주는 과정

3. 새롭게 다루는 것들

  • 젯팩: 파편화되어 있는 수많은 버전에서 일관되게 동작하는 라이브러리 모음
    • Collection, ConstraintLayout, Fragment, Room 등…
  • 뷰 바인딩: 전통적인 findViewById() 에서 코틀린 익스텐션으로 대체되었던 뷰에 대한 접근이 코틀린 1.4.20부터 사라지면서 뷰 바인딩이라는 방식으로 대체되었습니다.
  • 코루틴: 기존의 스레드를 대체하는 새로운 백그라운드 처리 방식
    • 동시성 프로그래밍이 가능하며, 하나의 스레드 내에서 여러 개의 코루틴이 존재할 수 있음
    • 기존의 스레드는 코루틴을 위해 실행 가능한 공간을 제공하는 역할만을 함

Categories:

Updated:

Leave a comment