코틀린의 주요 특성
모든 프로그램 구성 요소의 타입을 컴파일 시점에 알 수 있고 프로그램 안에서 객체의 필드나 메소드를 사용할 때마다 컴파일러가 타입을 검증해준다.
대부분의 경우 코틀린 컴파일러가 문맥으로부터 변수 타입을 자동으로 유추할 수 있기 때문에 프로그래머는 타입 선언을 생략해도 된다.
ex) var x = 1
의 변수 타입이 Int
타입임을 추론해준다.
1) 성능
실행 시점의 어떤 메소드를 호출알지 알아 메소트 호출이 더 빠르다.
2) 신뢰성
컴파일러가 프로그램의 정확성을 검증하기 때문에 실행 시 프로그램 오류로 중단될 가능성이 적다.
3) 유지 보수성
코드에서 다루는 객체가 어떤 타입에 속하는지 알 수 있기 때문에 처음 보는 코드를 다룰 때도 쉽다.
4) 도구 지원
더 안전하게 리팩토링 할 수 있고, 도구는 더 정확한 코드 완성 기능을 제공하며, IDE의 다른 지원 기능도 더 잘 만들 수 있다.
컴파일 시점에 널 포인터 예외가 발생할 수 있는지 여부를 검사할 수 있어서 좀 더 프로그램의 신뢰성을 높일 수 있다.
함수를 일반 값(변수, 인자 등)처럼 다룰 수 있다. 내부 상태가 절대로 바뀌지 않는 불변 객체를 사용해 프로그램을 작성한다. 순수 함수(입력이 같으면 항상 같은 출력을 내놓음)를 사용한다.
1) 간결성
fun findAlice() = findPerson{ it.name == "Alice" }
fun findBob() = findPerson { it.name == "Bob" }
사람을 찾는 로직(공통 부분)은 따로 함수로 뽑아내고 서로 다른 세부 사항을 인자로 전달한다.
2) 다중 스레드를 사용해도 안전
불변 데이터 구조를 사용하고 순수 함수를 그 데이터 구조에 적용한다.
3) 테스트 용이
순수 함수는 함수를 실행할 때 필요한 전체 환경을 구성하는 준비 코드가 따로 필요하지 않다.
코틀린은 새로운 컴포넌트를 작성하거나 기존 서비스 코드를 코틀린으로 이식해야하는 경우에 모두 잘 들어맞는다.
코틀린의 철학
코틀린은 연구를 위한 언어가 아니다. 최신 프로그래밍 언어 설계를 앞서 채택하거나 전산학계에서 연구 중인 혁신적인 아이디어를 코틀린을 통해 탐구하려고 하지 않는다. 대신 코틀린은 다른 프로그래밍 언어가 채택한 이미 성공적으로 검증된 해법과 기능에 의존한다.
또한 흔히 쓰이지만 더 간결한 구조로 바꿀 수 있는 대부분의 코드 패턴을 도구가 자동으로 감지해서 수정하라고 제안한다.
코드는 더 간단하고 간결할수록 내용을 파악하기가 더 쉽다. 즉, 의도를 쉽게 파악할 수 있는 구문 구조를 제공하고 그 의도를 달성하는 방법을 이해할 때 방해가 될 수 있는 부가적인 준비 코드가 적어야한다. 코틀린은 이런 부수적인 요소들을 줄이기 위해 많은 노력을 기울인 언어이다. (getter, setter 등 준비 코드를 코틀린은 묵시적으로 제공한다.)
또한 코틀린은 기능이 다양한 표준 라이브러리를 제공하기 때문에 반복되거나 길어질 수 있는 코드를 라이브러리 함수 호출로 대치할 수 있다.
프로그램에서 발생할 수 있는 오류 중에서 일부 유형의 오류를 프로그램 설계가 원천적으로 방지해준다.
코틀린의 주요 특성에서 설명했듯이, 코틀린의 타입 시스템은 null이 될 수 없는 값을 추적하며, 실행 시점에 NullPointerException이 발생할 수 있는 연산을 사용하는 코드를 금지한다.
또한 ClassCastException 예외 처리가 있다. 어떤 객체를 다른 타입으로 cast하기 전에 타입을 미리 검사하지 않으면 ClassCastExeptipn이 발생할 수도 있다.
기존의 라이브러리를 그대로 사용할 수 있다. 기존 자바 라이브러리를 가능하면 최대한 활용 가능하다. 예를 들어 코틀린은 자체 컬렉션 라이브러리를 제공하지 않는다. 코틀린은 자바 표준 라이브러리 클래스에 의존한다. 이는 코틀린에서 자바 API를 호출할 때 객체를 감싸거나 변환할 필요가 없고, 자바에서 코틀린 API를 호출할 때도 마찬가지로 아무런 변환이 필요 없다는 뜻이다.
또한 자바 메소드를 호출, 상속하거나 인터페이스를 구현, 자바 어노테이션을 코틀린 코드에 적용하는 것이 가능하다.