자바에 있지만 코틀린에 없는것들

Checked 예외

코틀린에서는 Checked exception이 존재하지 않는다.

그 이유는 체크드 예외의 경우 매번 try-catch 구문으로 예외를 처리해주어야 하는데 이렇게 추가되는 코드는 가독성을 떨어뜨리고 실제 체크드 예외를 try-catch 구문으로 마땅히 처리할 수 없는 경우가 많기 때문이다.

아래의 append 함수를 보자.

Appendable append(CharSequence csq) throws IOException;

이 함수를 사용할 때에는 다음과 같이 매번 try-catch 구문을 써야한다.

try {
    log.append(message)
} catch (IOException e) {
    // Must be safe
}

클래스가 아닌 원시 타입

자바에서는 클래스가 아닌 원시타입과 해당 원시타입의 래퍼 객체가 따로 존재했다.

하지만 코틀린에서는 모든 것이 객체이다. 런타임에 원시 값으로 표현될 수(최적화될 수) 있다.

정적 멤버 static members

자바에서는 클래스를 생성하지 않고 접근할 수 있는 static 변수, 함수를 제공하지만 코틀린에서는 이를 제공하지 않는다.

대신, companion objects, top-level functions, extension functions 을 제공해서 자바의 static을 대체할 수 있게 되었다.

companion objects

class 내부의 companion object 키워드를 사용해서 정적 변수, 함수에 클래스를 생성하지 않고 접근할 수 있다.

class MyClass {
    companion object Factory {
        fun create(): MyClass = MyClass()
    }
}

val instance = MyClass.create()

최상위 함수 top-level functions

코틀린의 함수는 파일의 최상단(클래스 내부가 아닌)에 선언할 수 있다. 이는 함수를 포함하는 클래스를 생성할 필요가 없다는 의미이다.