코틀린이란 무엇인가?
코틀린은 안전성, 간결성, 상호 운용성을 강조하는 다중 패러다임, 다중 플랫폼 프로그래밍 언어이며 자바 가상 머신(JVM), 안드로이드, 자바스크립트, 네이티브 애플리케이션 등과 같은 여러 플랫폼을 지원한다.
안전성
코틀린의 설계 목표 중 하나는 언어의 안전성에 관한 트레이트 오프의 황금비를 찾아내는 것이었다.
즉, 자바보다 더 안전성을 보장하는 언어를 설계하되, 자바보다는 개발자의 생산성을 덜 해치는 언어를 만드는 것이었다.
- 타입 추론(type inference)으로 인해 개발자가 명시적으로 타입을 지정하지 않아도 된다.
Null
이 될 수있는 타입(nullable type)을 통해null
의 사용을 제한할 수 있고, 악명 높은NullPointerException
예외를 좀 더 쉽게 방지할 수 있다.- 스마트 캐스트(smart cast)를 통해 타입을 안전하게 변환할 수 있고, 실행 시접에 타입 캐스트 오류를 방지할 수 있다.
다중 패러다임
초기
자바와 같은 전형적인 주류 프로그래밍 언어가 지원하는 일반적인 객체지향 패러다임 외에 함수형 프로그래밍을 지원한다는 뜻이었다.
함수형 프로그래밍 원칙이 여러 언어에 도입됐음에도 불구하고 함수형 코드를 작성하기에 편리한 문법적인 도구를 제공하지는 않는 반면, 코틀린은 처음부터 필요한 도구를 제공한다.
이후
코틀린 언어가 성장해 나가면서, 두 가지 프로그래밍 패러다임을 더 지원하기 시작했다.
- 도메인 특화 언어(Domain Specific Language, DSL) : API를 도메인 특화 언어로 정의할 수 있는 기능으로 코틀린을 선언적 스타일로 코딩할 수 있다.
- 동시성 프로그래밍(Concurrent Programing) : 코루틴(Coroutine)을 도입하면서 다양한 패턴의 동시성 프로그래밍을 지원한다.
간결성과 표현력
개발자 생산성은 다른 사람이 짠 코드를 보든 본인 스스로가 짠 것을 한참 후에 보든 관계없이, 빠르게 읽고 이해할 수 있는 코드를 작성할 수 있는지와 주로 연관돼있다.
코틀린 설계자들은 Getter, Setter, 익명 클래스, 명시적인 위임 등 불필요한 준비 코드를 제거하고 언어를 가능한 한 간결하게 만들기 위해 노력했다.
상호 운용성
코틀린 설계자들은 기존 자바 코드를 코틀린에서 사용할 수 있게 했을 뿐 아니라, 코틀린 코드를 거의 아무런 노력을 들이지 않고도 자바에서 사용할 수 있도록 보장하기 위해 노력했다.
다중 플랫폼
JVM과 안드로이드가 코틀린 개발의 주 대상이나, 아래 플랫폼도 지원한다.
- 브라우저나 노드(Node.js) 애플리케이션, 자바스크립트 라이브러리까지 포함하는 자바스크립트 지원
- macOS나 리눅스, 윈도우 라이브러리 및 애플리케이션을 포함하는 네이티브 지원
코틀린 생태계
코루틴
일시 중단 가능한 계산(suspendable computation)이라는 개념 덕분에 코틀린은 async/await, 퓨처(future), 프로미스(promise), 액터(actor) 등의 동시성 관련 프로그맹 패턴을 지원할 수 있다.
코루틴에 포함된 주요 기능은 아래와 같다.
- 스레드에 대한 더 가벼운(lightweight) 대안
- 유연한 스레드 디스패치(dispatch) 매커니즘
- 일시 중단 가능한 시퀀스와 이터레이터(iterator)
- 채널(channel)을 사용한 메모리 공유
- 액터를 통해 메시지 전송 방식으로 상태 공유
Reference
'🔮 KOTLIN' 카테고리의 다른 글
[코틀린 완벽 가이드] 4장 : 클래스와 객체 다루기 (0) | 2022.07.23 |
---|---|
[코틀린 완벽 가이드] 3장 : 함수 정의하기 (0) | 2022.05.01 |
[코틀린 완벽 가이드] 2장 : 코틀린 언어 기초 (0) | 2022.04.22 |