BLO9
Kotlin 등 개발 관련 포스팅합니다.
[자바에서 코틀린으로 - 3] JVM : Kotlin 이란(나라 이름아님)
public class Main {
    public static void main(String[]args) {
        System.out.println("Hello, World!");
    }
}

“Main.java”

fun main(vararg args: String): Unit {
    println("Hello, World!")
}

“Main.kt”

코틀린은

2014년 처음 선보인 언어로 2016년 정식버전인 1.0이 출시되었다. Jetbrains사가 개발한 언어로 안드로이드 스튜디오를 의 기반인 IntelliJ, WebStorm 과 같은 툴들을 만든 IDE개발사이다. 비슷한 모양에 스위프트 보다 먼저나와 스위프트가 코틀린을 참고했다는 루머가 돌고 있다. 외국 블로그에 나와 같은 코틀린 빠들은 그 루머를 기정사실화 해버리는 글을 몇개 볼 수 있다. 너무 진지하게 받아드리진 말자 <- 실제 외국 블로그에 나와있는 마지막 맨트.

각설하고 코틀린에 대한 소개를 더하자면 Java의 Safe(안정성)을 더하고 강조하였다. Java8에 나온 Optional[1] 을 기본으로 간결함, 확장편리성 등을 강점으로 뽑을 수 있다.

안정성

Optional은 정적타입 모던언어들이 모두 가지고 있는 방식이다. 기존에 자바에서 많이 발했던 NullPointException을 방지하기 위해서 Annotation으로 명시를 해주었지만 협업에서는 IDE가 지원해주는 경고 외에는 파악하기 힘들었다. 하지만 코틀린은 모델 설계부터 널가능성에 대해서 명시하게 되고 이를 통해 캡슐화된 기능에 대해서 명확한 파악이 가능해졌다. 불필요한 널체크를 줄이고 기본값을 지정할 수 있는 등 관련 기능들이 무척 많다.


var foo: Int? = null // 변수 : nullable
var bar: Int = 1 // 변수 : notnull
val baz = 2 // 상수 : notnull

foo = 1
bar = null // 불가능 - 컴파일러가 필터
baz = null // 불가능 `val`은 상수

// String bind and optional method invoke and default value
println("${foo?.toFloat()?:"Foo is Null"}") 
println("$bar") // String bind

bar = foo + 1 // error
bar = foo?.plus(1)?:-1

if (foo != null) {
    foo + 1 // 컴파일러가 if문을 확인하고 위와는 다르게 실행가능함
}

더 다양한 기능이 있지만 간단한 소개는 이정도만 하겠다.

간결함

위 소스를 봐서 알겠지만 ;도 없고 상당히 간결하다. public이 기본이며 함수선언이나 생성자 자동생성, 함수 파라미터 기본값 설정등 자바에서 필요했던 유틸함수들이 기본으로 제공되는 것들이 무척 많다. 밑에서 다룰 확장 편리성과도 연관이 크다.

확장 편리성

Kotlin Extension이란 기존 클래스에 확장함수를 만들 수 있는 기능이다. 기존 자바에서는 기본 클레스 혹은 라이브러리 클레스를 사용, 변환하는 유틸을 만들때 static 함수로 만들었지만 그럴 필요가 없다.

// 이런식으로 하면 반환형을 명시할 필요가 없다.
fun Foo.longName() = "Foo name is ${this.name}"

코틀린이 안드로이드에서 유용하게 쓰인 이유도 이 확장성 때문으로 Gradle 플러그인으로 빌드당시 item views를 자동으로 엑티비티, 프레그먼트, 뷰에 심어 보일러코드 (findViewById())와 같은 보일러코드를 줄일 수 있었기 때문이다.

스칼라 하위호환?

스칼라의 장점을 아는가? 사람들이 열광하는 스칼라의 장점과 스타일이 비슷하며 문법적으로나 어려운 부분은 생략하여 진입장벽이 낮은 장점도 있다. 스칼라와 코틀린의 비교는 추후에 다루겠다.


1. Nullable, Notnull 두가지로 형을 정의하거나 사용하는 법