코틀린의 원시 타입을 정리한다.
원시 타입 : Int, Boolean …
자바에서는 원시 타입과 참조 타입을 구분한다.
원시 타입의 변수에는 그 값이 들어가고, 참조 타입의 변수에는 메모리상의 객체 위치가 들어간다.
코틀린에서는 원시 타입과 참조 타입을 구분하지 않는다.
아래 코드에서는, 정수를 표현하기 위해 Int 를 사용한다.
1 2
| val i: Int = 1 val list: List<Int> = listOf(1, 2, 3)
|
그리고, 코틀린에서는 아래처럼 원시 타입의 값에 대해 메서드 호출이 가능하다.
1 2 3 4
| fun showProgress(progress: Int){ val percent = progress.coerceIn(0, 100) println("progress : $percent") }
|
그런데, 원시 타입과 참조 타입 같으면 항상 객체로 표현되는 걸까? 아니다.
실행 시점에 가장 효츌적인 방식으로 표현된다.
예를 들어, 대부분의 경우 코틀린의 Int 타입은 자바 int 타입으로 컴파일 된다.
널이 될 수 있는 원시 타입 : Int?, Boolean? …
자바에서는, null 참조를 참조 타입의 변수에만 대입할 수 있다.
그래서, 코틀린에서 널이 될 수 있는 원시 타입을 사용하면 자바의 래퍼타입으로 컴파일 된다.
아레 예제에서, age 프로퍼티의 값은 java.lang.Integer 로 저장된다.