2025년 12월 30일 작성
Kotlin - 현대적이고 간결한 JVM 언어
Kotlin은 JetBrains에서 개발한 현대적인 programming 언어로, Java와 100% 호환되면서 null safety, coroutine, 간결한 문법 등 생산성을 높이는 기능을 제공합니다.
Kotlin
- Kotlin은 JetBrains에서 개발한 현대적이고 간결한 programming 언어입니다.
- 2011년에 처음 발표되었고, 2016년 1.0 version이 정식 release되었습니다.
- 2017년 Google이 Android 공식 개발 언어로 채택하면서 널리 확산되었습니다.
- JVM에서 실행되며, Java와 100% 호환됩니다.
- 기존 Java code, library, framework를 그대로 사용할 수 있습니다.
- Java project에 Kotlin을 점진적으로 도입할 수 있습니다.
- JVM 외에도 JavaScript, Native로 compile 가능합니다.
- Kotlin/JS : web frontend 개발.
- Kotlin/Native : iOS, desktop application 개발.
- Kotlin Multiplatform : 여러 platform에서 code를 공유.
설계 철학 : Pragmatic Language
- Kotlin은 학술적 언어가 아닌 실무를 위한 실용적인 언어입니다.
- JetBrains가 Java로 IDE를 개발하면서 겪은 불편함을 해결하기 위해 만들었습니다.
- 새로운 paradigm을 제시하기보다, 기존의 좋은 것들을 실용적으로 조합했습니다.
- Kotlin의 4가지 핵심 원칙 : Pragmatic, Concise, Safe, Interoperable.
- Pragmatic : 이론보다 실무를 우선합니다.
- Concise : boilerplate를 줄이고 의도를 명확히 표현합니다.
- Safe : null safety 등 compile time에 오류를 잡아냅니다.
- Interoperable : 기존 Java 생태계와 100% 호환됩니다.
- OOP와 FP를 상황에 맞게 혼합하는 multiparadigm 언어입니다.
- 특정 paradigm을 강제하지 않고, 문제에 맞는 방식을 선택할 수 있습니다.
Kotlin의 핵심 특징
- Kotlin은 null safety, 간결한 문법, coroutine, 함수형 programming 지원 등 현대적인 언어 기능을 제공합니다.
Null Safety
- Kotlin은 type system 수준에서 null을 구분하여
NullPointerException을 방지합니다.- nullable type(
?)과 non-null type을 명확히 구분합니다. - compile time에 null 관련 오류를 감지합니다.
- nullable type(
var name: String = "Kotlin" // non-null, null 할당 불가
var nickname: String? = null // nullable, null 허용
// safe call operator
val length = nickname?.length // nickname이 null이면 null 반환
// elvis operator
val len = nickname?.length ?: 0 // null이면 0 반환
- Java에서 흔히 발생하는
NullPointerException을 언어 차원에서 예방합니다.
간결한 문법
- Kotlin은 boilerplate code를 줄이는 다양한 문법을 제공합니다.
| 기능 | Java | Kotlin |
|---|---|---|
| Data class | getter, setter, equals, hashCode 직접 구현 | data class User(val name: String) |
| Singleton | private 생성자 + static instance | object Singleton { } |
| Property | field + getter/setter | val name: String |
| String template | "Hello, " + name |
"Hello, $name" |
// data class : equals, hashCode, toString, copy 자동 생성
data class User(val name: String, val age: Int)
// singleton
object DatabaseConfig {
val url = "jdbc:mysql://localhost:3306/db"
}
// string template
val message = "User: ${user.name}, Age: ${user.age}"
함수형 Programming 지원
- Kotlin은 first-class function, lambda, 고차 함수를 지원합니다.
- collection 처리에 유용한
map,filter,reduce등의 함수를 제공합니다. - immutable collection을 기본으로 사용하여 안전한 code 작성이 가능합니다.
- collection 처리에 유용한
val numbers = listOf(1, 2, 3, 4, 5)
// lambda와 고차 함수
val doubled = numbers.map { it * 2 } // [2, 4, 6, 8, 10]
val evens = numbers.filter { it % 2 == 0 } // [2, 4]
val sum = numbers.reduce { acc, n -> acc + n } // 15
// function type
val operation: (Int, Int) -> Int = { a, b -> a + b }
Extension Function
- 기존 class를 수정하지 않고 새로운 함수를 추가할 수 있습니다.
- Java의 utility class 없이 자연스러운 문법으로 기능을 확장합니다.
// String class에 새로운 함수 추가
fun String.addExclamation(): String {
return this + "!"
}
val greeting = "Hello".addExclamation() // "Hello!"
Coroutine
- Kotlin은 언어 차원에서 coroutine을 지원하여 비동기 programming을 간편하게 처리합니다.
- 비동기 code를 동기 code처럼 작성할 수 있습니다.
- thread보다 가볍고 효율적입니다.
suspend fun fetchUser(): User {
delay(1000) // 1초 대기 (non-blocking)
return User("Kotlin", 10)
}
fun main() = runBlocking {
val user = fetchUser()
println(user.name)
}
Java와의 비교
- Kotlin은 Java의 장점을 유지하면서 단점을 개선한 언어입니다.
flowchart LR
subgraph java[Java]
j1[장황한 문법]
j2[Null 처리 수동]
j3[Checked Exception]
end
subgraph kotlin[Kotlin]
k1[간결한 문법]
k2[Null Safety 내장]
k3[Unchecked Exception만]
end
java --> kotlin
| 항목 | Java | Kotlin |
|---|---|---|
| Null 처리 | runtime에 NPE 발생 | compile time에 null check |
| Data class | getter, setter, equals 등 직접 구현 | data class로 한 줄 선언 |
| 문자열 처리 | + 연산자로 연결 |
string template ${} |
| 함수형 | Java 8부터 lambda 지원 | first-class function 지원 |
| 비동기 | CompletableFuture, RxJava | Coroutine 내장 |
| Smart cast | 명시적 casting 필요 | type check 후 자동 cast |
// smart cast 예시
fun printLength(obj: Any) {
if (obj is String) {
// obj가 자동으로 String으로 cast됨
println(obj.length)
}
}
Kotlin 활용 분야
- Kotlin은 Android, server-side, multiplatform 등 다양한 분야에서 활용됩니다.
Android 개발
- Google의 공식 지원으로 Android 개발의 표준 언어가 되었습니다.
- Android Studio에서 Kotlin을 완벽히 지원합니다.
- Jetpack Compose는 Kotlin 전용으로 설계되었습니다.
Server-side 개발
- Spring Framework와 완벽히 호환되어 server-side 개발에 적합합니다.
- Spring Boot, Spring WebFlux와 함께 사용됩니다.
- Ktor는 Kotlin 전용 경량 web framework입니다.
@RestController
class UserController(private val userService: UserService) {
@GetMapping("/users/{id}")
suspend fun getUser(@PathVariable id: Long): User {
return userService.findById(id)
}
}
Multiplatform 개발
- Kotlin Multiplatform으로 여러 platform에서 code를 공유할 수 있습니다.
- business logic을 한 번 작성하고 Android, iOS, web에서 재사용합니다.
- platform별 UI는 각각 구현하고, 공통 logic만 공유하는 방식입니다.
flowchart TD
common[Shared Kotlin Code]
android[Android App]
ios[iOS App]
web[Web App]
common --> android
common --> ios
common --> web