Kotlin
[Kotlin in Action] 1.3 코틀린 응용
Nhahan
2025. 3. 13. 23:22
1.3.1 코틀린 서버 프로그래밍
자바 프레임워크는 여러 변화에 대응하기 위해 기술을 확장하고 개선하거나 대치, 기존 시스템과 통합되어야한다.
이런 환경에서 자바 코드와 매끄럽게 상호운용할 수 있다는 점이 코틀린의 큰 장점이다. 코틀린은 새로운 컴포넌트를 작성하거나 기존 서비스 코드를 코틀린으로 이식해야하는 경우에 모두 잘 들어맞는다. 자바 클래스를 코틀린으로 확장해도 아무 문제가 없으며, 코틀린 클래스 안의 메소드나 필드에 특정 annotation을 붙여야하는 경우에도 아무 문제가 없다. 그러면서도 시스템 코드는 더 간결해지고 더 신뢰성이 높아지며, 더 유지보수하기 쉬워질 것이다.
코틀린이 제공하는 깔끔하고 간결한 DSL 기능을 활용할 수 있는 다른 예로는 영속성 프레임워크인 Exposed 프레임워크를 들 수 있다. 이는 SQL 데이터베이스의 구조를 기술할 수 있는 읽기 쉬운 DSL을 제공하며, 코틀린 코드만을 사용해 완전한 타입 검사를 지원하면서 데이터베이스 질의를 실행할 수 있다.
object CoutnryTable : IdTable() { // 데이터베이스 테이블에 대해 기술한다.
val name = varchar("name", 250).uniqueIndex()
val iso = varchar("iso", 2).uniqueIndex()
}
class Country(id: EntityID) : Entity(id) { // 데이터베이스 엔티티에 해당하는 클래스를 만든다.
var name: String by CountryTable.name
var iso: String by CountryTable.iso
}
val russia = Country.find { // 오직 코틀린 코드만으로 이 데이터베이스에 질의를 던질 수 있다.
CountryTable.iso.eq("ru")
}.first()
코틀린을 사용하더라도 성능 측면에서 아무 손해가 없다.
대부분의 코틀린 표준 라이브러리 함수는 인자로 받은 함수를 인라이닝(inline 키워드)한다. 따라서 람다를 사용해도 새로운 객체가 만들어지지 않으므로 객체 증가로 인해 가비지 컬렉션이 늘어나서 프로그램이 자주 멈추는 일도 없다.
(인라인 함수 예제)
inline fun inlineOperation(action: () -> Unit) {
action()
}
fun main() {
inlineOperation {
println("인라인 함수 내부의 람다 실행")
}
}
는 컴파일 시에 아래와 같이 컴파일 되어 효율적으로 동작하게 된다.
fun main() {
run {
println("인라인 함수 내부의 람다 실행")
}
}