코틀린 (프로그래밍 언어)
코틀린(영어: Kotlin, IPA: /ˈkɒtlɪn/[2])은 젯브레인즈사에서 개발하는 크로스 플랫폼 범용 프로그래밍 언어로, 자바와 완벽하게 호환되게 설계되었으며 일반적으로 JVM에서 사용되나 자바스크립트, LLVM 그리고 데이터 사이언스 영역에서도 사용 가능하다.
패러다임 | 다중 패러다임 (객체 지향, 함수형, 명령형, 선언형, 범용, 블록, 반영, 병행) |
---|---|
설계자 | 젯브레인즈 |
개발자 | 젯브레인즈 |
발표일 | 2011년 7월 22일 |
최근 버전 | 2.0.20[1] |
최근 버전 출시일 | 2024년 8월 22일 |
자료형 체계 | 정적타입, 강타입, 추론적 타입 |
플랫폼 | JVM, 자바스크립트, LLVM, 데이터 사이언스 |
운영 체제 | 크로스 플랫폼 |
라이선스 | 아파치 라이선스 2.0 |
파일 확장자 |
|
웹사이트 | kotlinlang |
영향을 받은 언어 | |
파일 확장자는 일반적으로 .kt를 사용하며 코틀린 스크립트는 .kts를 사용한다.
코틀린은 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]
버전 정보
편집버전 | 출시일 | 주요 변경 사항 |
---|---|---|
1.0 | 2016년 2월 14일[13] | 정식 버전 (안정화 버전) 출시 |
1.1 | 2016년 2월 15일[14] | Kotlin/JS 안정화 버전 |
1.2 | 2017년 11월 27일[15] | Kotlin/Multiplatform 실험 버전 출시 JVM과 자바스크립트간의 코드 공유 기능 추가 |
1.3 | 2018년 10월 29일[16] | 코루틴 지원 추가 |
1.4.0 | 2020년 8월 17일[16] | 오브젝티브-C 및 스위프트 지원 추가 Kotlin/Multiplatform 알파 버전 출시 |
1.5.0 | 2021년 5월 5일[16] | 자바 레코드 클래스 지원 추가 serial 클래스 지원 추가 신규 IR 컴파일러 공개 |
1.6.0 | 2021년 11월 16일[16] | Kotlin/Native 신규 메모리 관리자 추가 Duration API 안정화 |
1.7.0 | 2022년 6월 9일[16] | 코틀린 K2 컴파일러 알파 버전 공개 Gradle 증분 빌드 시 새로운 접근 방법 적용 |
1.8.0 | 2022년 12월 28일[16] | kotlin-reflect 성능 개선 오브젝티브-C 및 스위프트 상호운용성 개선 |
1.9.0 | 2023년 7월 26일[17] | 코틀린 K2 컴파일러 베타 버전 업데이트
열거형 클래스 값 함수의 대체 안정화 |
2.0.0 | ?[18] | 코틀린 K2 컴파일러 안정화 |
출시 주기
편집기존 코틀린은 로드맵의 기능이 모두 준비가 완료되어야 출시하는 방식을 사용하였는데 1.4 버전이 출시에 2년 가까이 걸리게 되자 1.5 버전 이후 부터는 새로운 릴리즈 주기를 도입하였다.[19]
기능 릴리즈 (Feature relases)
편집주요 기능 업데이트, Kotlin 언어의 자체 기능이 추가되는 릴리즈다.
1년의 두번 릴리즈되며 1.5.0, 1.6.0 등 마이너 버전이 증가한다.
증분 릴리즈 (Incremental releases)
편집언어의 변경사항이 포함되지 않는 릴리즈, 일반적으로 컴파일러의 개선, 성능 향상등의 업데이트가 포함된다.
2~3개월마다 릴리즈되며 1.5.10, 1.5.20 등 패치 버전의 10의 자릿 수가 증가한다.
버그 수정 릴리즈(Bug fix release)
편집대부분 핫픽스이며 기능 릴리즈 혹은 증분 릴리즈 출시 1~2주 내에 출시된다. 중요하지 않은 마이너 버그는 증분 릴리즈에서 수정되기도 한다.
1.3.71, 1.3.72 등 패치 버전의 1의 자릿수가 증가한다.
플랫폼
편집Kotlin/JVM
편집코틀린을 JVM에서 작동하기 위한 런타임 및 컴파일러로 코틀린 표준 라이브러리는 자바 API를 기반으로 작성되었으며 코틀린 리플렉션을 통해 자바 리플렉션 기능을 지원한다. 일반적인 필수 활용 코드를 자바와 더불어 기능적 지원 또한 가능하다.
일반적으로 안드로이드 및 서버 사이드(스프링 프레임워크 등) 개발에 사용된다.
Kotlin/JS
편집코틀린을 웹 브라우저 및 Node.js 등 자바스크립트 엔진에서 작동하기 위한 런타임 및 컴파일러로 타입스크립트 타입 정의 파일을 감지, 생성할 수 있고 사용하지 않는 코틀린 표준 라이브러리에서 사용되지 않는 코드를 제거하는 플러그인이 내장되어 있다.[20]
Kotlin/Native
편집코틀린으로 응용 소프트웨어 및 모바일 응용 소프트웨어 개발을 위한 런타임 및 컴파일러로 LLVM을 기반으로 작동한다.
마이크로소프트 윈도우, 리눅스, Mac OS, iOS 응용 소프트웨어 개발 및 웹어셈블리 개발에 사용된다.
C, 오브젝티브-C 그리고 코코아팟의 상호운용성을 보장한다.
Kotlin/Multiplatform
편집코틀린으로 크로스 플랫폼 개발을 위한 런타임 및 컴파일러로 라이브러리, 백엔드 서버, 웹, 데스트탑 앱(마이크로소프트 윈도우, 리눅스, Mac OS) 모바일 앱(iOS, 안드로이드) 개발에 사용된다.
문법
편집일반적인 사용법
편집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!"),
)
같이 보기
편집각주
편집- ↑ “Release Kotlin 2.0.20 (Repository)”.
- ↑ “What is the correct English pronunciation of Kotlin?” (영어). 2016년 10월 19일. 2022년 9월 30일에 확인함.
- ↑ “Kotlin is now Google’s preferred language for Android app development”. 《TechCrunch》 (미국 영어). 2020년 6월 17일에 원본 문서에서 보존된 문서. 2019년 5월 8일에 확인함.
- ↑ 가 나 Krill, Paul (2011년 7월 22일). “JetBrains readies JVM language Kotlin”. 《infoworld.com》. InfoWorld. 2014년 2월 2일에 확인함.
- ↑ Waters, John (2012년 2월 22일). “Kotlin Goes Open Source”. 《ADTmag.com/》. 1105 Enterprise Computing Group. 2014년 2월 2일에 확인함.
- ↑ Mobius (2015년 1월 8일), 《Андрей Бреслав — Kotlin для Android: коротко и ясно》, 2017년 5월 28일에 확인함
- ↑ Kieron Murphy (1996년 10월 4일). “So why did they decide to call it Java?”. 2019년 3월 15일에 원본 문서에서 보존된 문서. 2017년 10월 14일에 확인함.
- ↑ “Why JetBrains needs Kotlin”.
we expect Kotlin to drive the sales of IntelliJ IDEA
- ↑ “Kotlin 1.0 Released: Pragmatic Language for JVM and Android | Kotlin Blog”. 《Blog.jetbrains.com》. 2016년 2월 15일. 2017년 4월 11일에 확인함.
- ↑ 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.
- ↑ https://kotlinlang.org/docs/android-overview.html
- ↑ https://twitter.com/jmslau/status/1087827632752738304
- ↑ “Kotlin 1.0 Released: Pragmatic Language for the JVM and Android”. 《The Kotlin Blog》 (미국 영어). 2023년 3월 10일에 확인함.
- ↑ “What's new in Kotlin 1.1”. 《Kotlin》 (미국 영어). 2023년 3월 10일에 확인함.
- ↑ “What's new in Kotlin 1.2”. 《Kotlin》 (미국 영어). 2023년 3월 10일에 확인함.
- ↑ 가 나 다 라 마 바 “Kotlin releases”. 《Kotlin》 (미국 영어). 2023년 3월 10일에 확인함.
- ↑ “Kotlin 1.9.0 릴리스 | The Kotlin Blog”. 2023년 7월 26일. 2023년 12월 27일에 확인함.
- ↑ “K2 컴파일러가 Kotlin 2.0에서 안정화됩니다”. 《The Kotlin Blog》. 2023년 3월 10일에 확인함.
- ↑ “New Release Cadence for Kotlin and the IntelliJ Kotlin Plugin”. 《The Kotlin Blog》 (미국 영어). 2023년 3월 10일에 확인함.
- ↑ “Kotlin/JS dead code elimination” (미국 영어). 2022년 10월 4일에 확인함.
외부 링크
편집- 코틀린 - 공식 웹사이트
- Kotlin Playground - 웹 상에서 코틀린 코드를 실행할 수 있는 사이트