코틀린
- 자바 플랫폼에서 돌아가는 프로그래밍 언어
- 간결하고 실용적이며, 자바 코드와의 상호운용성을 중시
- 자바가 사용되는 곳이라면 코틀린으로 활용 가능
- 기존의 자바 라이브러리나 프레임워크와 함께 잘 작동하며 성능도 자바와 같은 수준
코틀린의 주요 특성
정적 타입(statically typed) 지정 언어
모든 프로그램 구성 요소의 타입을 컴파일 시점에 알 수 있고 프로그램 안에서 객체의 필드나 메소드를 사용할 때마다 컴파일러가 타입을 검증해준다.
JVM에서의 동적 타입(dynamically typed) 지정 언어인 그루비, JRuby는 메소드나 필드 접근에 대한 검증이 실행 시점에 일어나며, 그에 따라 코드가 더 짧아지고 데이터 구조를 더 유연하게 생성하고 사용할 수 있다. 하지만 반대로 이름을 잘못 입력하는 등의 실수도 컴파일 시 걸러내지 못하고 실행 시점에 오류가 발생한다.
대신 코틀린에서는 자바와 달리 컴파일러가 문맥으로부터 변수 타입을 자동으로 유추할 수 있기 때문에 타입 선언을 생략할 수 있다. 이를 타입 추론(type interence)라고 부른다.
1 | var x = 1 // typed Int |
정적 타입은 아래의 장점을 갖는다.
- 성능
- 신뢰성
- 유지 보수성
- 도구 지원
함수형 프로그래밍과 객체지향 프로그래밍
코틀린은 객체지향 뿐만 아니라 함수형 프로그램이도 지원하고 있다. (자바는 8이상부터 가능했다)
함수형 프로그래밍의 핵심 개념은 다음과 같다.
일급 시민(first-class)인 함수
함수를 일반 값처럼 다룰 수 있다. 함수를 변수에 저장할 수 있고, 함수를 인자로 다른 함수에 전달할 수 있으며, 함수에서 새로운 함수를 만들어서 반환할 수 있다.불변성(immutalbility)
함수형 프로그래밍에서는 일단 만들어지고 나면 내부 상태가 절대로 바뀌지 않는 불변 객체를 사용해 프로그래밍을 작성한다.부수 효과(side effect) 없음
함수형 프로그래밍에서는 입력이 같으면 항상 같은 출력을 내놓고 다른 객체의 상태를 변경하지 않으며, 함수 외부나 다른 바깥 환경과 상호작용하지 않는 순수 함수(pure function)를 사용한다.
위와 같은 함수형 프로그래밍을 하게 되면 다음과 같은 장점을 얻을 수 있다.
간결함
일반적인 명령형 코드에 비해 더 간결하고 우아하다.추상화
함수를 값처럼 활용할 수 있으면 더 강력한 추상화를 할 수 있고 강력한 추상화를 사용해 코드 중복을 막을 수 있다.스레드 세이프
함수형 프로그래밍의 개념 중 불변성에 의해 다중 스레드 프로그램에서 적절한 동기화 없이도 안전한 프로그래밍을 할 수 있다.
코틀린의 철학
실용성
코틀린은 실제 문제를 해결하기 위해 만들어진 실용적인 언어이며 연구를 위한 언어가 아니다. 코틀린은 다년간의 IT업계 경험을 바탕으로 이뤄졌으며, 소프트웨어 개발자들의 사용에 잘 들어맞을 수 있게 주의 깊게 언어 특성을 선택했다.
간결성
코틀린을 만들면서 프로그래머가 작성하는 코드에서 의미가 없는 부분을 줄이고, 언어가 요구하는 구조를 만족시키기 위해 별 뜻은 없지만 프로그램에 꼭 넣어야 하는 부수적인 요소를 줄이기 위해 많은 노력을 했다. 그 예로 Getter, Setter, Constructor 등 자바에 존재하는 여러가지 번거로운 준비 코드를 코틀린은 묵시적으로 제공한다.
안전성
일반적인 프로그램에서는 안전성과 생산성 사이의 트레이드오프 관계가 성립한다. 코틀린은 이러한 트레이드오프에서 높은 수준의 안전성을 달성하되 전체 비용은 더 적게 들기 위한 노력을 했다. 애초에 JVM위에서 작동하는 언어이므로 메모리 안전성이나, 버퍼 오버플로를 방지와 같은 기본적인 다양한 문제를 예방할 수 있다. 여기에 코틀린은 타입 추론을 통한 개발자의 실수를 줄일 수 있게 하였다. 한 걸음 더 나아가서는 NullPointerException을 없애기 위해 null에 대한 허용을 제한할 수 있다.
상호운용성
코틀린은 자바 라이브러리를 어떠한 장치도 필요없이 그대로 사용이 가능하다. 자바로 된 프로젝트에 코틀린을 적용할 수 있으며 코틀린 프로젝트에도 자바를 적용해도 무리없이 동작이 가능하다.
출처 : Kotlin in Acation