반응형
6.3 컬렉션과 배열
6.3.1 널 가능성과 컬렉션
- List<Int?>?
- 널이 될 수 있는 값으로 이루어진 널이 될 수 있는 리스트
val validNumbers = numbers.filterNotNull()
- filterNotNull 함수로 null 값들을 filter 햇다고 할때, valNumbers 값은 List
값이 될 수 있다
- filterNotNull 함수로 null 값들을 filter 햇다고 할때, valNumbers 값은 List
6.3.2 읽기 전용과 변경 가능한 컬렉션
- kotlin 에서 컬렉션안의 데이터에 접근하는 인터페이스와, 컬렉션 안의 데이터를 변경하는 인터페이스를 분리
- 접근하는 인터페이스 : kotlin.collections.Collection
- size, iterator, contains 등의 메소드
- 변경하는 인터페이스 : kotlin.collections.MutableCollection
- MutableCollection은 기본 Collection 을 확장하면서 여러 메소드를 제공한다
- add, remove, clear 등의 메소드
- 접근하는 인터페이스 : kotlin.collections.Collection
fun <T> copyElements(source : Collection<T>, target : MutableCollection<T>){
for(item in source){
target.add(item)
}
}
val source = Collction<Int> = arrayListOf(3,5,7)
val target = MutableCollection<Int> = arrayLisTOf(1)
copyElements(source, target)
- target에는 읽기 전용 컬렉션을 넘길 수 없다
- 읽기 전용 컬렉션도 변경 가능한 컬렉션일 수 있다
- 같은 인스턴스를 다른 타입의 참조들이 가리킬 수 있다
- List와 MutableList가 동시에 가리키는 경우
- 컬렉션을 사용하는 도중에 다른 컬렉션이 값을 변경해 버릴 수 있다
- 항상 thread safe 하지 않다
6.3.3 코틀린 컬렉션과 자바
- 모든 코틀린 컬렉션은 그에 상응하는 자바 컬렉션 인터페이스의 인스턴스이다
- 변환 과정 필요 없음
- List
- 읽기 전용 : ListOf
- 변경 가능 타입 : mutableListOf, arrayListOf
- Set
- 읽기 전용 : setOf
- 변경 가능 타입 : mutalbeSetOf, hashSetOf, linkedSetOf, sortedSetOf
6.3.4 컬렉션을 플랫폼 타입으로 다루기
- java에서 작성된 타입을 kotlin에서는 플랫폼 타입으로 본다
- 플랫폼 타입의 경우 null 관련 정보가 없다
- 컴파일러는 null 될 수 있는 타입, null이 될 수 있는 타입 양쪽으로 모두 사용할 수 있게 허용한다v
반응형
'Languages' 카테고리의 다른 글
kotlin 의 비교 연산자 오버로딩 (equals, compareTo) (0) | 2020.05.18 |
---|---|
kotlin 산술 연산자 오버로딩 (+, - *) (0) | 2020.05.18 |
kotlin의 원시타입 (int, boolean, any) (0) | 2020.05.07 |
kotlin의 null 가능성 (?. ?: !!) (0) | 2020.05.07 |
kotlin의 수신객체 지정 람다 (with, apply) (0) | 2020.04.26 |