검수요청.png검수요청.png

코틀린

해시넷
Asadal (토론 | 기여)님의 2019년 9월 7일 (토) 17:11 판
이동: 둘러보기, 검색
코틀린(Kotlin) 로고
코틀린(Kotlin) 로고와 글자
인텔리제이 아이디어(IntelliJ IDEA) 통합개발환경

코틀린(Kotlin)이란 인텔리제이 아이디어(IntelliJ IDEA)의 개발사인 젯브레인스(JetBrains)에서 2011년에 공개한 프로그래밍 언어이다. 간결한 문법을 가지고 있고, 세미콜론은 옵션이다.[1] 자바가상머신(JVM) 기반의 언어이며, 자바와의 상호운용성이 100% 지원된다.[2] 자바가상머신의 바이트코드가 기본이지만, Kotlin/Native 컴파일러를 사용하여 기계어로 최종 컴파일이 된다. 안드로이드, 스프링 프레임워크, 톰캣, 자바스크립트, 자바 EE, HTML5, 아이오에스(iOS), 라즈베리 파이 등을 개발할 때 사용 가능하다.

현재 최신 버전은 1.3.31이다.

2017년에 구글안드로이드의 공식 언어로 코틀린을 추가하였다. 이는 오라클과의 자바 API 저작권 분쟁의 여파로 보는 시각이 많다. 2018년 카카오카카오톡 메시징 서버에 코틀린을 사용해 본 결과, 코드량이 비약적으로 감소하고 생산성이 대폭 상승했다고 한다. 2019년 1월부터는 구글 내부의 안드로이드 프로젝트에서도 자바 대신 코틀린을 사용할 수 있게 되었다.[3]

개념

코틀린은 2011년 7월에 발표되었고 꾸준히 발전해온 프로그래밍 언어이다. 그리고 고틀린이라는 이름은 "코틀린 섬", 이라는 섬 이름으로부터 지어졌다고 한다. 코틀린은 2017년 구글 I/O 에서 안드로이드 공식언어로 선택되었다.

특징

  • 자바(Java)와 비교하면 확실히 차이 나는 간결한 문법을 제공한다. 간결한 문법을 제공하면서도 런타임 오버헤드가 거의 없다.
  • 오버헤드가 없는 (NULL) 안전성을 제공한다. 코틀린의 변수는 Nullable(널 값 사용 가능)과 NotNull(널 값 사용 불가)로 나뉘는데, 변수 선언 시 '?'를 붙여 Nullable로 만든다. 스위프트(Swift)에서도 유사한 기능을 쓰는데 코틀린 쪽이 제약이 덜해서 사용하기 편하다.
  • 예외처리를 강제하지 않는다.
  • 모든 함수가 리턴값을 가진다.
  • 자바 언어의 'Integer'나 'Double'처럼 primitive type을 위한 별도의 wrapper class가 존재하지 않는다. 모든 primitive type은 객체 취급을 받는다. 따라서 Int 따위의 변수는 객체에 할당된 toString 함수 등을 바로바로 이용할 수 있다.
  • 확장함수, 연산자 오버 로딩을 지원할 수 있다. 예를 들어 int형을 확장해 'i = 3 power 4' 같은 식으로 새 연산자를 만든다.
  • API 문서에 Java의 HTML 대신 Markdown을 사용할 수 있다.
  • 연산자가 생각하는 대로 작동할 수 있다.
  • static 메서드가 없다. companion object를 사용해 감싸야 함. Java 코드에서 접근하려면 '클래스명.Companion.메서드_혹은_get변수명()' 또는 @JvmStatic annotation을 쓰면 가능하다.
  • 자바 6에 호환할 수 있다.
  • 자바와 상호운용성을 100% 지원할 수 있다.

장점

  • 널 안정성 - 널값 허용 여부를 컴파일 단계에서 검사. 런타임에서 발생하는 오류 감소.
  • 간결한 문법 - 세미콜론이 없음. new 키워드 없이 객체를 생성. 타입 추론을 지원하므로 일반적인 타입을 적지 않음.
  • 가변/불변 지원
    • var - 할당된 값을 런타임 시에 자유자재로 바꿀 수 있는 변수
    • val - 값을 한번 할당하고 나면 그 후에 변경할 수 없는 변수로 자바의 final키워드를 붙인 변수랑 동일.
    • const - 컴파일 시의 상수란 의미로 컴파일 타임에 값을 할당해야 한다는 의미
    • 컬렉션 자료에도 mutable을 붙인 자료형이 존재. mutableList
  • 람다 표현식 지원 - 자바로 작성된 인터페이스에 한해 sam(single abstract method) 변환을 지원하여 함수의 인자로 전달되는 인터페이스의 인스턴스를 람다로 표현할 수 있음. 람다표현식이란 메서드를 메서드의 이름과 반환값을 삭제하고 표현한 하나의 식으로 익명 함수라고도 불린다
  • 스트림 api를 지원 - 자바8은 컬렉션내의 자료를 다루는데 유용한 스트림 api지원하지만 안드로이드 6.0이상에서만 지원되는등 제약이 컸다. 코틀린은 제약이 없음.
  • 완벽한 자바 호환성
  • extension 기능 - 클래스에 상속하지 않아도 메서드를 추가할 수 있는 기능이다. 마치 클래스의 한 기능이었던것 처럼 fun String.makepretty() android data extension으로 findviewbyid없이 id값으로 바로 뷰를 접근이 가능.
  • 고차 함수(high order function) - 함수를 파라미터로 가져오고 함수를 리턴.
  • 데이터 클래스 지원 - 데이터 기반의 클래스로 getter, setter, tostring, copy등이 지원.
  • 코루틴 - 스레드처럼 비동기작업을 지원. 하지만 os에 의존적이지 않아 스레드보다 부하가 적음.

단점

  • 순수 자바 패키지보다 패키지 사이즈가 더 커짐.
  • 빌드 시간이 느림.
  • 자바가 코틀린을 호출할 때 optional 처리 문제가 있음. 변수뒤에 ?가 없으면 non-null로 처리되어서 null이 오면 exception 처리된다.
  • 함수 파라미터는 var이 아니라 val이라 불편하다.

코틀린 도구 사용

  • 코드 컴파일 - 코틀린은 .kt라는 확장자를 갖는다. 그리고 컴파일하면 자바와 같이 .class 파일이 된다. 다만 코틀린에서 제공하는 추가적인 API를 동작시키기 위해서는 코틀린 런타임 라이브러리가 필요하다. 이는 Maven과 Gradle에 몇줄만 넣어주면 알아서 포함된다.
  • IntelliJ 의 Android studio - 2.3.3버전인 경우 추가적으로 Kotlin plugin을 추가하면 되고, 이번에 나온 3.0부터는 기본적으로 코틀린을 포함하고 있다. 따라서 새파일 만들때 new -> Kotlin File을 바로 만들어 쓸 수 있다.
  • 대화형 쉘(Shell) - 샘플로 짧은 코드를 만들어서 그때그때 어떻게 동작하는지 보려면 Tool -> Kotlin -> Kotlin REPL 이와 같이 옵션을 켜면 된다.
  • 자바<-> 코틀린 변환기 - Android studio에서는 자동 변환기를 제공해 준다. Code -> convert Java File to Kotlin 을 누르면 자바파일이 통째 kotlin을 변환된다. 또한 코틀린 파일(.kt)을 먼저 만들고 자바 코드를 붙여넣기 해도 자동 변환이 된다.

코틀린 맛보기

  • 코틀린의 null 체크
  var a: String = "Realm"
  a = null // error
  var b: String? = "Realm"
  b = null // ok

- 널을 허용하는 타입을 참조할 때 문제가 생길 수는 있지만 다음과 같이 해결할 수 있다. b가 null이 아닌 경우에만 length가 실행된다.

  b?.length
  • 스마트 캐스팅
  if (o is RealmObject) {
    return o.isLoaded;
  }

- o 의 타입이 RealmObject인 것을 확인 후 접근한 코드에서는 o를 RealmObject로 자동 캐스팅한다. class User(val name: String,

   val age: Int,
   val address: String = "") {
  }
  val minwoo = User("Minwoo", 20)
  • 명명된 인자
  val minwoo = User("Minwoo", age = 20, address = "Gangnam")
  • 함수형 프로그래밍
  listOf(1, 2, 3) // 1, 2, 3 
  .map { it * 2 } // 2, 4, 6
  .filter { it > 2 } // 4, 6
  .forEach { print(it) } // 4, 6 출력

관련문서

각주

  1. 박병화 기자, 〈2019년 가장 유망한 프로그래밍 언어는 '코틀린과 자바'〉, 《코딩월드뉴스》, 2019-01-11
  2. Serdar Yegulalp, 〈넘어선 JVM 기반 프로그래밍 언어들〉, 《인포월드》, 2018-04-20
  3. Martin Heller, 〈“떠오르는 자바 대체제” 코틀린 제대로 이해하기〉, 《인포월드》, 2017-11-03
  4. 심재석 기자, 〈지금 뜨는 프로그래밍 언어는? ‘스위프트’와 ‘코틀린’〉, 《BylineNetwork》, 2018-8-19
  5. 박병화 기자, 〈해커랭크 "올해 배우고 싶은 언어 1위는 GO"…2위는 코틀린·파이썬〉, 《코딩월드뉴스》, 2019-01-31

참고문서

같이 보기


  검수요청.png검수요청.png 이 코틀린 문서는 프로그래밍에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.