문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 Kotlin (문단 편집) == 기타 == * [[가상머신]]을 이용하지 않는 모바일 환경이나 임베디드, IoT 환경을 위해 개발된 Kotlin/Native 컴파일러로 기계어 최종 컴파일을 할 수 있다. [[LLVM]]에 기반하고 있으며, 참조 횟수 카운팅 방식의 [[쓰레기 수집|가비지 컬렉션]]을 사용한다. [[iOS]]나 [[Raspberry Pi]] 개발도 가능하다. Kotlin Native는 다음 플랫폼들을 지원한다. [[https://kotlinlang.org/docs/native-overview.html|출처]] * macOS * iOS, tvOS, watchOS * Linux * Windows ([[GCC|MinGW]]) * Android NDK * 이 외에도 [[자바스크립트]]로 컴파일되는 [[https://kotlinlang.org/docs/js-overview.html|Kotlin/JS]], [[WebAssembly]]를 타겟으로 한 [[https://kotlinlang.org/docs/wasm-overview.html|Kotlin Wasm]], 멀티플랫폼 개발이 가능한 [[https://kotlinlang.org/docs/multiplatform.html|Kotlin/Multiplatform(Kotlin/Multiplatform Mobile)]] 등의 프로젝트도 존재한다. 다만 후자의 경우 UI 중심인 [[React Native]]나 [[Flutter(프레임워크)|Flutter]]과는 달리 비즈니스 로직을 공유하는 데 초점을 맞추고 있다. * 최신 언어에서 개발된 언어 디자인 컨셉들을 많이 활용했지만, 이해하기 힘들거나 사용빈도가 떨어지는 기능들을 제거해 언어 자체를 단순하게 만들고 툴링을 강화한 언어라는 평가를 받는다. 예를 들면, 본문에 소개된 Kotlin의 ?(null 안전성)를 제외한 모든 기능은 [[Scala]]에 이미 존재했던 기능들이고, 반대로 Scala에 존재하지만 Kotlin에 존재하지 않는 기능은 정말 많다.[* ~~?는 편리한 기능임과 동시에 타입시스템 상의 논리적인 오류이기 때문에 타입 안정성에 극도로 공을 들이는 Scala 같은 언어에서 도입할 가능성은 없다.~~ Scala 2에서 null에 대처하는 일반적인 방법은 단순한 빌트인 타입 중 하나일 뿐인 Option 타입이고, 언어 자체에 null 안정성과 관련된 기능은 없다. 하지만 Scala 3에서는 `-Yexplicit-nulls` 컴파일러 옵션으로 타입 위계를 완전히 바꾸어서 레퍼런스 타입이라도 기본적으로 nullable하지 않게 할 수 있다. 이 경우, Null이 가능하게 하려면 `String|Null` 로 타입을 지정해야 한다. 타입시스템에 논리적 오류를 도입하지 않으면서도 null 안정성을 얻은 연구 성과이다.] * 스택 오버플로우를 검색해보면 Kotlin 질문들은 거의 없는 것을 볼 수 있는데, Java와 Kotlin은 서로 완벽하게 호환되기 때문에 답이 안 나온다면 Java로 질문된 문제를 참고하면 된다. * Kotlin과 [[IntelliJ IDEA]]를 만든 [[JetBrains]]에서 제작한 코틀린 전용 웹 프레임워크 [[https://ktor.io/|Ktor]]가 존재한다. ORM으로는 [[https://github.com/JetBrains/Exposed|Exposed]][* JetBrains에서 제작했다.], [[https://www.ktorm.org/|Ktorm]]가 있다. * [[Java]]와 상호 호환되는 언어인만큼 [[JetBrains]]의 Java, Kotlin IDE인 [[IntelliJ IDEA]]에 Java 코드를 Kotlin 코드로 바꿔주는 기능이 존재한다.[* 이 기능은 [[IntelliJ IDEA]]를 기반으로 만들어진 IDE인 [[Android Studio]]에도 존재한다.] * 구글에서 안드로이드 앱 개발 공식 언어로 채택한 덕에 안드로이드 앱 개발에만 쓰이는 언어로 이미지가 굳어졌지만, 위에서 언급했듯 Java와 상호 호환이 되기에 기존에 Java로 구축한 프로젝트를 Kotlin으로 이전하거나, 일부 모듈에만 Kotlin을 사용하는 식으로 혼용이 가능하다. Java를 사용하는 대부분의 프로젝트([[Spring(프레임워크)|Spring]]을 사용하는 경우 등)는 Kotlin으로도 충분히 가능하다는 이야기이다. 코루틴 등 코틀린의 장점을 차용해야 하는 프로젝트에서 먼저 많이 사용되었고 IT 서비스업 위주로 신규 프로젝트 시작 시 자바에 비해 간결한 코틀린으로 옮겨가는 추세이다. * 문법을 보면 [[Scala]] 2.x와 유사한 것을 확인할 수 있다. 실제 JetBrains에서 밝힌 언어 탄생 비화에 따르면 Scala를 사용하다가 언어 특징인 암묵성 등으로 인해 컴파일 시간이 길어질 수밖에 없고 러닝 커브가 높아지는 등 불편함을 느끼게 되자 Scala 언어 특징에서 암묵성을 빼고 그 자리에 명시성을 넣는 등 자유도보다도 빠른 실사용에 적합하도록 직접 개발한 언어라고 밝힌 적이 있다. 주요 차이점은 다음과 같다. * 암묵성을 버리고 명시성을 채택함에 따라 자동 형변환을 지원하거나 타입클래스를 짧은 코드로 사용하는 등의 이점은 포기해야 하지만 다른 사람이 작성한 코드를 이해하기가 쉬워지고 컴파일 속도가 비약적으로 빨라졌다. 또한 Scala에서 암묵성을 이용해 구현되었던 일부 기능은 C#에서와 비슷한 확장 함수 등의 개념을 새로 도입하는 등 Kotlin에서도 비슷하게 사용할 수 있다. * Scala는 함수형 패러다임을 따라 [[Haskell|null 안정성을 option 형식으로 처리]]하지만 Kotlin은 C#과 비슷한 null 연산자로 처리한다. 이는 다른 모나드 연산과 통일시키기는 어렵지만 모나드 연산보다 C++, Java 등을 사용해왔던 프로그래머들이 이해하기 쉽고 Java와 호환하여 사용할 때 null 안정성이 크게 증가한다. * Scala는 Scala만의 기능을 위해서라면 Java에서 상호운용하기가 거의 불가능함에도 불구하고 기능을 추가하기도 하는데, Kotlin은 Java와의 상호운용성이 담보되지 않으면 기능을 추가하지 않는 경우가 있다.저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기