독서관련/Kotlin in Action

CH06 코틀린 primative 타입

ColinKang 2021. 1. 11. 22:17
아래의 글은 드미트리 제메로프, 스베트라나 이사코바 저/오현석역,『Kotlin in Action』,에이콘출판사(2017)의 내용을 기반으로 작성하였습니다. 

 

코틀린은 자바의 primative type을 사용할 수 없다. wrapper type만 사용한다.

그렇다면 항상 객체 타입만 사용한다는 것인데 계산일 경우 비효율 아닌가 > 실행 시점에 코틀린의 타입은 가장 효율적인 방식으로 표현한다. 대부분의 Int타입은 int 타입으로 컴파일 함. 이런 컴파일이 불가능한 경우는 collection들의 generic을 사용하는 경우. primative type은 null을 가질 수 없는데, Int?이면 이건 null을 허용한다는 의미인데 이러한 경우에는 컴파일시 int로 컴파일 하지 않는다. 코틀린은 큰숫자로 자동 변환 하지 않는다 ( Int -> Long ). 명시적으로 변환해야한다. val l : Long = i.toLong()

 

java의 primative type으로 매핑될 수 있는 타입

정수 : Byte, Short, Int, Long

부동소수점 수 : Float, Double

문자 : Char

불리언 : Boolean

 

원시 타입 리터럴

L접미사가 붙은 Long 타입 리터럴 : 123L

표준 부동소수점 표기법을 사용한 Double 타입 리터럴 : 0.12, 2.0, 1.2e10, 1.2e-10

f나 F 접미사가 붙은 Float 타입 리터럴 : 123.4f, .456F, 1e3F

0x나 0X 접두사가 붙은 16진 리터럴 : 0xCAFEBABE, 0xbcdL

0b나 0B 접두사가 붙은 2진 리터럴 : 0b000000101

숫자 중간에 _를 붙일 수 있음 1_234L

 

특별한 타입 :

Any, Unit, Nothing

Any : 최상위 타입, Any는 널이 될 수 없음

Unit : void 타입, 함수형 프로그래밍에서 Unit은 단 하나의 인스턴스만 갖는 타입을 의미

Nothing : 

interface Processor<T> {
	fun process(): T
}

class NoResultProcessor : Processor<Unit> {
	override fun process() {
    }
}

fun fail(messsage: String) : Nothing {
	throw IllegalStateException(message)
}

val address = company.address ?: fail("No address")