코틀린의 각 컬렉션 클래스들은 Mutable, Immutable 2가지가 존재한다.

최근 버전의 자바는 Immutable 컬렉션을 제공하지만, Mutable 컬렉션과 같은 인터페이스를 구현하고 있기 때문에, add와 같은 메소드들을 호출할 수 있고, 이는 실행시간에 예외를 발생시킨다.

코틀린은 Immutable 컬렉션의 연산이 불가능하다는 것을 실행시간에 알리지 않는다.

그래서 View가 존재한다.

  • List, Set, Map은 각각 뷰를 2개씩 가지고 있다. 
    • Mutable View - 읽기, 쓰기
    • Immutable View - 읽기 전용
  • mutable이든, immutable이든 자바의 기본 컬렉션에 매핑된다.
    • 쓰기, 읽기 제한을 하는 것은 코틀린 컴파일러의 역할이다.
    • 따라서 실행 시간에 오버헤드가 없다.
  • 예를들어, MutableList, List 컬렉션이 있다.
    • 둘 다 코틀린의 ArrayList에 매핑되지만, List를 사용할 때는 add같은 쓰기 연산을 할 수 없다. 

 

  • Immutable View가 스레드 안정성을 보장하지는 않는다.
    • immutable view가 참조하고 있는 컬렉션은 자바의 mutable 컬렉션이다.
      • 실제로 매핑된 컬렉션을 참조하는 다른 뷰가 변경할 수도 있다. 

 

'Programming > 언어' 카테고리의 다른 글

[Kotlin] Generics 공변성, 반공변성(out, in)  (0) 2023.02.26
[Kotlin] Data Class  (0) 2023.02.15
[Kotlin] Unit, Any, Nothing 클래스  (0) 2023.02.12
[Kotlin] 타입추론  (0) 2023.02.12
[Kotlin] 표현식과 명령문  (0) 2023.02.12

+ Recent posts