Skip to content

Introduction

참고 자료

  • 드미트리 제메로프, 스베트라나 이사코바 - Kotlin IN ACTION 1장
  • Kotlinlang.org - Kotlin Multiplatform

1. 코틀린 소개

images/kotlin_logo.png

Note

Kotlin은 IntelliJ, Pycharm 등의 IDE 로 유명한 JetBrains 에서 개발한 프로그래밍 언어입니다. 코틀린은 Better Language than Java 를 표방하며 자바에 존재하던 많은 boilerplate 한 코드를 제거할 수 있도록 설계되었습니다.

2. 코틀린의 특징

1. 멀티 플랫폼 지원

Kotlin Multiplatform Use cases

  • Android and iOS applications
  • Full-stack web applications
  • Multiplatform libraries

How Kotlin Multiplaform works

images/kotlin-multiplatform.png

코틀린에는 Kotlin/JVM, Kotlin/Native, Kotlin/JS의 세가지 platform-specific 버전이 존재합니다.

이를 통해 JVM, JS and Native 와 같은 platform native code 에 접근 할 수 있게 됩니다.

2. 정적 타입 언어

정적 타입 언어

모든 프로그램 구성 요소의 타입을 컴파일 시점에 알 수 있고 프로그램 안에서 객체의 필드나 메서드를 사용할 때마다 컴파일러가 타입을 검증하는 언어

정적 타입 언어의 장점

  1. 성능 - 실행 시점에 어떤 메서드가 호출될 것인지 결정하는 과정 (Method Dispatch) 가 필요 없으므로 메서드 호출이 빠르다.

  2. 신뢰성 - 컴파일러가 프로그램의 정확성을 검증하기 때문에 프로그램이 오류로 중단될 가능성이 더 적다.

  3. 유지 보수성 - 객체 타입과 호출 메서드가 정적으로 결정되고 (dynamic dispatch 제외) 코드에 드러나기 때문에 처음 보는 코드를 이해하기 쉽다. 개인적으로 이런 기능이 지원되지 않는 python 이나 javascript 코드를 보는 것은 두렵다...

  4. 도구 지원 - 컴파일러가 객체와 메서드에 대한 정보를 정적으로 획득 할 수 있기 때문에 이를 바탕으로한 IDE 의 리팩토링, 코드 자동완성 기능의 지원이 좋다.

정적 타입언어는 위와같은 장점이 있지만 일반적으로 코드는 길어지고 장황해지는 단점이 있습니다. 코틀린은 컴파일러의 강력한 타입추론을 통해 이러한 문제도 상당부분 해결하였습니다.

3. 함수형 프로그래밍 + 객체지향 프로그래밍

코틀린은 자바와 달리 처음부터 함수형 프로그래밍을 지원하기 위해 설계 되었습니다. 학술적으로 이야기 하면 함수가 일급 시민 (First-Class Citizen)으로 동작 할 수 있습니다.

일급 시민 - First-Class Citizen

  1. 메서드의 파라미터가 될 수 있다.
  2. 메서드의 반환값이 될 수 있다.
  3. 변수에 저장할 수 있다.

자바에서도 functional interface 와 labmda 를 통해 Java8 이후 부터는 함수형 프로그래밍을 지원하였지만 아쉬운점이 몇가지 있었습니다.

  • 함수... 이긴하지만 근본적으로는 일반 인터페이스으로 동작한다.
  • 함수를 직접 호출할 수 없다. - method call 방식으로 호출가능

코틀린에서는 **함수 타**입의 도입으로 이런 아쉬운점을 해결하였습니다.

3. 코틀린의 철학

1. 실용성

  • 코틀린은 실제 문제를 해결하기 위해 만들어진 실용적인 언어!
  • 프로그래밍 스타일이나 패러다임을 강제하지 않음
    • 명령형 프로그래밍, 객체지향 프로그래밍, 함수형 프로그래밍 세가지의 대표적인 프로그래밍 패러다임을 모두 적용 할 수 있습니다.
  • IDE 를 개발하는 회사에서 만들 언어 답게 도구를 강조합니다.

2. 간결성

  • 자바에 존재하는 여러 가지 준비 코드를 코틀린은 implicit 하게 제공합니다.
  • 코틀린의 표준 라이브러리는 자주 사용되는 복잡한 기능을 확장함수의 형태로 제공합니다. 특히, 컬렉션에 제공되는 확장함수는 아주 강력합니다.

3. 안정성

JVM 을 활용하는 정적 타입 언어 인 만큼 기본적으로 메모리 안전성, 버퍼 오버플로 방지, 애플리케이션의 타입 안정성 등 의 안정성이 보장됩니다. 코틀린은 더 나아가서 널이 될 수 있는 타입nullable type 을 도입하여 개발자가 타입의 널 가능성을 간결하게 체크 할 수 있도록 하였습니다.

4. 상호운용성

코틀린의 마지막 특징은 자바와의 상호운용성입니다. 자바 코드에서 코틀린 코드를 호출 할 수 있고 그 반대도 가능합니다. 코틀린의 표준 라이브러리도 자바의 표준 라이브러리에 의존하도록 구성되어 있습니다.


Last update: February 26, 2023
Created: January 9, 2023