코틀린 언어 특성
1. 정적 타입 지정 언어
정적 타입 지정 - 모든 프로그램 구성 요소의 타입을 컴파일 시점에 알 수 있고 프로그램 안에서 객체의 필드나 메소드를 사용할 때마다 컴파일러가 타입을 검증해준다.
* 동적 타입 지정 - 타입과 관계없이 모든 값을 변수에 넣을 수 있고 메소드나 필드 접근에 대한 검증이 실행 시점에 일어난다
2. 함수형 프로그래밍과 객체지향 프로그래밍
함수형 프로그래밍
* 일급 시민인 함수 - 함수를 일반 값처럼 다룰 수 있다. 함수를 변수에 저장할 수 있고 함수를 인자로 다른 함수에 전달할 수 있으며 함수에서 새로운 함수를 만들어서 반환할 수 있다.
* 불변성 - 함수형 프로그래밍에서는 일단 만들어지고 나면 내부 상태가 절대로 바뀌지 않는 불변 객체를 사용해 프로그램을 작성한다.
* 부수 효과 없음 - 함수형 프로그래밍에서는 입력이 같으면 항상 같은 출력을 내놓고 다른 객체의 상태를 변경하지 않으며, 함수 외부나 다른 바깥 환경과 상호작용하지 않는 순수 함수를 사용한다.
함수형 프로그래밍 이점
간결성 - 순수 함수를 값처럼 활용할 수 있으면 더 강력한 추상화를 할 수 있고 강력한 추상화를 사용해 코드의 중복을 막을 수 있다
다중 스레드 세이프 - 불변 데이터 구조를 사용하고 순수 함수를 그 데이터 구조에 적용한다면 다중 스레드 환경에서 같은 데이터를 여러 스레드가 변경할 수 없다
테스트 용이 - 부수 효과가 있는 함수는 그 함수를 실행할 때 필요한 전체 환경을 구성하는 준비 코드가 필요하지만 순수 함수는 그런 준비 코드 없이 독립적으로 테스트할 수 있다
코틀린의 철학
1. 실용성 - 코틀린은 다른 프로그래밍 언어가 채택한 이미 성공적으로 검증된 해법과 기능에 의존한다. 이로 인해 언어의 복잡도가 줄어들고 이미 알고 있는 기존 개념을 통해 코틀린을 더 쉽게 배울 수 있다.
2. 간결성 - 언어가 간결하다는 말은 그 언어로 작성된 코드를 읽을 때 의도를 쉽게 파악할 수 있는 구문 구조를 제공하고 그 의도를 달성하는 방법을 이해할 때 방해가 될 수 있는 부가적인 준비 코드가 적다는 뜻이다. 코틀린은 람다를 지원하기 때문에 작은 코드 블록을 라이브러리 함수에 쉽게 전달할 수 있다. 따라서 일반적인 기능을 라이브러리 안에 캡슐화하고 작업에 따라 달라져야 하는 개별적인 내용을 사용자가 작성한 코드 안에 남겨둘 수 있다.
3. 안전성 - 일반적으로 더 큰 안전성을 얻으려면 프로그램에 더 많은 정보를 덧붙여야 하므로 생산성이 하락하는 것을 감수해야 하며 안전성과 생산성 사이에는 트레이드오프 관계가 성립된다. 코틀린 자바보다 더 적은 비용으로 안전성을 높힐 수 있다. 코틀린은 실행 시점에 오류를 발생시키는 대신 컴파일 시점 검사를 통해 오류를 더 많이 방지해준다. (ex NullPointerException, ClassCastException)
4. 상호 운용성 - 자바와 코틀린 코드를 프로젝트에서 원하는 대로 섞어 쓸 수 있는 궁극적인 유연성을 발휘할 수 있다.
코틀린 도구 사용
코틀린 코드 컴파일
코틀린 컴파일러는 자바컴파일러가 자바 소스코드를 컴파일할 때와 마찬가지로 코틀린 소스코드를 분석해서 .class 파일을 만들어낸다. 만들어진 .class 파이른 개발 중인 애플리케이션의 유형에 맞는 표준 패키징 과정을 거쳐 실행될 수 있다. 코틀린 컴파일러로 컴파일한 코드는 코틀린 런타임 라이브러리에 의존한다. 런타임 라이브러리에는 코틀린 자체 표준 라이브러리 클래스와 코틀린에서 자바 API의 기능을 확장한 내용이 들어있다. 코틀린으로 컴파일한 애플리케이션을 배포할 때는 런타임 라이브러리도 함께 배포해야 한다
출처 - 코틀린인액션