코틀린 (프로그래밍 언어)

위키백과, 우리 모두의 백과사전.

코틀린
Kotlin Icon 2021.svg
패러다임다중 패러다임 (객체 지향, 함수형, 명령형, 선언형, 범용, 블록, 반영, 병행)
설계자젯브레인즈
개발자젯브레인즈
발표일2011년 7월 22일(11년 전)(2011-07-22)
최근 버전1.8.0[1] 위키데이터에서 편집하기
최근 버전 출시일2022년 12월 28일(39일 전)(2022년 12월 28일)
자료형 체계정적타입, 강타입, 추론적 타입
플랫폼JVM, 자바스크립트, LLVM, 데이터 사이언스
운영 체제크로스 플랫폼
라이선스아파치 라이선스 2.0
파일 확장자
  • .kt
  • .kts
웹사이트kotlinlang.org
영향을 받은 언어

코틀린(영어: Kotlin, IPA: /ˈkɒtlɪn/[2])은 젯브레인즈사에서 개발하는 크로스 플랫폼 범용 프로그래밍 언어로, 자바와 완벽하게 호환되게 설계되었으며 일반적으로 JVM에서 사용되나 자바스크립트, LLVM 그리고 데이터 사이언스 영역에서도 사용 가능하다.

파일 확장자는 일반적으로 .kt를 사용하며 코틀린 스크립트는 .kts를 사용한다.

K를 형상화한 도형에 붉은색, 보라색 계열의 그라디언트 심볼과 Kotlin이라고 적혀있음
코틀린 로고

코틀린은 2019년 5월 7일 이후로 구글의 안드로이드 앱 개발에서 선호하는 언어가 되었다.[3]

역사[편집]

2011년 7월, 젯브레인즈는 1년 간 개발되고 있던, JVM의 새로운 언어인 프로젝트 코틀린을 공개하였다.[4] 젯브레인즈의 개발을 주도하던 드미트리(Dmitry Jemerov)는 스칼라를 제외한 대부분의 언어들에는 찾고자 하던 기능이 존재하지 않았다고 언급하였다. 그러나 스칼라의 느린 컴파일 시간을 단점으로 지적하였다.[4] 코틀린의 언급된 목표들 가운데 하나는 자바만큼 빠르게 컴파일하는 것이다. 2012년 2월, 젯브레인즈는 이 프로젝트를 아파치 2 라이선스로 오픈 소스화했다.[5]

코틀린이라는 이름은 코틀린섬에서 비롯된 것이다. Andrey Breslav는 팀이 이 이름을 결정하게 된 이유로는 자바가 인도네시아의 자와섬에서 이름을 가져왔듯, 코틀린도 똑같이 코틀린섬에서 이름을 가져오기로 한 것에서 비롯된다.[6](그러나 프로그래밍 언어 자바는 커피 '자바'에서 이름을 가져온 것으로 추정된다)[7]

젯브레인즈는 이 새로운 언어가 IntelliJ IDEA 판매를 상승시켜주길 희망하였다.[8]

코틀린 v1.0은 2016년 2월 15일 출시되었다.[9] 이는 최초의 공식 안정판으로 간주되며 젯브레인즈는 이 버전을 기점으로 장기간의 하위 호환성을 약속하였다.

구글 I/O 2017에서 구글은 안드로이드에서 코틀린이 공식 지원 언어에 추가 되었으며[10] 2019년부터는 안드로이드 개발을 위한 공식 언어로 지정되었다.[11][12]


2017년 11월 코틀린 v1.2가 출시 되었다. JVM자바스크립트간의 코드 공유 기능이 추가되었다.

2018년 10월 코틀린 v1.3가 출시 되었다. 코루틴 지원이 추가되었다.

2020년 8월 코틀린 v1.4가 출시 되었다. 애플 플랫폼에 대한 지원(오브젝티브-C, 스위프트)이 추가되었으며 Kotlin/Multiplatform에 대한 알파 버전이 공개되었다.

2021년 5월 코틀린 v1.5가 출시 되었다. JVM에서 새로운 IR 컴파일러가 공개되었다.

2021년 11월 코틀린 v1.6이 출시 되었다. Kotlin/Native의 새로운 메모리 관리자의 실험 버전을 공개했다.

2022년 6월 코틀린 v1.7 출시와 함께 새로운 컴파일러인 코틀린 K2 알파 버전을 공개했다.[13]

플랫폼[편집]

Kotlin/JVM[편집]

코틀린을 JVM에서 작동하기 위한 런타임컴파일러로 코틀린 표준 라이브러리자바 API를 기반으로 작성되었으며 코틀린 리플렉션을 통해 자바 리플렉션 기능을 지원한다.

일반적으로 안드로이드서버 사이드(스프링 프레임워크 등) 개발에 사용된다.

자바와의 상호운용성을 보장한다.

Kotlin/JS[편집]

코틀린을 브라우저Node.js자바스크립트 엔진에서 작동하기 위한 런타임컴파일러타입스크립트 타입 정의 파일을 감지, 생성할 수 있고 사용하지 않는 코틀린 표준 라이브러리에서 사용되지 않는 코드를 제거하는 플러그인이 내장되어 있다.[14]

자바스크립트와의 상호운용성을 보장한다.

Kotlin/Native[편집]

코틀린으로 응용 소프트웨어모바일 응용 소프트웨어 개발을 위한 런타임컴파일러LLVM을 기반으로 작동한다.

마이크로소프트 윈도우, 리눅스, Mac OS, IOS 응용 소프트웨어 개발 및 웹어셈블리 개발에 사용된다.

C, 오브젝티브-C 그리고 코코아팟의 상호운용성을 보장한다.

문법[편집]

일반적인 사용법[편집]

fun main() {
    val name = "stranger"        // 첫번째 변수 선언
    println("Hi, $name!")        // ...그리고 사용!
    print("Current count:")
    for (i in 0..10) {           // 0에서 10까지 반복
        print(" $i")
    }
}

비동기 코드[편집]

import kotlinx.coroutines.*

suspend fun main() {                                // 일시 중단 후 나중에 재개하는 기능
    val start = System.currentTimeMillis()
    coroutineScope {                                // 코루틴 범위 생성
        for (i in 1..10) {
            launch {                                // 10개의 병렬 작업
                delay(3000L - i * 300)              // 일시 중지
                log(start, "Countdown: $i")
            }
        }
    }
    // `coroutineScope` 안의 내용이 모두 실행되면 표시합니다
    log(start, "Liftoff!")
}

fun log(start: Long, msg: String) {
    println("$msg " +
            "(on ${Thread.currentThread().name}) " +
            "after ${(System.currentTimeMillis() - start)/1000F}s")
}
  • 비동기 코드 작성을 위해서 kotlinx.coroutines 라이브러리를 따로 설치해야한다.

객체 지향[편집]

abstract class Person(val name: String) {
    abstract fun greet()
}

interface FoodConsumer {
    fun eat()
    fun pay(amount: Int) = println("Delicious! Here's $amount bucks!")
}

class RestaurantCustomer(name: String, val dish: String) : Person(name), FoodConsumer {
    fun order() = println("$dish, please!")
    override fun eat() = println("*Eats $dish*")
    override fun greet() = println("It's me, $name.")
}

fun main() {
    val sam = RestaurantCustomer("Sam", "Mixed salad")
    sam.greet() //추상 클래스에서 구현된 함수
    sam.order() // 멤버 함수
    sam.eat() // 인터페이스에서 정의되어 구현된 함수
    sam.pay(10) //인터페이스에서 기본 정의된 함수
}

함수형[편집]

fun main() {
    // 누가 가장 많은 메시지를 보냈을까요?
    val frequentSender = messages
        .groupBy(Message::sender)
        .maxByOrNull { (_, messages) -> messages.size }
        ?.key                                                 // 이름을 가져옵니다
    println(frequentSender) // [Ma]

    // Who are the senders?
    val senders = messages
        .asSequence()                                         // 작업을 비동기로 만듬
        .filter { it.body.isNotBlank() && !it.isRead }        // 람다를 사용하거나...
        .map(Message::sender)                                 // ...멤버 참조를 사용하세요
        .distinct()
        .sorted()
        .toList()                                             // 시퀸스를 다시 리스트로 변환합니다.
    println(senders) // [Adam, Ma]
}

data class Message(                                          // 데이터 클래스 생성
    val sender: String,
    val body: String,
    val isRead: Boolean = false,                              // 인수에 기본 값 정의
)

val messages = listOf(                                       // 리스트 생성
    Message("Ma", "Hey! Where are you?"),
    Message("Adam", "Everything going according to plan today?"),
    Message("Ma", "Please reply. I've lost you!"),
)

각주[편집]

  1. https://blog.jetbrains.com/kotlin/2023/01/kotlin-1-8-0-released/.
  2. “What is the correct English pronunciation of Kotlin?” (영어). 2016년 10월 19일. 2022년 9월 30일에 확인함. 
  3. “Kotlin is now Google’s preferred language for Android app development”. 《TechCrunch》 (미국 영어). 2019년 5월 8일에 확인함. 
  4. Krill, Paul (2011년 7월 22일). “JetBrains readies JVM language Kotlin”. 《infoworld.com》. InfoWorld. 2014년 2월 2일에 확인함. 
  5. Waters, John (2012년 2월 22일). “Kotlin Goes Open Source”. 《ADTmag.com/》. 1105 Enterprise Computing Group. 2014년 2월 2일에 확인함. 
  6. Mobius (2015년 1월 8일), 《Андрей Бреслав — Kotlin для Android: коротко и ясно》, 2017년 5월 28일에 확인함 
  7. Kieron Murphy (1996년 10월 4일). “So why did they decide to call it Java?”. 2019년 3월 15일에 원본 문서에서 보존된 문서. 2017년 10월 14일에 확인함. 
  8. “Why JetBrains needs Kotlin”. we expect Kotlin to drive the sales of IntelliJ IDEA 
  9. “Kotlin 1.0 Released: Pragmatic Language for JVM and Android | Kotlin Blog”. 《Blog.jetbrains.com》. 2016년 2월 15일. 2017년 4월 11일에 확인함. 
  10. Shafirov, Maxim (2017년 5월 17일). “Kotlin on Android. Now official”. Today, at the Google I/O keynote, the Android team announced first-class support for Kotlin. 
  11. https://kotlinlang.org/docs/android-overview.html
  12. https://twitter.com/jmslau/status/1087827632752738304
  13. “What's new in Kotlin 1.7.0 | Kotlin” (미국 영어). 2022년 10월 10일에 확인함. [깨진 링크(과거 내용 찾기)]
  14. “Kotlin/JS dead code elimination | Kotlin” (미국 영어). 2022년 10월 4일에 확인함. [깨진 링크(과거 내용 찾기)]

외부 링크[편집]