본문 바로가기

Kotlin

Kotlin이란? Kotlin과 Java 언어의 비교

이 문서의 내용

    더보기

    Kotlin은 Java 언어와 완벽하게 호환 되며 Java로 작성된 프로젝트에서 쉽게 Kotlin 소스 코드가 추가 될 수 있습니다.

    또한 Java 코드를 Kotlin 코드로 변환하는 것도 가능합니다.

    Kotlin은 Java가 사용되고 있는 모든 개발 환경에서 더 간결하고 생산적이며 안정적인 개발을 위한 대체 언어입니다.

    모든 Kotlin 언어와 컴파일러, 라이브러리 및 관련 도구는 오픈 소스로 제공되며 무료로 이용 할 수 있는 Apache License 2.0을 따릅니다.

    Kotlin과 관련된 최신 개발 내용은 github: jetbranins/kotlin에서 공유됩니다.

    간결한 문법 & Java 호환성

    Java에서 코드 라인의 마지막을 의미하는 세미콜론(;)이 없습니다.

    객체를 생성하기 위한 new 키워드 없이도 객체를 생성 할 수 있으며 타입 추론(Type interface)을 지원하기 때문에 일반적인 경우 타입을 명시 할 필요가 없습니다.

    Kotlin은 Java와 100% 호환됩니다. 

    Java의 기존 라이브러리를 Kotlin에서도 사용 할 수 있으며 동시에 Java의 표준 라이브러리에 의존합니다.

    타입 추론(Type interface)

    Java와 달리 모든 변수의 타입을 직접 명시하지 않아도 됩니다.

    대부분의 경우 Kotlin 컴파일러가 문맥으로 부터 변수의 타입을 유추 할 수 있기 때문입니다.

    // int
    var a = 123;
    
    // double: 7.5 X 10^6 = 7500000.0
    var b = 7.5e6

    Null 안정성

    Java와 달리 Nullable 타입 ? 키워드 등을 지원함으로써 Null 허용 여부를 판단 할 수 있습니다.

    // a is nullable type
    var a: String? = "abc"
    a = null
    
    // b is not nullable type
    var b: String = "abc"
    // compile error
    b = null
    더보기

    Java 또는 다른 언어에서 Nullable에 대한 검사 코드는 Runtime에 NullPointerException을 발생시킵니다.

    Kotlin이 제공하는 Nullable type은 컴파일 단계에서 NullPointerException을 일으키기 때문에 더 안정적입니다.

    불변(Immutable) 객체

    Java에서는 타입을 명시하여 객체를 생성하지만, Kotlin은 타입 추론이 가능하여 val 또는 var을 사용합니다.

    Java에서 Immutable 객체를 생성하려면 타입 앞에 final 키워드를 사용합니다.

    // mutable
    String a = "abc";
    a = "def";
    
    // immutable
    final String b = "def";
    // compile error
    b = "abc";

    반면 Kotlin에서는 Immutable 객체를 생성하려면 val 키워드를 사용합니다.

    // mutable
    var a = "abc"
    a = "def"
    
    // immutable
    val b = "def"
    // compile error
    b = "abc"
    더보기

    Kotlin의 Immutablility는 단순 자료형의 선언 뿐만 아니라 Collection 등에서도 제공됩니다.

    // mutable
    MutableList<String> = mutableListOf("foo","bar","baz")
    
    // immutable
    List<String> = listOf("foo","bar","baz")

    람다(Lambda) 표현식 

    Kotlin은 일급 객체(First-class)를 지원하여 람다 표현식을 변수에 저장 할 수 있습니다.

    val test: () -> Unit = { println("test") }

    또한 동일한 입력 값에 동일한 출력 값을 보장하며 입력된 객체의 상태를 변화시키지 않는 순수 함수(Pure function)를 제공합니다.

    fun getSum(a: Int, b: Int) = a + b

    정리 및 복습

    • Kotlin은 Java 언어와 완벽하게 호환됩니다.
    • Java의 라이브러리를 Kotlin에서도 사용 할 수 있으며 Java의 표준 라이브러리에 의존합니다.
    • 타입 추론(Type interface)으로 인해 변수의 타입을 직접 명시하지 않더라도 타입을 추론합니다.
    • Nullable 타입을 지원하여 컴파일 시간에 NullPointerException을 발생시킵니다.
    • 가변(Mutable) 객체 저장을 위해 var 키워드를 사용하고 불변(Immutable) 객체 저장을 위해 val 키워드를 사용합니다.