Languages

kotlin의 null 가능성과 collection

!쪼렙조햄 2020. 5. 7. 11:31
반응형

6.3 컬렉션과 배열

6.3.1 널 가능성과 컬렉션

  • List<Int?>?
    • 널이 될 수 있는 값으로 이루어진 널이 될 수 있는 리스트
  • val validNumbers = numbers.filterNotNull()
    • filterNotNull 함수로 null 값들을 filter 햇다고 할때, valNumbers 값은 List 값이 될 수 있다

6.3.2 읽기 전용과 변경 가능한 컬렉션

  • kotlin 에서 컬렉션안의 데이터에 접근하는 인터페이스와, 컬렉션 안의 데이터를 변경하는 인터페이스를 분리
    • 접근하는 인터페이스 : kotlin.collections.Collection
      • size, iterator, contains 등의 메소드
    • 변경하는 인터페이스 : kotlin.collections.MutableCollection
      • MutableCollection은 기본 Collection 을 확장하면서 여러 메소드를 제공한다
      • add, remove, clear 등의 메소드
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
반응형