반응형
6.2 코틀린의 원시 타입
- 코틀린에서는 널이 될 수 있는지 여부를 타입 시스템에 추가함으로써 컴파일러가 컴파일 시 미리 감지하여 발생할 수 있는 예외의 가능성을 줄일 수 있다.
6.2.1 원시 타입: Int, Boolean 등
- Java에서 원시 타입과 참조 타입의 차이 : 변수가 직접 들어가는 지 / 메모리상의 객체 위치가 들어가는 지
- Integer는 래퍼 타입으로 메소드 등을 호출할 수 있다.
- Kotlin에서는 구분이 없고, 원시 타입에 대해 메소드를 호출할 수 있다.
- 대부분의 경우 자바 int 타입으로 컴파일 된다.
- 불가능할 경우 (컬렉션 사용 등) Integer 래퍼 타입으로 객체가 들어간다.
6.2.2 널이 될 수 있는 원시 타입: Int?, Boolean? 등
- 자바의 래퍼 타입으로 컴파일된다.
- 제네릭 클래스의 경우 래퍼타입을 사용한다.
val listOfInts = listOf(1, 2, 3)
- 이는 JVM에서 제네릭을 구현하는 방법 때문 : 원시 타입을 허용하지 않는다.
6.2.3 숫자 변환
- 숫자 자동 변환 불가
val i = 1 val l: Long = i.toLong()
- 타입이 다르면 equals 메서드는 false다.
val x = 1 println(x in listOf(1L, 2L, 3L)) // false
- 메서드 인자로 넘겨줄 때는 자동으로 타입변환 해준다.
fun foo(l: Long) = println(l)
foo(42) // 42를 Long으로 해석
val b: Byte = 1
val l = b + 1L // l 은 Long type
6.2.4 Any, Any?: 최상위 타입
- Any는 모든 널이 될 수 없는 타입의 조상 타입 (원시 타입 포함) → 자바 바이트 코드의 Object로 컴파일된다.
6.2.5 Unit 타입: 코틀린의 void
- 반환하지 않는 함수
fun f(): Unit {...}
fun f() { // return Unit by Kotlin compiler }
- 이는 제네릭을 사용할 때 유리하다.
interface Processor<T> { fun process(): T }
class NoResultProcessor : Processor<Unit> {
override fun process() { }
}
6.2.6 Nothing 타입: 이 함수는 결코 정상적으로 끝나지 않는다
- 반한 값이라는 개념 자체라 의미 없는 함수에서 사용된다.
fun fail(message: String): Nothing {
throw IllegalStateException(message)
}
val address = company.address ?: fail("No Address")
- 결코 정상 종료되지 않는다.
반응형
'책정리 > Kotlin in Action' 카테고리의 다른 글
[Kotlin in Action] 애노테이션과 리플렉션 (0) | 2021.11.23 |
---|---|
[Kotlin in Action] 컬렉션과 배열, (MutableCollection, 자바와의 관계) (0) | 2021.10.21 |
[Kotlin] 클래스와 프로퍼티, Enum 클래스 - Java와 비교하기 (0) | 2021.09.02 |
[Kotlin] 함수와 변수 - Java와 비교하기 (0) | 2021.09.02 |
[Kotlin] 코틀린이란? 왜 코틀린을 사용할까? (0) | 2021.08.27 |