- 독릭된 언어로 여러 프랫폼으로 번역되는 가운데서도 고유의 철학을 유지
- 현재는 JVM 만 100프로 호환
자바를 비롯해 포인터를 직접 쓰지 않는 언어 대부분의 형 분류
-
원시형
- 대입이나 함수 인자 전달 또는 반환 시 복사됨
- 언어에 따라 스택메모리에 잡아서 속도가 빠름 (왜 힙은 상대적으로 느린가 ??)
-
참조형
- 대입 등에서 참조만 복사됨
- 대부분의 언어에서 힙이라 불리는 영역을 사용
원시형과 참조형의 다양한 차이로 인해 boxing, unboxing 이 발새아고 레퍼타입이 존재함
코틀린은 원시형의 개념을 사용하지 않고 기본형을 정의함
-> basic type: number, Boolean, character, string, array
코드에서는 무조건 래퍼형으로 표현하고 컴파일러
가 컨텍스트와 플랫폼에 따라 래퍼형 또는 원시형 중 유리한 것으로 변환함
코틀린에서는 복사냐 레퍼런스냐의 문제보다 불변성
을 갖는 형이냐 아니냐가 중요함
객체가 불변인데 레퍼타입인지 원시타입인지 중요한가 ?? 어차피 변경이 안되기 때문에
-> 플랫폼별 별 가장 효율적인 번역은 코틀린이 알아서 한다.
단 제네릭 배열과 원시형 배열을 분리하여 호환시키기 위해 원시형 배열을 별도로 제공
-> IntArray, LongArray 등
모든 것의 부모
- 모든 것의 자식 (모든 Type 에 대입이 가능함)
- 제어 흐름의 종결문을 표현함
- 없음을 나타내는 형이자 싱글톤 객체
- 모든 예외들의 부모
- 코틀린에서는 CheckedException 을 다 없앴다. 모두다 RuntimeException 으로 변경
- 함수를 나타내는 형
- 자바에서 선언한 람다는 모두 인터페이스의 익명 객체이다.
- 코틀린은 함수가 일급객체임
- Kotlin 은 Self Description 이 가능한 언어, Reflection 의 도움을 받지 않아도 언어자체에서 지원한다.