그냥 가끔의 기록장

[Kotlin] Android 톺아보기 1-1. Android 개요 본문

Android

[Kotlin] Android 톺아보기 1-1. Android 개요

the phoenix 2022. 9. 3. 18:20

안드로이드 개발을 공부한지 꽤 오래되었지만, 정작 나무에만 집중하고 숲을 보지못해서 전체적인 그림에 대한 생각을 잘 못하고 개발한 것 같다. 마침, [이것이 안드로이드다 with 코틀린] 이라는 안드로이드 입문서를 보고 잘 정리되어 있다고 느껴, 이를 바탕으로 공부를 해보려 한다.


사족을 붙이자면, 이것 저것 찾아보며 공부를 하려해도 의욕도 잘 안생기고 뭐부터 공부해야 할 지 감을 잘 못잡아서 시간을 꽤 오래 낭비한 것 같다. 이제라도 책 한권 독파한다 생각하고 다시 화이팅 해보자!

1. 안드로이드와 코틀린

1) 안드로이드 운영체제


우리가 매번 말하는 안드로이드는 안드로이드 플랫폼을 줄여 말한 것으로, 오픈소스 소프트웨어 스택이다. 처음부터 용어가 혼동되어서 당황스러우니 하나하나 파보자.

  • 오픈소스 소프트웨어 스택

    • 소프트웨어 스택:
      스택은 아래에서 위로 쌓이는 형태의 자료구조이다. 안드로이드를 소프트웨어 스택이라고 부르는 이유는, 안드로이드의 구조가 소프트웨어가 스택 형태로 차례로 쌓여있는 형태라 그렇다. 즉, 소프트웨어 5계층이 차례로 쌓여있는 형태가 곧 소프트웨어 스택이며 이게 바로 안드로이드의 구조이다.
    • 오픈소스:
      소프트웨어 스택이 공개되어 누구나 이 안드로이드 소프트웨어의 소스코드를 볼 수 있기에 "오픈소스" 라고 한다. 구글이 주도한다.
  • 오픈소스 / 소프트웨어 스택을 나눠서 용어를 알아보자

    • 안드로이드 == 안드로이드 플랫폼 == 오픈소스 소프트웨어 스택
      안드로이드를 설명하는 말로 위처럼 플랫폼이라는 말도 들어 봤을텐데, 결국 안드로이드를 가리키는 말이다. 안드로이드를 오픈소스 소프트웨어 스택이라고 정의하나, 스택은 구조 형태를 강조한 것이고 일반적으로는 안드로이드를 오픈소스 소프트웨어 플랫폼, 줄여서 안드로이드 플랫폼이라 한다.
    • 안드로이드 운영체제 == 안드로이드 시스템
      안드로이드는 OS라고 사람들이 많이 알고 있는데, 안드로이드(플랫폼)을 휴대할 수 있는 모바일 기기의 운영체제로 채택해 사용하기에 OS도 맞는 말이다.
    • 안드로이드 프레임워크 == Java API Framework
      안드로이드의 스택 구조중 4계층에는 안드로이드 프레임워크가 있다. 이는 모든 안드로이드 앱이 사용하는 Toolkit이며 Java로 구현되어 있다. 개발자는 안드로이드 프레임워크가 제공하는 API를 사용해 코드를 작성하면 되며, 나머지 내부 동작은 안드로이드 프레임워크가 알아서 해준다.

다시 정리하자면

  • 안드로이드 == 안드로이드 플랫폼 == 오픈소스 소프트웨어 스택 == 안드로이드 OS == 안드로이드 시스템

으로, 안드로이드는 OS이면서 오픈소스로 구성된 소프트웨어 스택 형태의 플랫폼이다. (다 같은 말!!)


다만 안드로이드 프레임워크는 안드로이드 스택 구조 중 4계층을 가리키는 말로 헷갈리면 안된다.


앞서 언급했듯, 안드로이드 플랫폼은 다음 그림과 같이 5계층으로 구성되어 있다.

안드로이드_플랫폼



2) 플랫폼과 API 버전

​ 안드로이드는 플랫폼 버전과 API 버전이 별개로 존재한다. API는 개발자에게 안드로이드 플랫폼 기능을 사용할 수 있게 제공하는 도구로 API 레벨에 따라 새로운 기능이 추가되거나 코드를 전체 다 변경해야 할 수도 있다.


​ 안드로이드는 플랫폼 버전별로 지원하는 API 레벨이 정해져있다. 굳이 API 레벨을 안드로이드 플랫폼 버전과 별도로 제공하는 이유는, 안드로이드 플랫폼 버전이 안드로이드 프레임워크 업데이트도 포함할 수 있기 때문이다.


​ 둘의 차이를 정리하면 아래와 같다.

  • 안드로이드 플랫폼 버전: OS버전이라 생각하면 된다.
  • 안드로이드 API 버전: 안드로이드 프레임워크 수정 히스토리를 OS 버전과 별도로 표시한 것 (아직 헷갈리지말자 안드로이드 프레임워크 != 안드로이드 OS다. 안드로이드 프레임워크는 안드로이드 OS 중 4계층에 해당하는 부분이다.)


참고로 개발 시 꼭 알아야 하는 것

  • SDK:
    SDK 안에는 개발에 도움이 될 도구 프로그램 (Compiler, 에뮬레이터)나 API 등이 있다.
    Software Development Kit의 약자로, 개발자를 위해 제공하는 개발 도구다. (이게 없으면 기능을 처음부터 하나하나 다 만들어야 한다...)
  • minSdk:
    앱이 실행되는데 필요한 최소 API 레벨이다. 사용자의 안드로이드 OS의 API 레벨이 앱의 minSdk 버전보다 낮을 경우 해당 사용자는 이 앱을 설치할 수 없다.
  • targetSdk:
    안드로이드 OS가 진화함에 따라 OS 버전 == 플랫폼 버전이 상승하면 API 레벨이 상승한다. 동일한 API 레벨이어도 어느 OS 버전에서 호출하느냐에 따라 API의 동작, 외형이 다를 수 있다. 이에 targetSdk를 개발자가 지정하게 되는데, 안드로이드 OS 12버전의 동작, 외형을 사용하고 싶으면 API 레벨 31을 입력하면 된다. (targetSdk를 API 레벨 28로 하면 OS 12버전이라 하더라도 OS 8버전처럼 작동한다고 한다.)


3) Kotlin

​ 젯브레인이라는 회사 (인텔리제이 만든 회사)에서 만든 언어로, 2011년에 처음 공개된 언어이다. 자바와 호환되는 언어로, 구글에서 안드로이드 공식 지원 언어이자 1st 언어로 지정되었다.



4) 안드로이드 개발시 Java VS Kotlin 차이

Kotlin의 Java와의 차이점은 다음과 같다.

  1. Null Safe
  2. Extension Function
  3. Coroutine Support
  4. No checked Exceptions
  5. Data Classes
  6. Smart Casts
  7. Type Inference
  8. Fuctional Programming

사실상 필자가 생각했을 때는 문법적으로 보다 간결하고 자바랑 호환성이 높으면서도 위와 같이 Null Safe, Data Classes, Coroutine 등을 지원한다는 것이 Kotlin의 강점 같다. 물론 구글이 1st 언어로 지정한 것도 큰 이유가 될 것 같다..



Reference

Comments