프로그래밍/Kotlin

Kotlin은 왜 나왔고, 왜 Android 공식언어로 채택되었을까?

Lou Park 2023. 3. 19. 14:43

Kotlin은 어떤 언어?

  • Intelij IDE로 유명한 Jetbrains에서 개발
  • 2017년 구글에서 안드로이드 개발 정식언어로 채택 (왜 채택?)
  • ‘Interoperatablity’ 강조, 틈새를 파고드는 전략 → 기존에 개발된 프로젝트 / 라이브러리를 그대로 사용가능
    • 엄청 특별한건 아님… JVM language들 다 되긴함
      • Scala / Groovy / Jython…
  • Kotlin In Action: Kotlin의 주요 목표는 더 간결하고, 생산적이면서 안전한 Java의 대안을 제공하는 것. → But Java의 대안에 초점보다는 실용적임 / 간결함 / 안전한 언어에 초점
  • 객체지향 프로그래밍 뿐만아니라 함수형 프로그래밍 스타일도 지원
    • 일급함수(First-class functions)
    • 불변값 (Immutable values)
  • Kotlin을 당장 시작하기에 좋은글

Kotlin/JVM

Java 프로젝트 어디에나 침투가능. 가장 많이 쓰이고 있음.

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에서 돌아가고 있었다.
  • 당시만 해도 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)