코틀린의 실용성, 간결성, 안정성, 상호운용성에 대해 살펴보자.
1.4.1 실용성
코틀린은 연구를 위한 언어가 아니다. 다른 프로그래밍 언어가 채택한 이미 성공적으로 검증된 해법과 기능에 의존한다.
코틀린을 처음 배우는 사람은 자바에서 사용해 온 익숙한 프로그래밍 스타일이나 기법을 활용할 수 있다.
실용성에 있어 코틀은 도구를 강조한다는 점이다. 코틀린의 경우 IntelliJ의 개발과 컴파일러의 개발이 맞물려 이뤄져왔다. 코틀린은 이러한 IDE의 지원을 받는 것을 권장한다.
1.4.2 간결성
코틀린은 프로그래머가 작성하는 코드에서 의미가 없는 부분을 줄이고, 별 뜻은 없지만 프로그램에 꼭 넣어야하는 부수적인 요소를 줄이기 위해 많은 노력을 기울인 언어다. 게터, 세터, 생성자 파라미터 등 자바에 존재하는 여러가지 번거로운 준비 코드를 코틀린은 묵시적으로 제공하기 때문에 코틀린 소스코드는 그런 준비 코드로 인해 지저분해지는 일이 없다.
또한, 코틀린은 기능이 다양한 표준 라이브러리를 제공하기 때문에 반복되거나 길어질 수 있는 코드를 라이브러리 함수 호출로 대치할 수 있다. 코틀린은 람다를 지원하기 때문에 작은 코드 블록을 라이브러리 함수에 쉽게 전달할 수 있다.
반면 코틀린 설계 목표에는 소스코드를 가능한 짧게 만든다는 내용은 들어있지 않다. 예를 들어, 코틀린은 연산자 오버로딩을 지원하지만, 언어가 제공하지 않는 연산자를 프로그래머가 정의할 수 있게 허용하지는 않는다. 따라서 라이브러리 개발자들은 어떤 메소드의 이름을 암호문처럼 보이는 기호만으로 이뤄진 연산자 식별자로 대치할 수 없다. 기호로 된 이름보다는 단어로 이뤄진 이름이 훨씬 더 읽거나 검색하기 쉽다.
(연산자 오버로딩 예시)
data class Point(val x: Int, val y: Int) {
// operator 키워드를 사용하여 + 연산자를 오버로딩
operator fun plus(other: Point): Point {
return Point(x + other.x, y + other.y)
}
}
fun main() {
val p1 = Point(1, 2)
val p2 = Point(3, 4)
// + 연산자를 사용하면 오버로딩된 plus 함수가 호출된다.
val result = p1 + p2
println(result) // 출력: Point(x=4, y=6)
}
1.4.3 안정성
코틀린은 컴파일러가 타입을 자동으로 추론해주기 때문에 직접 타입 정보를 지정할 필요가 없다.
코틀린은 거기서 한걸음 더 나아가 실행 시점에 오류를 발생시키는 대신 컴파일 시점 검사를 통해 오류를 더 많이 방지해준다. 가장 중요한 내용으로 코틀린은 프로그램의 NullPointerException을 없애기 위해 노력한다. 코틀린의 타입 시스템은 null이 될 수 없는 값을 추적하며, 실행 시점에 NullPointerException이 발생할 수 있는 연산을 사용하는 코드를 금지한다.
val s: String? = null // null이 될 수 있음
val s2: String = "" // null이 될 수 없음
코틀린이 방지해주는 다른 예외로는 ClassCastException이 있다.
코틀린에서는 타입 검사와 캐스트가 한 연산자에 의해 이뤄진다. 어떤 객체의 타입을 검사했고 그 객체가 그 타입에 속한다면 해당 타입의 메소드나 필드 등의 멤버를 별도의 캐스트 없이 사용할 수 있다. 따라서 타입 검사를 생략할 이유가 없고, 검사를 생략하지 않으면 검사를 생략해서 생기는 오류가 발생할 일도 없다.
1.4.4 상호운용성
- 자바 클래스나 메소드를 똑같이 사용할 수 있다.
- 코틀린은 기존 자바 라이브러리를 가능하면 최대한 활용한다. (ex. 코틀린은 자체 컬렉션 라이브러리를 제공하지 않는다) 다만, 몇가지 코틀린에서 컬렉션을 더 쉽게 활용할 수 있게 몇 가지 기능을 더한다.
- 언어가 섞여 있어도 제대로 프로그램을 컴파일 할 수 있다.
'Kotlin' 카테고리의 다른 글
[Kotlin in Action] 2.1 기본 요소: 함수와 변수 (0) | 2025.03.14 |
---|---|
[Kotlin in Action] 1.5 코틀린 도구 사용 (0) | 2025.03.14 |
[Kotlin in Action] 1.3 코틀린 응용 (0) | 2025.03.13 |
[Kotlin in Action] 1.2 코틀린의 주요 특성 (0) | 2025.03.13 |
[Kotlin in Action] 1.1 코틀린 맛보기 (0) | 2025.03.13 |
댓글