thumbnail

자바가 잠식한 한국 개발 시장에서 코틀린은 아직까지 많은 사람들이 사용하지는 않지만, 효율과 능률을 중시하는 프로그래밍 사회에서 가능성 있는 새로운 언어를 조금은 배워 손해볼 것은 없다.

특히 국내 일부 유니콘 기업들이 코틀린을 조금씩 도입하는 것은 한국의 자바 시장에 코틀린이 조금식 들어오고 있다는 것을 보여준다. 코틀린은 간단한 JVM으로 돌아가는 언어라고 표현하기에는 개발자를 위해 섬세하게 고려하여 개발됐다는 것을 알 수 있다.

따라서 코틀린 시리즈로 한번 코틀린을 파해쳐볼까 한다.

1. 코틀린은 무엇인가?

자바 플랫폼에서 돌아가는 프로그래밍 언어로, 간결하고 실용적이며 자바 코드와의 상호운용성을 중시한다. 자바가 운용되는 곳이면 거의 대부분 코틀린으로 대체 가능하며 성능도 자바와 거의 동일하다.

2. 탄생 계기

C#을 부러워하던 Jetbrains팀은 IntelliJ와 여러 IDE의 기반인 자바를 버릴 수 없었기 때문에 자체적으로 자바를 대체하는 언어를 만들고자 하였는데 거기에 요구사항이 몇가지 있었다.

  • 정적 타입 지정
  • 기존 자바 코드와 완전히 호환
  • 그 언어를 위한 도구 개발이 쉬워야
  • 배우기 쉽고 뜻을 파악하기 쉬운 언어

처음에는 회사 내부의 수요를 충족하는 언어가 필요한줄 알았지만, 지속적으로 위의 요구사항을 만족하는 수요가 있다는 것을 파악한 Jetbrains팀은 언어를 개발하기로 한다. 이름도 코틀린 개발팀 대부분이 살고 있는 러시아 상트페테르부르크 근처의 섬에서 따왔다.

3. 주요 특성

3.1. 대상 플랫폼

코틀린의 주목적은 현재 자바가 사용되고 있는 모든 용도에 적합하고 더 간결하고 생산적이며 안전한 대체 언어를 제공하는 것이다.

  • 서버상의 코드 (웹 애플리케이션의 백엔드 등)
  • 안드로이드 모바일 애플리케이션

3.2. 정적 타입 지정 언어

정적 타입 지정이란 모든 프로그램 구성 요소의 타입을 컴파일 지점에 알 수 있고 프로그램 안에서 객체의 필드나 메소드를 사용할 때마다 컴파일러가 타입을 검증하는 것이다. 자바도 정적 타입 지정 언어지만 코틀린은 모든 변수 타입을 프로그래머가 직접 명시할 필요가 없다.

예를 들어 var x = 1 코드를 프로그래머가 선언하면 컴파일러는 변수를 정의하면서 정수 값으로 변수를 초기화한다. 컴파일러가 이렇게 문맥을 고려해 변수 타입을 결정하는데 이것을 타입 추론이라고 한다.

정적 타입 지정은 성능, 신뢰성, 유지 보수, 도구 지원 등에서 장점을 발휘한다.

또한, 코틀린은 자바와 비슷하게 클래스, 인터페이스, 제네릭 등을 전부 비슷하게 작동시키지만 자바와 다르게 특별히 다른점 하나는 널이 될 수 있는 타입(nullable type)을 지원하는 것이다.

널이 될 수 있는 타입은 언어가 컴파일 시점에서 널 포인터 예외가 발생할 수 있는지 여부를 검사하여 신뢰성을 높일 수 있다.

3.3. 함수형 프로그래밍과 객체지향 프로그래밍

함수형 프로그래밍은 객체 지향 프로그래밍과 조금 다른 개념인데

  • first-class 함수 : 함수를 일반 값처럼 다루는 것
  • 불변성 : 내부 상태가 절대 바뀌지 않는 불변 객체를 이용
  • side-effect 없음 : 입력이 같으면 항상 같은 출력을 내놓고, 다른 객체의 상태를 변경하지 않는다.

아래 코드를 보면서 조금 이야기를 해보면

val sum = { a : Int, b : Int -> a + b } // 람다 함수
fun main(args: Array<String> {
    println(sum(1, 2))) // 3 출력
}

방금 sum의 타입이 val 인 것을 확인했으면 우리는 함수를 마치 변수처럼 사용한다는 것을 볼 수 있다. 방금 본 것 처럼 함수형 프로그래밍은 간결하며, 때로는 다중 스레드에 안전하며, 테스트에 사용하기 쉽다는 사실은 추후 이야기 할 것이다.

코틀린은 자바와 비슷하지만 다른 언어이다. Jetbrains의 세심한 배려가 있는 코틀린의 매력은 코틀린 시리즈에서 차차 설명해볼까 한다.