Kotlin은 어떤 언어?
- Intelij IDE로 유명한 Jetbrains에서 개발
- 2017년 구글에서 안드로이드 개발 정식언어로 채택 (왜 채택?)
- ‘Interoperatablity’ 강조, 틈새를 파고드는 전략 → 기존에 개발된 프로젝트 / 라이브러리를 그대로 사용가능
- 엄청 특별한건 아님… JVM language들 다 되긴함
- Scala / Groovy / Jython…
- 엄청 특별한건 아님… JVM language들 다 되긴함
- Kotlin In Action: Kotlin의 주요 목표는 더 간결하고, 생산적이면서 안전한 Java의 대안을 제공하는 것. → But Java의 대안에 초점보다는 실용적임 / 간결함 / 안전한 언어에 초점
- 객체지향 프로그래밍 뿐만아니라 함수형 프로그래밍 스타일도 지원
- 일급함수(First-class functions)
- 불변값 (Immutable values)
- Kotlin을 당장 시작하기에 좋은글
Kotlin/JVM
Java 프로젝트 어디에나 침투가능. 가장 많이 쓰이고 있음.
- 안드로이드 개발, 서버개발 (a.k.a 코프링)
- 관련 글: 배민 코틀린 도입기 https://techblog.woowahan.com/7349/
Kotlin/Navtive
- VirtualMachine이나 추가적인 Runtime을 필요로하지 않는 곳에서 동작하는 프로그램을 만드려할때 사용
- 다양한 플랫폼에서 실행가능하다.
- C/C++ 프로젝트와도 Interopratable (상호운용가능)
- Target Platform: macOS, iOS, tvOS, watchOS, Linux, Windows, Android NDK
- Kotlin을 위한 LLVM 기반의 컴파일러를 Back-end에 두고있음
- 💡 LLVM?
- 컴파일 중간 단계를 위한 IR (Intermediate Representation)가 있음
- High-Level 언어들을 파싱하여 IR로 만들고, IR을가지고 타겟 CPU에 맞는 Machine Code를 생성
Kotlin/JS
- Kotlin 코드를 Transpile할 수 있음
- 💡 Transpile? High-Level 소스 코드를 비슷한 수준의 다른 언어로 변환
- JS의 Babel을 예로들면 ES6로 작성한 코드를 ES5 JS로 transpile하는 도구임
- Kotlin React의 맛
fun main() { val container = document.getElementById("root") ?: error("Couldn't find root container!") createRoot(container).render(Fragment.create { h1 { +"Hello, React+Kotlin/JS!" } }) }
안드로이드에서 Kotlin이 환영받았던 이유
- 안드로이드 앱은 Kotlin 도입 전 만해도 JVM이아닌 DVM에서 돌아가고 있었다.
- 모바일 환경, 라이센스 이슈… https://jizard.tistory.com/336
- 당시만 해도 JDK 8 (2014년)까지가 최대, 이제야 JDK 11(2018년)을 지원하고 있다.
- Java도 발전하고있는데…못써…
- Java에 비해 Boilerplate 코드가 확연히 적고, 최신 프로그래밍 언어들이 많이 쓰는 현대적인 문법들을 지원한다. 아래는 아주 단적인 예시이다.
class Person {
private String name;
public Person(String name) {
this.name = name; // constructor
}
public String getName() {
return this.name; // getter
}
public void setName(String name) {
this.name = name; // setter
}
}
data class Person(var name: String)
'프로그래밍 > Kotlin' 카테고리의 다른 글
Flow.map() vs Flow.transform() (0) | 2023.04.02 |
---|---|
[Kotlin] 클로저(Closure)에 대해 알아보자 (0) | 2023.03.20 |
[Kotlin] CompletableDeferred의 개념과 활용 (0) | 2022.11.12 |
Kotlin coroutine : async vs launch 차이 (1) | 2022.11.01 |
Kotlin Scope functions의 쓰임새 (let, run, with, apply, also, takeIf, takeUnless) with skydove's pokedex (0) | 2022.07.11 |