Kotlin Programming Language
2017년 5월에 있었던
Google I/O 에서 안드로이드 공식 언어로
Kotlin 이라는 프로그래밍 언어가 추가되었습니다. 안드로이드 개발 언어로는 보통 Java를 생각하게 되는데 새로운 언어라니, 게다가 공식 언어로 지정까지 하다니 자연스레 호기심이 생겼습니다. 이번 포스팅에서는 Kotlin 프로그래밍 언어가 무엇인지, 어떤 장점이 있길래 공식 언어로 지정까지 되었는지 간략히 살펴보고자 합니다.
소개(뒷조사)
Kotlin(코틀린)은
JetBrains 라는 회사에서 만든 프로그래밍 언어 입니다. JetBrains하면 각종 IDE로 유명한 회사죠. 저만 해도 IntelliJ, RubyMine, PyCharm, WebStorm 등 여러 제품을 접해보았습니다. IDE들이 공통적인 UI를 제공하는 점도 그렇고 단축키, 확장성, 구성의 편의성 등 많은 장점들이 있습니다. 어떤 개발자들은 더 이상 이 회사의 제품에 적응한 뒤로는 이클립스를 버렸다는 얘기도 들었습니다. 그런 회사에서 Java보다 나은 언어(“better language” than Java)를 목표로 만들어진게 바로 Kotlin 이라고 합니다. 2011년에 개발 발표가 있었고 2016년에 첫 안정화 버전(v1.0)이 출시 되었습니다. 갓 나온 뜨끈뜨끈한 신상 언어라고 볼 수 있겠죠. 데뷔한지 얼마 안 되었는데 벌써 안드로이드 공식 지원 언어가 되고 수 많은 안드로이드 개발자들로 부터 좋은 평가를 받는게 참 대단한 것 같습니다. Serious한 프로그래머는 결국 자신만의 언어를 만들게 된다는데..그런 사례 중 아주 성공적인 케이스인 것 같습니다. 든든한 뒷배경에 데뷔 하자마자 뜨거운 인기를 한 몸에 받고 있는 이 언어, 왠지 두근두근 기대를 갖게 만들지 않나요?
특징
몇 가지 주요한 특징을 살펴보겠습니다.
- 간결한 코드 : Java에 비해서 동일한 내용의 코드를 훨씬 간결하게 작성할 수 있습니다. 파이썬/그루비 등 스크립트형 언어를 사용하는 개발자들에게 Java의 bolierplate 코드들은 번잡한 느낌을 주기도 하죠. 이런 면에서 Kotlin의 간결한 표현법은 장점이 됩니다. 몇 가지 예를 들자면
- String Interpolation : Kotlin에서는 String Templates 라고 함. Java의 String + …을 피할 수 있게 해줍니다.
var i = 10
var s = “i = $i”
- get/set 자동 생성 : Java에서의 호출을 위해 getter/setter 함수는 자동으로 생성된다고 합니다. Kotlin 자체에서는 아래처럼 멤버 변수에 접근할 수 있습니다.
class Address {
var name: String = "your name"
var street: String = "Street Name"
}
var addr = Address()
var street = address.street
address.street = address.street.trim()
- Class 바깥의 함수 : Java에서는 보통 이런 함수들을 private 생성자만 있는 클래스로 구현하곤 했죠. Kotlin에서는 클래스 없이, 즉 클래스 바깥에서 함수를 정의할 수 있습니다.
- data 클래스 : 종종 기능 없이 속성만 있는 클래스들이 필요하곤 하죠. Value Object 라고도 부르는 이런 클래스들을 Java에서 만들 때에는 번거로운 코드들이 많아 필요했습니다. Kotlin에서는 data 클래스라는 해결책을 제공합니다.
data class User(val name: String, val age: Int)
- Java 호환성 : 아무리 좋은 언어라도 기존 코드를 버리고 바닥부터 시작해야 한다면 도입하는데 큰 부담이 되겠죠. 많은 JVM 기반 언어들도 그렇지만 kotlin도 Java 코드에 대한 호환성을 가지고 있습니다. 제작사에서는 100% interoperate 라고까지 하는데 과연 제약은 없는지 조금 의심스럽기는 합니다. 아무튼 기존 Java 코드들을 Kotlin 코드에서 사용할 수 있다고 합니다.
- Null 안정성 : Java에서 가장 많은 코드 중복 중 하나는 Null Check가 아닐까 싶네요. Null에 의한 에러는 런타임시 주로 발생하므로 위험하기도 합니다. Kotlin에서는 Null이 가능한 변수와 불가능한 변수로 구분하여 Null 참조의 위험을 해소합니다.
var nonull: String = “abc” // null 이 불가능한 변수
nonull = null // 컴파일 에러
val len = nonull.length // nonull은 null일수 없으므로 안전
var maybenull: String? = "abc"
maybenull = null // OK
len = maybenull.length // 컴파일 에러
len = maybenull?.length // null 이면 null, 아니면 length
- 함수형 : 함수형을 강요하지는 않습니다. 실용적 측면에서 장점만 취한 것으로 보입니다. 고차함수와 람다를 지원하므로 이벤트 핸들러/콜백 함수를 작성하기 편하고 그 외에도 유연한 코드를 만드는데 도움을 줍니다.
- 정적 타입 : 프로그래밍 언어에서 정적 타입/동적 타입에 대해서는 많은 논쟁이 있지만 정적 타입이 좀 더 안전하다는 것은 부정할 수 없는 사실일 것입니다. Kotlin은 정적 타입 언어이며 Smart Cast, 타입 추론, is-as 등을 통해 정적 타입의 불편함도 어느 정도 해소합니다.
이외에도 다양한 특징들이 있습니다만 포스팅에서 둘러보기엔 조금 방대해서 아래에 몇 가지 링크를 남겨두었습니다.
(섣부른) 평가
이 언어의 존재를 알고 실제로 개발을 해본 적이 없는 입장애서 평가하기엔 섣부른 감이 있지만. 이런 쪽에 관심있는 분들에게는 학습을 권해볼만 하다고 생각합니다.
- 안드로이드 앱 개발을 하고 싶은데 Java 를 쓰고 싶지 않은 사람 : Java 말고 다른 언어로 앱 개발이 가능하지만 공식언어로는 아직 Java와 kotlin 뿐입니다. 아무래도 3rd party 보다는 지원(support)에서 유리한 점이 있겠죠.
- 기존 Java 코드를 활용하면서 보다 간결하고 효율적인 코드로 프로그래밍을 하고 싶은 사람 : 언어의 특징은 Java와 유사하여 배우기 쉽습니다. 하지만 Java의 시시콜콜한 문법들 보다는 훨씬 간결한 방법을 제공합니다. Java에 지쳤지만 기존 코드는 포기할 수 없는 사람들에게도 좋은 선택이 될 수 있을 것 같습니다.
써놓고 보니 저의 주관이 너무 들어간 것 같긴 합니다..;; 몇년 동안 루비나 파이썬 같은 스크립트 언어의 편리함에 타락한 것일수도 있지만. Java가 최근 다른 언어의 발전에 좀 뒤쳐지는 느낌도 있고. 아쉬운 점이 좀 있어서 이렇게 평가를 했습니다.
Kotlin은 아직 안드로이드 쪽에서만 파급력을 가지고 있는 것 같지만, JVM에서 실행되는 언어 중에서는 가장 기대가 됩니다. 언어 개발사 쪽에서는 Native와 풀스택 웹 개발 등을 목표로 하고 계속 개발한다고 합니다. 언젠가 이 언어를 실무에서 사용하게 될 날이 오길 기대해 봅니다.
참조
댓글
댓글 쓰기