본문 바로가기

Kotlin

Kotlin 이란 어떤 언어일까

오늘은 코틀린이라는 언어가 어떤 철학을 가진 언어인지, 어느 이유로 많이들 쓰기 시작한건지 알아보겠다

 

코틀린 탄생 배경

코틀린 언어에 대한 아이디어는 2010년 젯 브레인스(JetBrains)에서 생겼다.

그 시절 젯브레인스는 Java,C#,Javascript,Python,Ruby,PHP 등의 다양한 언어에 대한 개발도구를 제공하는 널리 알려진 꽤 유명했었다고 한다.

 

그들은 이렇게 다양한 언어에 대해 도구를 개발해온 경험으로 프로그래밍 언어라는 영역을 전체적으로 조망할 수 있는 독특한 시야와 이해를 가질수 있었고, 아래와 같은 이유로 자바를 대신할 언어를 찾고싶었으나 찾을 수 없었다고 한다

- 정적 타입 지정(static typing)이 가능한 언어

- 기존 자바코드와 완전히 호환이 되는 언어

- 배우기 쉽고 뜻을 파악하기 쉬운 언어

 

결국 그들은, 이러한 요구사항을 만족하는 언어를 만들면 더 많은 사용자를 찾을 수 있으리라고 예상했고 그로인해 코틀린 프로젝트가 시작되었다고 한다.

 

코틀린 이름의 유래

코틀린은 코틀린 개발 팀이 대부분 살고 있는 러시아의 상트페테르부르크 근처에 있는 섬 이름이라고 한다.

 

코틀린의 주요 특성

코틀린의 배경을 알았으니, 주요 특성에 대해 간략하게 알아보자

 

서버, 안드로이드 등 자바가 실행되는 모든 곳에서 적용이 가능하다

코틀린은 인텔의 멀티OS 엔진을 사용하면 코틀린을 iOS 디바이스에서도 실행이 가능하며, TornadoFX, JavaFX 뿐만 아니라 Javascript로도 코틀린을 컴파일 할 수 있다. 즉, 코틀린 코드를 브라우저나 노드에서도 실행이 가능하단 말이다.

 

정적 타입 지정 언어이다

자바와 마찬가지로 코틀린도 정적 타입(statically typed) 지정 언어이다.

 

정적 타입(statically typed) 지정 이란?

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

 

정적 타입 지정의 장점은?

- 성능 : 실행 시점에 어떤 메소드를 호출할지 알아내는 과정이 필요 없으므로 메소드 호출이 더 빠르다

- 신뢰성 : 컴파일러가 프로그램의 정확성을 검증하기 때문에, 실행시 오류 발생 가능성이 줄어든다

- 유지 보수성 : 코드에서 다루르 객체가 어떤 타입에 속하는지 알 수 있기 때문에, 처음 보는 코드를 다룰때도 더 쉽다

- 도구 지원 : 더 안전하게 리팩토링 할 수 있고, 도구는 더 정확한 코드 완성 기능을 제공할 수 있다고 한다.

 

그렇다면 동적 타입(dynamically typed) 지정은 무엇일까?

Groovy, JRuby가 대표적인 동적 타입 지정 언어로써, 타입과 관계없이 모든 값을 변수에 넣을 수 있고, 메소드나 필드 접근에 대한 검증이 실행 시점에 일어나는 언어를 뜻한다.

그에 따라 코드가 더 짧아지고 데이터 구조를 더 유연하게 생성하고 사용할 수 있지만, 반대로 이름을 잘못 입력하는 등의 실수도 컴파일 시 걸러내지 못하고 실행 시점에 오류가 발생한다

 

자바와 코틀린의 차이점은?

자바와 달리 코틀린에서는 모든 변수의 타입을 프로그래머가 직접 명시할 필요가 없다.

대부분의 경우 코틀린 컴파일러가 문맥으로부터 변수 타입을 자동으로 유추해 타입을 결정하며, 이러한 기능을 타입 추론(type inference) 라고 부른다

 

타입 추론(type inference)의 장점은?

프로그래머가 직접 타입을 선언해야 함에 따라 생기는 불편함이 대부분 사라진다

 

코틀린은 널이 될 수 있는 타입(nullable type)을 지원한다

널이 될 수 있는 타입을 지원함에 따라 컴파일 시점에 널 포인터 예외가 발생할 수 있는지 여부를 검사할 수 있어서 좀 더 프로그램의 신뢰성을 높일 수 있다

 

함수형 프로그래밍을 지원한다

자바 8 이전의 자바에는 함수형 프로그래밍을 지원할 수 있는 기능이 거의 없었으나 코틀린은 처음부터 함수형 프로그래밍을 풍부하게 지원해 왔다.

- 함수 타입을 지원함에 따라 어떤 함수가 다른 함수를 파라메터로 받거나 함수가 새로운 함수를 반환할 수 있다

- 람다 식을 지원함에 따라 번거로운 준비 코드를 작성하지 않아도 코드블록을 쉽게 정의하고 여기저기 전달할 수 있다

- 데이터 클래스는 불변적인 값 객체를 간편하게 만들 수 있는 구문을 제공한다

- 코틀린 표준 라이브러리는 객체와 컬렉션을 함수형 스타일로 다룰 수 있는 API를 제공한다

 

코틀린은 무료 오픈소스이다

코틀린은 Apache2 라이선스 하에 제공되고 있으며, 개발은 깃허브(https://github.com/jetbrains/kotlin)를 통해 이뤄지고 있다.

 

코틀린의 철학

코틀린은 자바와의 상호 운용성에 초점을 맞춘 실용적이고 간결하며 안전한 언어라고 계속 설명해 왔다.

그렇다면 이들이 말하는 실용성, 간결성, 안정성, 상호운용성은 어떤 뜻을 지니고 있을까?

 

실용성

코틀린은 연구를 위한 언어가 아닌, 실제 문제를 해결하기 위해 만들어진 실용적인 언어이다.

코틀린은 어떠한 연구중인 아이디어를 탐구하거나 증명하기위한 목적이 아닌, 다른 프로그래밍 언어가 채택한 이미 성공적으로 검증된 해법과 기능에 의존해 복잡도를 줄이고, 이미 알고있는 기존 개념을 통해 코틀린을 더 쉽게 배우기 위한 목적으로 만들어진 언어이다.

또 다른 측면은, 코틀린은 도구를 강조한다. 좋은 언어만큼이나 편리한 개발환경도 생산성 향상에 필수적이기 때문에 IDE의 코틀린 언어 지원을 잘 활용하면 더 쉽게 배울 수 있을 것이다

 

간결성

코틀린을 이용하면 반복되거나 길어질 수 있는 코드를 라이브러리 안에 캡슐화 하여 함수 호출로 대치하고, 작업에 따라 달라져야 하는 개별적인 내용을 사용자가 작성한 코드 안에 남겨둘 수 있다.

 

안전성

코틀린은 자바보다 더 높은 수준의 안전성을 달성하되 전체 비용은 더 적게 지불하고 싶었다고 한다.

그래서 선택한 방법은, JVM에서 실행 함으로써 이미 검증된 상당한 안정성을 보장해감과 동시에 타입 추론을 통해 자바보다 더 적은 비용으로 타입 안정성을 제공한 것이다.

 

상호운용성

코틀린이 집중하는 상호운용성 방향은 기존 자바 라이브러리를 그대로 사용할 수 있는 점과 동시에,

그와 반대로 기존 자바 라이브러리를 가능하면 최대한 많이 활용한다는 점을 들 수 있다.

예를 들어, 코틀린은 자체 컬렉션 라이브러리를 제공하지 않는다. 코틀린은 자바 표준 라이브러리 클래스에 의존한다. 다만 코틀린에서 컬렉션을 더 쉽게 활용할 수 있게 몇 가지 기능을 더할 뿐!