모든 프로그램의 구성요소의 타입을 컴파일 시점에 알 수 있고, 컴파일러가 타입을 검증 해줌.
자바와 다르게 개발자가 타입을 선언하지 않아도 타입 추론이 지원됨
컴파일러가 프로그램 타입의 정확성을 검증하기 때문에 런타임에 프로그램이 오류로 중단될 가능성이 적어짐.
NULL 안전성
코틀린은 null이 될 수 있는 타입도 지원한다.
null 값 허용여부를 컴파일 단계에서 검사하기 때문에 널 포인터 에러로 인한 프로그램 중단 예방 가능
null pointer exception 에서 자바와 다르게 이 에러를 컴파일 탐임에 에러를 알려준다.
함수 타입에 대한 지원
코틀린은 함수형 프로그래밍
순수함수
같은 인자에 대하여 항상 같은 값을 반환
함수 외부의 어떤 상태도 바꾸지 않음
함수형 프로그래밍에서는 함수를 일급객체로 여김
일급 객체란
함수의 인자로 전달 가능
함수의 반환값으로 사용 가능
변수에 담기 가능
람다식 지원
람다식이란, 다른 함수의 인자로 넘기는 함수, 함수의 결과값으로 반환하는 함수, 변수에 저장하는 함수
고차 함수 : 고차 함수는 다른 함수를 인자로 사용하거나, 함수를 결과값 반환하는 함수를 말함. 일급 객체 or 일급 함수를 서로 주고 받을 수 있는 함수가 고차함수가 된다.
일급 객체인 함수, 그로인한 내부 상태가 절대로 바뀌지 않은 불변 객체를 사용해 side effect가 없음. 입력이 같으면 항상 같은 출력을 내놓고, 다른 객체의 상태를 변경하지 않으며, 함수 외부나 다른 바깥 환경과 상호작용하지 않은 순수함수를 사용할 수 있음.
자바와 호환성
JAVA Virtual Machine이 코틀린의 타겟 플랫폼이기 때문에 자바 메소드 호출, 자바 클래스 상속, 인터페이스 구현 등 자바에서 적용하던걸 모두 코틀린에서 할 수 있음.
자바 표준 라이브러리 클래스에 의존하기에 자바 라이브러리를 활용 할 수 있다.
간결성
getter, setter 같은 자바의 보일러 코드를 코틀린에서는 묵시적으로 제공
안전성
JVM에서 실행 하기 때문에 메모리 안전성과 버퍼 오버 플로우, 동적 메모리 할당의 문제 예방 가능
정적 타입 언어로 타입 자동 추론을 통해 타입 안전성 보장
null 타입 가능성도 지원하기 때문에 NullPointerException 으로 인한 프로그램 오류 방지
Class Cast Exception 예방 : 자바와 달리 코틀린에서는 타입 검사와 Cast가 한 연산자에 의해 이뤄진다. 어떤 객체의 타입을 검사했고, 그 객체가 그 타입에 속한다면 별도의 Cast 없이 해당 타입의 메소드나 필드 등의 멤버를 사용할 수 있다. 따라서 타입 검사를 생략할 이유가 없기에, 검사를 생략해서 생기는 오류가 발생할 일이 없다.
코틀린은 NPE를 방지하기 위해, String?, Int? 같은 nullable 타입들을 이용합니다. 이러한 타입들은 null 값을 가질 수 있습니다.
엘비스 연산자는 이런 nullable 타입들을 안전하게 값을 이용할 수 있도록 사용할 수 있게 합니다. nullable 타입 뒤에 ?: 로 표시하며, nullable 타입의 값이 null 일 경우 오른쪽 값을 이용합니다. null 이 아니면 엘비스 연산자의 왼쪽 값이 변수에 할당 됩니다.