반응형
많은 언어와 달리, 코틀린은 변경 가능한 콜렉션과 변경 불가능한 콜렉션 (List, Set, Map 등)을 구별합니다. 컬렉션을 수정 할 수있는 정확한 시간을 제어하면 버그를 제거하고 좋은 API를 설계하는 데 유용합니다.
변경 가능 콜렉션의 읽기 전용 뷰 와 실제로 변경 불가능한 콜렉션 간의 차이점을 이해하는 것이 중요합니다 . 둘 다 쉽게 만들 수 있지만 타입 시스템은 차이를 표현하지 않으므로 관련성이있는 경우 해당 내용을 추적하는 것이 당신에게 달려 있습니다.
코틀린의 List<out T>타입은 size, get과 같은 읽기 전용 등의 작업을 제공하는 인터페이스입니다. 자바에서와 마찬가지로, Iterable<T>를 상속한 Collection<T>을 상속
val numbers: MutableList = mutableListOf(1, 2, 3)
val readOnlyView: List = numbers
println(numbers) // prints "[1, 2, 3]"
numbers.add(4)
println(readOnlyView) // prints "[1, 2, 3, 4]"
readOnlyView.clear() // -> does not compile
val strings = hashSetOf("a", "b", "c", "c")
assert(strings.size == 3)
코틀린은 List 또는 Set를 생성하기위한 전용 구문 구조를 가지고 있지 않습니다. 표준 라이브러리의 메소드 (예 : listOf(),, mutableListOf()) setOf()를 사용하십시오. 성능이 중요하지 않은 코드에서는 간단한 이디엄 인 mapOf(a to b, c to d)를 사용해서 맵을 생성 할수 있습니다..
참고로 이 readOnlyView같은 List과 기본 List 변경 등의 변화에 변수가 가리키는. List에 존재하는 유일한 참조가 읽기 전용이면 해당 컬렉션을 완전히 변경할 수 없다고 간주 할 수 있습니다. 이러한 컬렉션을 만드는 간단한 방법은 다음과 같습니다.
val items = listOf(1, 2, 3)
현재 listOf메소드는 배열리스트를 사용하여 구현되지만 미래에 메모리가 변경되지 않는 완전히 불변 인 콜렉션 타입이 반환 될 수 있으므로 변경이 불가능하다는 사실을 악용 할 수 있습니다.
읽기 전용 유형은 공변 입니다. 그 말은, List<Rectangle>class Controller {
private val _items = mutableListOf()
val items: List get() = _items.toList()
}
toList확장 메서드는 따라서 반환 된 List을 변경하지 않을 보장, List 항목을 복제합니다.
익숙한 가치가있는 List 및 Set에는 다양한 유용한 확장 방법이 있습니다.
val items = listOf(1, 2, 3, 4)
items.first() == 1
items.last() == 4
items.filter { it % 2 == 0 } // returns [2, 4]
val rwList = mutableListOf(1, 2, 3)
rwList.requireNoNulls() // returns [1, 2, 3]
if (rwList.none { it > 6 }) println("No items above 6") // prints "No items above 6"
val item = rwList.firstOrNull()
뿐만 아니라 정렬, 압축, 축소, 축소 등과 같은 모든 유틸리티를 기대할 수 있습니다.
지도는 동일한 패턴을 따릅니다. 다음과 같이 쉽게 인스턴스화하고 액세스 할 수 있습니다.
val readWriteMap = hashMapOf("foo" to 1, "bar" to 2)
println(readWriteMap["foo"]) // prints "1"
val snapshot: Map = HashMap(readWriteMap)
반응형
'프로그래밍 > kotlin' 카테고리의 다른 글
코틀린 - 함수 (0) | 2021.04.18 |
---|---|
코틀린 - 고차 함수와 람다 (0) | 2021.04.18 |
코틀린 - 인라인 함수 (0) | 2021.04.18 |
코틀린 - 코루틴 (0) | 2021.04.18 |
코틀린 - 분리 선언 (0) | 2021.04.18 |