728x90
반응형
코틀린은 원시 타입/래퍼 타입을 구분하지 않는다.
- Int, Boolean 등등
- 코틀린은 자바와 달리 원시타입과 래퍼타입이 따로 존재하지 않는다.
var list: List<Int> = listOf(1, 2, 3)
- 코틀린에서 모든 타입이 참조 타입으로 표현되는 것이 아니라, 실행 시점에 가능한
가장 효율적인 방식
으로 타입이 표현된다.- 대부분의 경우 코틀린의 Int타입은 자바 int 타입으로 컴파일 된다.
- 컴파일이 불가능한 경우(제네릭 클래스)만 래퍼 타입(Integer)로 컴파일되게 된다.
- Int를 컬렉션의 타입 파라미터로 넘길 때, Integer객체가 들어가게 된다.
널이 될 수 있는 타입
- Int?, Boolean?
- 코틀린에서 널이 될 수 있는 원시 타입을 사용하면, 자바의 래퍼 타입으로 컴파일 된다.
- 자바의 래퍼 타입은 null이 될 수 있음으로, 코틀린에서의 널이 될 수 있는 타입은 자바의 래퍼타입과 같다.
코틀린은 모든 원시 타입에 대한 변환 함수를 제공한다.(숫자 타입 변환)
- 코틀린은 자바와 달리 한 타입의 숫자를 다른 타입의 숫자로 자동 형 변환이 되지 않는다.
- 결과 타입이 허용하는 숫자의 범위가 원래 타입보다 넓어도 자동 변환이 불가능하다.
- 모든 원시 타입에 대한 변환 함수를 제공
val i = 1
val l: Long = i (x, Error: type mismatch)
val l: Long = i.toLong() (o)
코틀린의 특별한 타입
- Any, Any?: 최상위 타입
- 자바의 Object와 마찬가지로 코틀린에서는 Any타입이 널이 될 수 없는 타입의 조상 타입이다.
- Unit: 코틀린의 void
- 자바의 void와 같음
- Unit은 void와 달리 타입 인자로 사용할 수 있다.
interface Processor<T> {
fun process(): T
}
class NoResultProcessor : Processor<Unit> {
override fun process() {
// return을 명시할 필요가 없다. 컴파일러가 묵시적으로 return Unit을 넣어줌
}
}
- Nothing
- 함수가 정상적으로 끝나지 않는다는 뜻으로 Noting이라는 특별한 반환타입이 존재
fun fail(message: String): Nothing {
throw IllegalStateException(message)
}
널 가능성과 컬렉션
- List<Int?>
- 리스트 자체는 항상 널이 아니다.
- 각 원소는 널이 될 수 있다.
- List<Int>?
- 리스트를 가리키는 변수에는 널이 들어갈 수 있음
- 리스트 안에는 널이 아닌 값만 들어간다.
코틀린에서 읽기 전용/변경 가능한 컬렉션
- 코틀린에서는
컬렉션 안의 데이터에 접근하는 인터페이스
와컬렉션 안의 데이터를 변경하는 인터페이스
를 분리했다.- kotlin.collections.Collection
- 데이터를 읽는 연산만 존재
- listOf, setOf, mapOf
- kotlin.collections.MutableCollection (Collection 인터페이스 확장)
- 원소 추가, 삭제 등 메서드를 더 제공
- 원본의 변경을 막기 위해 컬렉션을 복사해서 사용하는 것을 권장
- mutableListOf, arrayListOf, mutableSetOf, hashSetOf, hashMapOf
객체의 배열과 원시 타입의 배열
- kotlin.collections.Collection
- Array<Int> -> java.lang.Integer[] (toIntArray를 사용하면 박싱하지 않은 값들 반환)
- 원시 타입 배열은 IntArray, ByteArray, CharArray를 사용해야 함
val fiveZeros = IntArray(5)
val fiveZerosToo = intArrayOf(0, 0, 0, 0, 0)
val squares = IntArray(5) { i -> (i+1) * (i+1) }
728x90
반응형
'프로그래밍 노트 > Kotlin' 카테고리의 다른 글
[Kotlin] 컬렉션과 범위에서 사용할 수 있는 관례 정리 (0) | 2023.06.29 |
---|---|
[Kotlin] 산술/비교 연산자 오버로딩 (0) | 2023.06.29 |
[kotlin] 코틀린 타입 시스템 (0) | 2023.03.25 |
[Kotlin] 널이 될 수 있는 타입, 안전한 호출 연산자(?.) (0) | 2020.12.15 |
[Kotlin] 수신 객체 지정 람다: with와 apply (0) | 2020.12.14 |