Note:이 글은 'Do it! 코틀린 프로그래밍'의 일부 내용을 연재 중입니다. 완전한 내용은 책을 참고해 주세요!
코틀린(Kotlin)은 IntelliJ IDEA라는 통합 개발 환경으로 유명한 젯브레인즈(JetBrains)에서 개발했습니다. 구글의 Android Studio도 IntelliJ IDEA기반이며 코틀린 언어를 공식적으로 지원하고 있습니다.
그러면 코틀린은 어떤 용도로 만들어진 언어일까요? 코틀린은 다음과 같은 프로그래밍이 가능한 멀티플랫폼 언어입니다.
보통 JVM(Java Virtual Machine)기반의 코틀린은 자바앱이나 안드로이드 앱을 만들 수 있습니다. JS(Javascript)기반의 코틀린은 데이터베이스부터 서버, 클라이언트까지 다루는 풀스택(Full-Stack) 웹 개발이 가능합니다. Native기반의 코틀린은 LLVM을 통해 멀티플랫폼을 타깃으로 하는 기계의 코드를 만들어 낼 수 있습니다. 예를 들면 코드를 한번 작성해 안드로이드와 iOS에서 구동하는 앱을 만들 수 있습니다. 또는 임베디드, IoT(Internet of Things)등의 타깃으로 하는 앱을 만들 수 있습니다. 타깃 플랫폼은 다음과 같은 환경을 지원합니다.
우리가 흔히 사용하는 iOS, Android 스마트폰은 arm32나 arm64비트 환경입니다. 일반 데스크톱 PC 환경은 x86계열이죠. 리눅스(Linux)는 PC환경부터 서버 등 많은 부분에서 사용됩니다. 마지막으로는 웹 전용 플랫폼인 wasm32가 있죠. 간단히 말하면 코틀린은 다양한 환경에서 사용할 수 있다는 것입니다. 또한, 자바와 완벽하게 호환되므로 자바 코드를 완전히 바꾸지 않고도 자바와 혼용해서 사용할 도 있습니다. 코틀린을 배우기 위해 정해진 플랫폼이 있는 것은 아니지만 이 책에서는 Kotlin/JVM을 이용해 코틀린을 학습할 것입니다. JVM기반이긴 하지만 특별히 언급되는 의존된 자바 라이브러리 이외에는 어떤 플랫폼에서든 적용할 수 있습니다.
코틀린은 프로그램이 컴파일될 때 자료형을 검사하여 확정하는 정적 언어입니다. 즉 자료형 오류를 초기에 발견할 수 있어 프로그램의 안정성이 좋아집니다.
컴퓨터 프로그래밍에 관심이 많은 독자라면 널 포인터 예외(Null Pointer Exception)을 한 번쯤은 경험했거나 들어본 적이 있을 것입니다. 널 포인터 오류는 프로그램이 실행되는 도중에 발생하기 때문에 언제 어디서 어떻게 발생할지 아무도 알 수 없습니다. 오랫동안 프로그래머의 골치를 아프게 만든 주범이죠. 하지만 코틀린은 널 포인터 오류를 미리 예방할 수 있습니다.
▶ 보통 개발자들은 코틀린의 이런 특징을 'NPE에서 자유롭다'라고 말합니다.
▶ NPE는 Null Pointer Exception을 줄여 말한 것입니다.
코틀린은 여러 가지 생략된 표현이 가능한 언어입니다. 그래서 다른 언어보다 훨씬 간결하고 효율적으로 코딩을 할 수 있습니다.
함수를 변수에 저장하거나 함수를 다른 함수의 매개변수로 넘길 수 있는 함수형 프로그래밍과 클래스를 사용하는 객체 지향 프로그래밍을 할 수 있습니다.
▶ 보통 이런 특징을 '멀티 패러다임 언어'라고 부릅니다.
코드를 작성할 때 줄 마지막에 사용하던 세미콜론(;)은 생략할 수도 있습니다.
자바 언어는 제임스 고슬링(James Goslring)이 만들었고 초기에는 썬마이크로 시스템즈에서 관리했습니다. 하지만 곧 썬마이크로 시스템즈가 오라클에 인수되고 고슬링이 회사를 떠나면서 오라클이 전적으로 자바 JDK(Java Development Kit)의 개발, 관리를 주도합니다. 자바는 전 세계에서 가장 널리 사용되고 있고 언어 자체는 무료입니다. 하지만 오라클은 인수 직후 특정 자바 JDK에 대해 유료화 정책을 시작했습니다. 이미 구글은 자바 JDK를 통해 안드로이드의 핵심 프레임워크와 여러 서비스를 개발한 상태였죠. 오라클은 구글에게 몇가지 자바 JDK를 사용한 API(Application Programming Interface)에 대한 천문학적인 금액의 특허 사용료를 요구했고 구글이 이를 거부하면서 구글과 오라클은 긴 시간 동안 법정 소송을 끌어왔습니다. 따라서 자바를 이용하기 전에 몇가지 이해관계를 살펴볼 필요가 있습니다.
자바 언어 자체는 무료로 사용할 수 있습니다. 다만 자바 언어로 프로그램을 작성하기 위해서는 SDK(Software Development Kit)인 자바JDK가 필요하며 실행하기 위해서는 JVM이 필요합니다. 따라서 오라클은 Oracle JDK와 JVM의 특정 기능을 사용하기 위해서는 라이선스비를 지불하는 정책을 시행중입니다. 구글은 이러한 분쟁을 피하기 위해 자체적인 가상 머신(DalvikVM/ART)을 만들거나 새로운 SDK를 제작하는 등의 조치를 취해 왔고 자바 언어를 대체할 코틀린을 안드로이드 공식 언어로 채택하게 되었습니다. 다만 하위 호환성을 위해 안드로이드의 모든 자바 프레임워크를 다시 작성하는 것은 어렵게 때문에 안드로이드에서는 자바와 코틀린이 혼용되어 사용됩니다.
오라클은 썬을 인수하면서 기존의 썬이 오픈소스화 했던 JDK를 유지하고 지속 발전 시키고 있습니다. OpenJDK는 오라클이 제공하는 몇 가지 상용 기능이 빠져 있으나 라이선스 비용을 지불하지 않는 GPLv2라는 라이선스를 따르는 오픈소스이기 때문에 누구든 자유롭게 소스를 이용하고 배포할 수 있습니다. Azule Systems와 같은 회사는 OpenJDK에 부가기능을 넣고 TCK인증을 통과한 Zulu라는 JDK를 배포하기도 합니다. 안드로이드에서도 OpenJDK를 이용해 개발하는데 무리가 없습니다.
"If you would thoroughly know anything, teach it to other."
- Tryon Edwards -