문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 Kotlin (문단 편집) == 특징 == * 장황했던 Java와 비교하면 눈물날 정도로 간결한 문법을 제공한다. 간결한 문법을 제공하면서도 런타임 오버헤드가 거의 없다.[* 이는 [[Java]]가 C언어의 객체 시스템이라고 할 수 있는 구조체 라이브러리를 기저기반으로 제작된 언어이기 때문이다. 물론 초기에나 그랬지 지금은 그 시절의 흔적을 크게 찾아볼 순 없지만... 문법에 그 흔적들이 아직 많이 남아있어 장황했던 것.] * 오버헤드 없는 널 안전성을 제공한다. Kotlin의 변수는 Nullable(널 값 사용 가능)과 NotNull(널 값 사용 불가)로 나뉘는데, 변수 선언 시 '?'를 붙여 Nullable로 만들 수 있다. Swift에서도 유사한 기능을 쓰는데 Kotlin 쪽이 제약이 좀 덜해서 사용하기 편하다. * '''예외처리를 강제하지 않는다.''' 코틀린으로 JSON Object를 만들 때 눈물이 난다... * '''모든 함수가 리턴값을 가진다.''' * Java의 'Integer'나 'Double'처럼 primitive type을 위한 별도의 wrapper class가 존재하지 않는다. 모든 primitive type은 객체 취급을 받는다. 따라서 Int 같은 변수는 객체에 할당된 toString 함수 등을 바로바로 이용할 수 있다. * 확장함수, 연산자 오버로딩을 지원한다. 예를 들어 int형을 확장해 'i = 3 power 4' 같은 식으로 새 연산자를 만들 수 있다.[* 실제로는 새 infix 함수를 생성하는 것으로 작동한다. 사칙연산 또한 infix 함수로 구현되어 'a * 3'으로도, 'a.times(3)'으로도 쓸 수 있다. 연산자와 연산자 오버로딩도 이 infix 함수로 돌아간다.] * API 문서에 Java의 HTML 대신 Markdown을 사용한다. * {{{==}}}, {{{!=}}} 연산자가 객체의 identity가 아닌 내용물을 비교한다. * Java에서는 String i와 String j가 같은 문자열을 담고 있어도 가리키는 객체의 메모리 주소는 다를 수 있으므로 {{{i == j}}}는 {{{false}}}가 될 수 있다. 따라서 객체의 내용물을 비교하려면 {{{equals()}}} 함수를 사용해야 한다. 하지만 Kotlin에서 {{{==}}}는 {{{equals()}}}와 똑같이, 즉 content equality로 작동한다. 따라서 {{{i == j}}}는 {{{true}}}다. Java처럼 identity equality를 비교하려면 {{{===}}}, {{{!==}}}를 쓰면 된다. * Java에서 BigDecimal 사용시에 {{{a.compareTo(b) > 0}}}로 사용했다면, Kotlin에서는 {{{a > b}}}를 사용하면 된다. 하지만 위에 설명했다시피 {{{a == b}}}는 내용물을 비교하기에 {{{a.equals(b)}}}을 대체하므로 Kotlin에서도 단순 숫자 비교에는 {{{a.compareTo(b) == 0}}}를 사용해야한다. [* [[https://stackoverflow.com/questions/63339605/what-is-the-correct-way-to-do-bigdecimal-comparison]]] * static 메서드가 없다. companion object를 사용해 감싸야 한다. Java 코드에서 접근하려면 '클래스명.Companion.메서드_혹은_get변수명()' 또는 @JvmStatic annotation을 쓰면 된다. * Java 8에 호환된다. * '''Java와의 상호 운용이 100% 지원된다.'''[* Kotlin에서 Java 코드 사용 시에는 그냥 사용할 수 있지만, Java에서 Kotlin 코드 사용 시에는 @Jvm* 계열의 annotation 사용이 필요한 경우도 있다.] * 자바와 달리 부모 클래스로부터 상속을 바로 받을 수 없다. open 키워드가 붙은 부모 클래스로부터만 상속을 받을 수 있다. * [[코루틴]]을 지원한다.저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기