코틀린은 2019년 5월 7일 이후로 구글의 안드로이드 앱 개발에서 선호하는 언어가 되었다.[3]
역사
2011년 7월, 젯브레인즈는 1년 간 개발되고 있던, JVM의 새로운 언어인 프로젝트 코틀린을 공개하였다.[4] 젯브레인즈의 개발을 주도하던 드미트리(Dmitry Jemerov)는 스칼라를 제외한 대부분의 언어들에는 찾고자 하던 기능이 존재하지 않았다고 언급하였다. 그러나 스칼라의 느린 컴파일 시간을 단점으로 지적하였다.[4] 코틀린의 언급된 목표들 가운데 하나는 자바만큼 빠르게 컴파일하는 것이다. 2012년 2월, 젯브레인즈는 이 프로젝트를 아파치 2 라이선스로 오픈 소스화했다.[5]
코틀린이라는 이름은 코틀린섬에서 비롯된 것이다. Andrey Breslav는 팀이 이 이름을 결정하게 된 이유로는 자바가 인도네시아의 자와섬에서 이름을 가져왔듯, 코틀린도 똑같이 코틀린섬에서 이름을 가져오기로 한 것에서 비롯된다.[6](그러나 프로그래밍 언어 자바는 커피 '자바'에서 이름을 가져온 것으로 추정된다)[7]
funmain(){valname="stranger"// 첫번째 변수 선언println("Hi, $name!")// ...그리고 사용!print("Current count:")for(iin0..10){// 0에서 10까지 반복print(" $i")}}
비동기 코드
importkotlinx.coroutines.*suspendfunmain(){// 일시 중단 후 나중에 재개하는 기능valstart=System.currentTimeMillis()coroutineScope{// 코루틴 범위 생성for(iin1..10){launch{// 10개의 병렬 작업delay(3000L-i*300)// 일시 중지log(start,"Countdown: $i")}}}// `coroutineScope` 안의 내용이 모두 실행되면 표시합니다log(start,"Liftoff!")}funlog(start:Long,msg:String){println("$msg "+"(on ${Thread.currentThread().name}) "+"after ${(System.currentTimeMillis()-start)/1000F}s")}
비동기 코드 작성을 위해서 kotlinx.coroutines 라이브러리를 따로 설치해야한다.
객체 지향
abstractclassPerson(valname:String){abstractfungreet()}interfaceFoodConsumer{funeat()funpay(amount:Int)=println("Delicious! Here's $amount bucks!")}classRestaurantCustomer(name:String,valdish:String):Person(name),FoodConsumer{funorder()=println("$dish, please!")overridefuneat()=println("*Eats $dish*")overridefungreet()=println("It's me, $name.")}funmain(){valsam=RestaurantCustomer("Sam","Mixed salad")sam.greet()//추상 클래스에서 구현된 함수sam.order()// 멤버 함수sam.eat()// 인터페이스에서 정의되어 구현된 함수sam.pay(10)//인터페이스에서 기본 정의된 함수}
함수형
funmain(){// 누가 가장 많은 메시지를 보냈을까요?valfrequentSender=messages.groupBy(Message::sender).maxByOrNull{(_,messages)->messages.size}?.key// 이름을 가져옵니다println(frequentSender)// [Ma]// Who are the senders?valsenders=messages.asSequence()// 작업을 비동기로 만듬.filter{it.body.isNotBlank()&&!it.isRead}// 람다를 사용하거나....map(Message::sender)// ...멤버 참조를 사용하세요.distinct().sorted().toList()// 시퀸스를 다시 리스트로 변환합니다.println(senders)// [Adam, Ma]}dataclassMessage(// 데이터 클래스 생성valsender:String,valbody:String,valisRead:Boolean=false,// 인수에 기본 값 정의)valmessages=listOf(// 리스트 생성Message("Ma","Hey! Where are you?"),Message("Adam","Everything going according to plan today?"),Message("Ma","Please reply. I've lost you!"),)
↑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.