Kotlin과 Android와의 만남

SeungyongYun
StyleShare
Published in
4 min readApr 5, 2016
출처: blog.jetbrains.com

예전부터 Kotlin에 대해서 많은 글을 읽었습니다. 하지만 Scala가 떠오르던 때의 경험으로 미루어 짐작해 볼 때, 지금 Android 개발에 사용하는 것은 섣부른 판단이라 생각했습니다.

그런데 며칠 전 지인과 이야기를 나누다가 “Kotlin은 JetBrains에서 만들었으므로 마음만 먹으면 Android Studio 에 영향을 끼칠 수 있을 것이다.” 라는 이야기를 듣고는 ‘시간 날 때마다 틈틈이 알아두면 나쁘진 않겠구나.’라고 생각했습니다.

Kotlin은 JetBrains에서 2011년도에 만든 새로운 프로그래밍 언어입니다. Android를 개발하시는 분들은 대부분 사용하시는 Android Studio가 JetBrains에서 만든 IntelliJ IDEA기반으로 동작하고 있습니다.

그런데 최근에 와서 — 최근이라고 하기엔 훨씬 전부터 — Kotlin이 Android 개발 언어로서 대두되기 시작했습니다. 저는 해소 되지 않을 것 같은 Java의 묵직함, 그리고 Android와 Oracle과의 서먹함 이 그 이유라고 판단합니다.

Java는 꾸준히 발전하고 있습니다. 당장 Java 8에서는 람다식, 스트림 같은 멋진 기능이 추가됐죠. 하지만 Android에서는 Java 8을 지원하지 않기 때문에 이런 기능들은 Android 개발자들에게는 그림의 떡이나 다름이 없습니다.

게다가 Oracle과 Google의 소송전으로 인해 Android N부터는 Open JDK에 의존하게 될 것 같다는 소문이 무성합니다. 따라서 향후 추가될 Java의 좋은 기능들을 사용할 수 있을지는 미지수인 셈이죠.

이러던 중 안드로이드 오픈소스의 거장 Jake Wharton이 트위터에 Kotlin을 소개합니다. 이미 Kotlin에 대해서 알고 있는 개발자들이 있었겠지만, 저는 Jake Wharton의 트윗을 시작으로 Kotlin의 대중화가 시작됐다고 생각합니다.

Kotlin에겐 Android의 새로운 개발 언어로 기대할 만큼 많은 장점이 있습니다.

1. JVM 기반의 언어이므로 Java와 같은 환경에서 동작합니다.
2. 기존 Android 코드와의 호환성이 높습니다. 서문에서 언급했던 Scala의 경우 기존 Android 코드를 Scala 코드에서 호출하는 것이 너무 불편했기에 Android 진영에서의 부흥에 실패했습니다. Kotlin은 언어의 핵심을 Java와의 상호 호환성에 두고 있기에 Kotlin 코드에서 손쉽게 Java 메서드를 호출할 수 있습니다.
3. 매력적인 람다식을 사용할 수 있습니다.
4. Optional 타입 덕분에 늘 고통받던 Null Point Exception 의 위협으로부터 비교적 자유롭습니다.
5. 메서드 Extension이 가능합니다.

여기에 추가로 JetBrains가 Kotlin을 만든 덕분에 얻을 수 있는 장점이 있습니다.

6. Android Studio에 Kotlin Plugin만 설치하면 별다른 설정 없이 바로 사용이 가능합니다.
7. 제가 정말 잘 쓰고 있는 기능 중 하나인 Android Studio의 auto-suggested 기능이 Kotlin에도 동일하게 동작합니다.
8. Android Studio에서Java 코드를 Kotlin 코드로 변환해주는 기능을 제공합니다.

Kotlin을 당장 사용해도 좋을 굉장히 멋진 언어로 설명해 드린 것 같은데, 아직 Kotlin이 Android 프로젝트의 전체를 담당할 수 있을 정도로 완벽한 언어는 아니라 생각합니다. 직접 프로젝트에 사용해보신 개발자분들도 아직 많이 불안하다고 말씀하십니다.

하지만 JetBrains에서 열심히 밀고 있는 언어라는 점, 그리고 빠른 속도로 발전하고있다는 점, JakeWharton을 비롯한 여러 Android 개발자들에 의해 시험적으로 사용되고 있다는 점 등을 미루어 보았을 때, Android의 새로운 개발 언어로서 한번 쯤은 살펴봐도 좋지 않을까 하는 것이 제 생각입니다.

저도 개인 프로젝트의 Model에 조금 도입해볼 생각입니다. 혹시나 시간이 된다면 제가 공부한 내용을 조금씩 정리해서 공유하도록 하겠습니다.

--

--