코틀린
코틀린(Kotlin)이란 인텔리제이 아이디어(IntelliJ IDEA)의 개발사인 젯브레인스(JetBrains)에서 2011년에 공개한 프로그래밍 언어이다. 간결한 문법을 가지고 있고, 세미콜론은 옵션이다.[1] 자바가상머신(JVM) 기반의 언어이며, 자바와의 상호운용성이 100% 지원된다.[2] 자바가상머신의 바이트코드가 기본이지만, Kotlin/Native 컴파일러를 사용하여 기계어로 최종 컴파일이 된다. 안드로이드, 스프링 프레임워크, 톰캣, 자바스크립트, 자바 EE, HTML5, 아이오에스(iOS), 라즈베리 파이 등을 개발할 때 사용 가능하다.
코틀린은 영어 발음상 '캇린'(Kotlin)처럼 읽는다. 저작권은 아파치 라이선스 2.0을 따른다. 파일 확장자는 .kt 또는 .kts이다. 2019년 8월 22일 1.3.5 버전이 출시되었다.
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 출력
관련문서[편집]
각주[편집]
- ↑ 박병화 기자, 〈2019년 가장 유망한 프로그래밍 언어는 '코틀린과 자바'〉, 《코딩월드뉴스》, 2019-01-11
- ↑ Serdar Yegulalp, 〈넘어선 JVM 기반 프로그래밍 언어들〉, 《인포월드》, 2018-04-20
- ↑ Martin Heller, 〈“떠오르는 자바 대체제” 코틀린 제대로 이해하기〉, 《인포월드》, 2017-11-03
- ↑ 심재석 기자, 〈지금 뜨는 프로그래밍 언어는? ‘스위프트’와 ‘코틀린’〉, 《BylineNetwork》, 2018-8-19
- ↑ 박병화 기자, 〈해커랭크 "올해 배우고 싶은 언어 1위는 GO"…2위는 코틀린·파이썬〉, 《코딩월드뉴스》, 2019-01-31
참고문서[편집]
- Martin Heller, 〈“떠오르는 자바 대체제” 코틀린 제대로 이해하기〉, 《InfoWorld》, 2017-11-03
- Serdar Yegulalp, 〈넘어선 JVM 기반 프로그래밍 언어들〉, 《InfoWorld》, 2018-04-20
- 심재석 기자, 〈지금 뜨는 프로그래밍 언어는? ‘스위프트’와 ‘코틀린’〉, 《BylineNetwork》, 2018-08-19
- 박병화 기자, 〈2019년 가장 유망한 프로그래밍 언어는 '코틀린과 자바'〉, 《코딩월드뉴스》, 2019-01-11
- 박병화 기자, 〈해커랭크 "올해 배우고 싶은 언어 1위는 GO"…2위는 코틀린·파이썬〉, 《코딩월드뉴스》, 2019-01-31
같이 보기[편집]
- 젯브레인스
- 인텔리제이 아이디어(IntelliJ IDEA)
- 자바
- 구글
- 고