"코틀린"의 두 판 사이의 차이
잔글 |
잔글 |
||
1번째 줄: | 1번째 줄: | ||
− | + | '''코틀린'''(Kotlin)이란 [[IntelliJ IDEA]]의 개발사 [[제트브레인스]](JetBrains)에서 2011년에 공개한 [[프로그래밍 언어]]이다. 간결한 문법을 가지고 있고, 세미콜론은 옵션이다.<ref>박병화 기자, 〈[https://www.codingworldnews.com/84 2019년 가장 유망한 프로그래밍 언어는 '코틀린과 자바']〉, 《코딩월드뉴스》, 2019-01-11</ref> [[자바가상머신]](JVM) 기반의 언어이며, [[자바]]와의 [[상호운용성]]이 100% 지원된다.<ref>Serdar Yegulalp, 〈[http://www.itworld.co.kr/news/109008자바를 넘어선 JVM 기반 프로그래밍 언어들]〉, 《인포월드》, 2018-04-20</ref> 자바가상머신의 [[바이트코드]]가 기본이지만, Kotlin/Native [[컴파일러]]를 사용하여 기계어로 최종 [[컴파일]]이 된다. [[안드로이드]], [[스프링 프레임워크]], [[톰캣]], [[자바스크립트]], [[자바 EE]], [[HTML5]], [[아이오에스]](iOS), [[라즈베리 파이]] 등을 개발할 때 사용 가능하다. | |
− | + | 현재 최신 버전은 1.3.31이다. | |
− | |||
− | 현재 최신 버전은 1.3. | ||
− | |||
− | |||
+ | 2017년에 [[구글]]이 [[안드로이드]]의 공식 언어로 코틀린을 추가하였다. 이는 [[오라클]]과의 [[자바]] API 저작권 분쟁의 여파로 보는 시각이 많다. 2018년 [[카카오]]가 [[카카오톡]] 메시징 서버에 코틀린을 사용해 본 결과, 코드량이 비약적으로 감소하고 생산성이 대폭 상승했다고 한다. 2019년 1월부터는 구글 내부의 안드로이드 프로젝트에서도 자바 대신 코틀린을 사용할 수 있게 되었다.<ref>Martin Heller, 〈[http://www.itworld.co.kr/news/107046 “떠오르는 자바 대체제” 코틀린 제대로 이해하기]〉, 《인포월드》, 2017-11-03</ref> | ||
== 특징 == | == 특징 == | ||
− | * | + | * 자바(Java)와 비교하면 확실히 차이 나는 간결한 문법을 제공한다. 간결한 문법을 제공하면서도 런타임 오버헤드가 거의 없다. |
− | * 오버헤드 없는 널 안전성을 제공한다. | + | * [[오버헤드]]가 없는 [[널]](NULL) 안전성을 제공한다. 코틀린의 변수는 Nullable(널 값 사용 가능)과 NotNull(널 값 사용 불가)로 나뉘는데, 변수 선언 시 '?'를 붙여 Nullable로 만든다. [[스위프트]](Swift)에서도 유사한 기능을 쓰는데 코틀린 쪽이 제약이 덜해서 사용하기 편하다. |
* 예외처리를 강제하지 않는다. | * 예외처리를 강제하지 않는다. | ||
* 모든 함수가 리턴값을 가진다. | * 모든 함수가 리턴값을 가진다. | ||
− | * | + | * 자바 언어의 'Integer'나 'Double'처럼 primitive type을 위한 별도의 wrapper class가 존재하지 않는다. 모든 primitive type은 객체 취급을 받는다. 따라서 Int 따위의 변수는 객체에 할당된 toString 함수 등을 바로바로 이용할 수 있다. |
− | * 확장함수, 연산자 오버 로딩을 지원할 수 있다. | + | * 확장함수, 연산자 오버 로딩을 지원할 수 있다. 예를 들어 int형을 확장해 'i = 3 power 4' 같은 식으로 새 연산자를 만든다. |
− | 예를 들어 int형을 확장해 'i = 3 power 4' 같은 식으로 새 연산자를 | + | * API 문서에 Java의 HTML 대신 Markdown을 사용할 수 있다. |
− | * API 문서에 Java의 HTML 대신 Markdown을 사용할 수 | + | * 연산자가 생각하는 대로 작동할 수 있다. |
− | * 연산자가 생각하는 대로 작동할 수 | + | * static 메서드가 없다. companion object를 사용해 감싸야 함. Java 코드에서 접근하려면 '클래스명.Companion.메서드_혹은_get변수명()' 또는 @JvmStatic annotation을 쓰면 가능하다. |
− | * static 메서드가 없다. companion object를 사용해 감싸야 함. Java 코드에서 접근하려면 '클래스명.Companion.메서드_혹은_get변수명()' 또는 @JvmStatic annotation을 쓰면 | + | * 자바 6에 호환할 수 있다. |
− | * | + | * 자바와 [[상호운용성]]을 100% 지원할 수 있다. |
− | * | ||
== 장점 == | == 장점 == | ||
− | * | + | * 널 안정성 - 널값 허용 여부를 컴파일 단계에서 검사. 런타임에서 발생하는 오류 감소. |
* 간결한 문법 - 세미콜론이 없음. new 키워드 없이 객체를 생성. 타입 추론을 지원하므로 일반적인 타입을 적지 않음. | * 간결한 문법 - 세미콜론이 없음. new 키워드 없이 객체를 생성. 타입 추론을 지원하므로 일반적인 타입을 적지 않음. | ||
* 가변/불변 지원 | * 가변/불변 지원 | ||
40번째 줄: | 36번째 줄: | ||
== 단점 == | == 단점 == | ||
− | |||
* 순수 자바 패키지보다 패키지 사이즈가 더 커짐. | * 순수 자바 패키지보다 패키지 사이즈가 더 커짐. | ||
* 빌드 시간이 느림. | * 빌드 시간이 느림. | ||
− | * 자바가 코틀린을 | + | * 자바가 코틀린을 호출할 때 optional 처리 문제가 있음. 변수뒤에 ?가 없으면 non-null로 처리되어서 null이 오면 exception 처리된다. |
* 함수 파라미터는 var이 아니라 val이라 불편하다. | * 함수 파라미터는 var이 아니라 val이라 불편하다. | ||
72번째 줄: | 67번째 줄: | ||
.filter { it > 2 } // 4, 6 | .filter { it > 2 } // 4, 6 | ||
.forEach { print(it) } // 4, 6 출력 | .forEach { print(it) } // 4, 6 출력 | ||
− | |||
− | |||
− | |||
== 관련문서 == | == 관련문서 == | ||
− | + | * [[스위프트]]<ref>심재석 기자, 〈[https://byline.network/2018/08/19-30/ 지금 뜨는 프로그래밍 언어는? ‘스위프트’와 ‘코틀린’]〉, 《BylineNetwork》, 2018-8-19</ref> | |
− | * [[ | ||
* [[Dart]] | * [[Dart]] | ||
− | * [[ | + | * [[고]](Go)<ref>박병화 기자, 〈[http://m.codingworldnews.com/a.html?uid=257 해커랭크 "올해 배우고 싶은 언어 1위는 GO"…2위는 코틀린·파이썬]〉, 《코딩월드뉴스》, 2019-01-31</ref> |
* [[Flutter]] | * [[Flutter]] | ||
{{각주}} | {{각주}} | ||
− | == | + | == 참고문서 == |
− | |||
* 박병화 기자, 〈[https://www.codingworldnews.com/84 2019년 가장 유망한 프로그래밍 언어는 '코틀린과 자바']〉, 《코딩월드뉴스》, 2019-01-11 | * 박병화 기자, 〈[https://www.codingworldnews.com/84 2019년 가장 유망한 프로그래밍 언어는 '코틀린과 자바']〉, 《코딩월드뉴스》, 2019-01-11 | ||
* Serdar Yegulalp, 〈[http://www.itworld.co.kr/news/109008자바를 넘어선 JVM 기반 프로그래밍 언어들]〉, 《InfoWorld》, 2018-04-20 | * Serdar Yegulalp, 〈[http://www.itworld.co.kr/news/109008자바를 넘어선 JVM 기반 프로그래밍 언어들]〉, 《InfoWorld》, 2018-04-20 | ||
92번째 줄: | 82번째 줄: | ||
* 심재석 기자, 〈[https://byline.network/2018/08/19-30/ 지금 뜨는 프로그래밍 언어는? ‘스위프트’와 ‘코틀린’]〉, 《BylineNetwork》, 2018-8-19 | * 심재석 기자, 〈[https://byline.network/2018/08/19-30/ 지금 뜨는 프로그래밍 언어는? ‘스위프트’와 ‘코틀린’]〉, 《BylineNetwork》, 2018-8-19 | ||
* 박병화 기자, 〈[http://m.codingworldnews.com/a.html?uid=257 해커랭크 "올해 배우고 싶은 언어 1위는 GO"…2위는 코틀린·파이썬]〉, 《코딩월드뉴스》, 2019-01-31 | * 박병화 기자, 〈[http://m.codingworldnews.com/a.html?uid=257 해커랭크 "올해 배우고 싶은 언어 1위는 GO"…2위는 코틀린·파이썬]〉, 《코딩월드뉴스》, 2019-01-31 | ||
+ | |||
+ | == 같이 보기 == | ||
+ | * [[자바]] | ||
+ | * [[구글]] | ||
+ | * [[고]] | ||
+ | |||
+ | {{프로그래밍 언어|검토 필요}} |
2019년 6월 26일 (수) 01:28 판
코틀린(Kotlin)이란 IntelliJ IDEA의 개발사 제트브레인스(JetBrains)에서 2011년에 공개한 프로그래밍 언어이다. 간결한 문법을 가지고 있고, 세미콜론은 옵션이다.[1] 자바가상머신(JVM) 기반의 언어이며, 자바와의 상호운용성이 100% 지원된다.[2] 자바가상머신의 바이트코드가 기본이지만, Kotlin/Native 컴파일러를 사용하여 기계어로 최종 컴파일이 된다. 안드로이드, 스프링 프레임워크, 톰캣, 자바스크립트, 자바 EE, HTML5, 아이오에스(iOS), 라즈베리 파이 등을 개발할 때 사용 가능하다.
현재 최신 버전은 1.3.31이다.
2017년에 구글이 안드로이드의 공식 언어로 코틀린을 추가하였다. 이는 오라클과의 자바 API 저작권 분쟁의 여파로 보는 시각이 많다. 2018년 카카오가 카카오톡 메시징 서버에 코틀린을 사용해 본 결과, 코드량이 비약적으로 감소하고 생산성이 대폭 상승했다고 한다. 2019년 1월부터는 구글 내부의 안드로이드 프로젝트에서도 자바 대신 코틀린을 사용할 수 있게 되었다.[3]
특징
- 자바(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이라 불편하다.
코틀린 맛보기
- 코틀린의 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
참고문서
- 박병화 기자, 〈2019년 가장 유망한 프로그래밍 언어는 '코틀린과 자바'〉, 《코딩월드뉴스》, 2019-01-11
- Serdar Yegulalp, 〈넘어선 JVM 기반 프로그래밍 언어들〉, 《InfoWorld》, 2018-04-20
- Martin Heller, 〈“떠오르는 자바 대체제” 코틀린 제대로 이해하기〉, 《InfoWorld》, 2017-11-03
- 심재석 기자, 〈지금 뜨는 프로그래밍 언어는? ‘스위프트’와 ‘코틀린’〉, 《BylineNetwork》, 2018-8-19
- 박병화 기자, 〈해커랭크 "올해 배우고 싶은 언어 1위는 GO"…2위는 코틀린·파이썬〉, 《코딩월드뉴스》, 2019-01-31
같이 보기