"코틀린"의 두 판 사이의 차이
lidongchun (토론 | 기여) 잔글 |
잔글 (→같이 보기) |
||
102번째 줄: | 102번째 줄: | ||
* [[고]] | * [[고]] | ||
− | |||
{{프로그래밍 언어|검토 필요}} | {{프로그래밍 언어|검토 필요}} |
2019년 9월 7일 (토) 17:03 판
코틀린(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 출력
관련문서
각주
- ↑ 박병화 기자, 〈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
같이 보기
- 인텔리제이 아이디어(IntelliJ IDEA)
- 자바
- 구글
- 고