본문 바로가기
Kotlin

[Kotlin] 안드로이드 Kotlin First? Kotlin First!

by Saerong2 2020. 9. 5.

 

안녕하세요 VisionARy입니다.

안드로이드 앱 개발을 시작하며 자바와 코틀린 중에서 어떤 언어를 사용할까 많은 고민을 하였는데요. 저의 경우 자바나 코틀린 뿐만 아니라 안드로이드 앱 개발 역시 처음이었기 때문에 프로젝트를 진행하면서 많은 부분을 구글링 하면서 찾아보고 공부해야 했습니다.

 

처음에는 코틀린의 경우 2017년이 되어서야 안드로이드의 공식 언어로 채택 되었기 때문에 레퍼런스의 양을 생각하면 자바로 프로젝트를 진행하는게 좋지않을까 생각했습니다.

 

하지만 빠르게 생태계가 빠르게 바뀌고 최신 스펙으로 유지보수를 해야하는 안드로이드 특성상 어차피 몇 년 이상 지난 예전 레퍼런스를 보는 것은 좋지 않을 것이라 생각이 들었습니다. 이 외에도 많은 장점들이 있다는 이유로 결국 현재는 코틀린으로 개발을 진행중입니다. 레퍼런스나 샘플코드를 보며 개발을 진행하는 부분에서 자연스레 기초 문법은 익혀지고 있지만, 고차함수나 람다함수 등의 개념은 아직 낯설어서 정리하며 넘어가보려고 합니다.

 

이 글에서는 코틀린이 안드로이드 언어로 선정된 배경과 코틀린의 장점에 대해 알아보고 다음 글부터는 간략하게 코틀린의 문법에 대해 정리하는 글을 다루도록 하겠습니다.

 

 

# Kotlin

  • Kotlin은 Java를 대체하기 위한 목적으로 IntelliJ IDEA의 개발사 JetBrains에서 만든 함수형 프로그래밍 언어입니다.
  • 2017년, 안드로이드의 공식 언어로 채택 되었습니다.
  • 2019년, 안드로이드의 퍼스트 언어로 선정되었습니다.

 

 

 

안드로이드 플랫폼 아키텍처

 코틀린이 안드로이드의 공식 언어로 지정될 수 있던 배경을 이해하기 위해서는 JVM 아키텍처와 안드로이드 플랫폼에 대한 이해가 도움이 될 것입니다. 이에 관련한 배경지식은 생략하오니 각 링크를 참고해주세요.(예정)

 

위의 안드로이드 플랫폼 아키텍처를 살펴보면, 안드로이드 플랫폼은 리눅스 커널과 자바 API 프레임워크가 결합된 구조입니다.안드로이드 플랫폼이 위와 같은 구조가 된 것은 초기에 자바를 언어로 채택했기 때문입니다.

 

왜 하필 자바였나?

 현재 우리에게 익숙한 대표적인 모바일 OS에는 안드로이드IOS가 있습니다. 하지만 그들이 먼저 시장을 선점했기에 지금 안드로이드와 IOS가 모바일 생태계의 큰 주축을 맡고 있는 것은 아닙니다. 초기에는 윈도우, 블랙베리, 심비안과 같은 OS가 선발주자였고 안드로이드는 IOS보다도 후발주자였습니다. 당시 후발주자로 모바일 생태계를 구축하고자 했던 안드로이드의 입장에서 자바는 가상머신 위에서 동작하기 때문에 x86, arm 등 아키텍처의 영향을 받지  않는다는 것과 당시에도 자바 개발자가 많았기 때문에 자바는 최선의 선택이었습니다.

 

코틀린이 안드로이드의 퍼스트 언어가 될 수 있던 배경에는 그 이전의 퍼스트 언어였던 자바에 대한 이해가 필요합니다. 자바로 작성된 프로그램은 자바 컴파일러(Javac)를 통해 바이트코드(.class)로 컴파일이 되었죠? 그렇기 때문에 안드로이드에서는 자바 바이트코드를 CPU 아키텍처에 맞는 기계어로 번역하기 위해서  Android Runtime(ART)라는 가상 머신을 사용합니다.

 

자바는 JVM이 필요한 것 아닌가요?

 안드로이드에서 처음부터 ART를 사용한 것은 아닙니다. 원래는 JVM을 사용했지만 오라클과의 라이센스 문제로 구글에서 자체 개발한 Dalvik VM을 사용했습니다. 하지만 Dalvik VM은 배터리와 성능의 이슈가 있었고 이러한 문제를 해결하기 위해 안드로이드 5.0(Lolipop)부터 기본 런타임으로 ART를 사용하게 되었습니다. 안드로이드는 자바 API 프레임워크를 사용하며, JVM은 아니지만 여전히 ART라는 가상머신 위에서 동작하는 것이죠.

 

Kotlin First!

 코틀린은 JetBrains에서 만든 프로그래밍 언어로, 2017 Google I/O에서 안드로이드 개발 공식 언어로 지정되었고, 2019 Google I/O에서는 자바를 제치고 코틀린 퍼스트를 선언하며 현재 공식문서에서 코틀린의 예제코드를 우선시하여 보여줍니다. 하지만 자바 개발자 숫자와 기존에 자바로 쓰여진 코드가 워낙 많기 때문에 아직까지는 자바가 주를 이루는 듯 합니다. 그렇지만 코틀린이 자바에 비해 상대적으로 갖는 장점들이 많아서 젊은 기업에서는 새로운 프로젝트나 기존에 자바로 쓰여진 코드를 코틀린으로 Migration하는 등 코틀린을 도입하는 추세라고 합니다. 실제로 한 번 쯤은 들어봤을 Pinterest, Evernote, Trello, Coursera는 모두 코틀린으로 만들었습니다.

 

Why Kotlin First?

 다시 곱씹어 보면, 안드로이드는 기존에 자바를 언어로 사용했고 자바를 컴파일하여 나온 바이트 코드를 ART라는 가상머신으로 아키텍처에 알맞게 기계어를 만드는 구조였습니다. 때문에 안드로이드의 언어로 지정되기 위해서는 이와 같은 안드로이드의 구조에 알맞아야 하는 것이지요. 바로 이와 같은 구조에 알맞고 자바를 개선하여 등장한 것이 코틀린입니다. 코틀린으로 작성된 프로그램은 코틀린 컴파일러에 의해 바이트 코드를 생성하기 때문에(*) 자바와 100% 호환이 가능하고 안드로이드의 언어로 사용할 수 있는 것입니다.

*코틀린 네이티브를 이용하면 JVM없이 네이티브 애플리케이션을 개발할 수도 있습니다.

 

자바를 제치고 코틀린 퍼스트가 된 배경에는 구글과 오라클과의 라이선스 분쟁도 있지만 코틀린이 자바를 개선하며 등장한 새로운 언어인만큼 정말 많은 장점들을 가지고 있다는 점도 있습니다.

 

 

# Kotlin의 장점

코틀린 아키텍처

  • 코틀린은 멀티 플랫폼 언어입니다. 덕분에 웹, 안드로이드, iOS, PC 등 다양한 플랫폼에서 사용할 수 있습니다.
    Kotlin/JVM : JVM 위에서 동작하는 어플리케이션을 개발할 수 있습니다.
    Kotlin/JS : JS로 웹 브라우저에서 동작하는 어플리케이션을 개발할 수 있습니다.
    Kotlin/Native : LLVM 컴파일러를 이용해 여러 플랫폼을 타깃으로 어플리케이션을 개발할 수 있습니다.
     *LLVM 컴파일러는 '비트코드'를 생성해 arm, x86 등에서 실행할 수 있는 코드를 만듭니다.
  • Java에 비해 상대적으로 간결한 문법을 갖기 때문에 생산성이 높고 코드양이 적습니다.
  • 정적타입 언어로서 컴파일 시점에 모든 객체, 메서드의 타입을 알 수 있어 실행 시점에 오류를 막습니다.
  • 타입추론이 가능하여 변수의 타입을 명시적으로 지정하지 않아도 됩니다.
  • NullPointException을 컴파일타임에 알 수 있어 NPE가 생기지 않도록 언어차원에서 배려합니다.
  • 함수형 프로그래밍과 객체지향 프로그래밍이 모두 가능한 멀티 패러다임 언어입니다.

 

 

# 마치며

간단하게 코틀린이 어떻게 탄생했고 어떤 언어인지에 대해서 알아보았습니다.

다음 글부터는 제가 Kotlin 코드를 작성하며 정리가 필요한 문법적인 내용들에 대해서 하나씩 글을 작성하도록 하겠습니다.

다음시간에 만나요!

 

댓글