코틀린에서는 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 변수, 함수를 제공하지만 코틀린에서는 이를 제공하지 않는다.
대신, 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
코틀린의 함수는 파일의 최상단(클래스 내부가 아닌)에 선언할 수 있다. 이는 함수를 포함하는 클래스를 생성할 필요가 없다는 의미이다.