안드로이드/정리(Android)

(코틀린 kotlin) Mutable과 Imutable 유형 정리

김염인 2021. 12. 24. 12:30

Collection(콜렉션)은 대부분의 프로그래밍 언어에 있는 자료구조입니다. 자바의 List, Map, Set 등을 Collection이라고 합니다. Collection은 Generic으로 구현이 되어 다양한 타입과 함께 사용될 수 있습니다.

코틀린의 Collection은 기본적으로 Mutable(변할 수 없는)과 Immutable(불변의)을 별개로 지원합니다. Mutable로 생성하면 추가, 삭제가 가능하지만, Immutable로 생성하면 수정이 안됩니다.

 

컬렉션에는 일반적으로 동일한 유형의 여러 개체 (이 숫자는 0 일 수도 있음)가 포함됩니다. 컬렉션의 개체를 elements 또는 items 이라고 합니다

List: index로 elements에 접근가능한 정렬 된 컬렉션 입니다. 순서가 중요하며 elements은 중복이 허용됩니다.

Set: elements 중복 허용이 안되는 모음입니다. 순서는 중요하지 않습니다.

Map: key-value에 집합입니다. 키는 고유하며 각 키는 정확히 하나의 값에 매핑됩니다. 값은 중복 될 수 있습니다.

Collection 유형

Immutable: 컬렉션 요소에 액세스하기위한 작업을 제공 하는 읽기 전용 인터페이스입니다.

Mutable: 쓰기 작업(elements 추가, 삭제 및 변경)으로 해당 읽기 외에 확장 및 변경 가능한 인터페이스입니다

Mutable 컬렉션을 변경한다고해서 반드시 변경되는 것은 아닙니다 val에 컬렉션 을 재 할당하려고 하면 컴파일 오류가 발생합니다.

val numbers = mutableListOf("one", "two", "three", "four")
numbers.add("five")   // this is OK    
//numbers = mutableListOf("six", "seven")      // compilation error

다음은 Kotlin 컬렉션 인터페이스의 다이어그램입니다.

인터페이스 구현Permalink

ListPermalink

목록 elements(null 포함)는 중복 될 수 있습니다. 목록에는 동일한 개체 또는 단일 개체의 항목이 얼마든지 포함될 수 있습니다. 두 목록의 크기가 같고 동일한 위치에 구조적으로 동일한 요소 가 있으면 동일한 것으로 간주됩니다 .

Immutable: Kotlin의 List는 기본적으로 Immutable방식이며 get만 가능합니다.

val numbers = listOf("one", "two", "three", "four")
numbers[3]

Mutable: mutableListOf(), arrayListOf()가 있으며 추가, 삭제 및 변경이 가능합니다.

val numbers = mutableListOf(1, 2, 3, 4)
numbers.add(5)
numbers.removeAt(1)
numbers[0] = 0
numbers.shuffle()

SetPermalink

고유 한 요소를 저장합니다. 그들의 순서는 일반적으로 정의되지 않습니다. null요소도 고유합니다.

Immutable:

val numbers = setOf<Int>(1, 2, 3, 4, 5, 6)
numbers.size
numbers.contains(1)
numbers.isEmpty()
val empty = emptyList<String>() //Empty Collection

Mutable: mutableSetOf, hashSetOf, linkedSetOf, sortedSetOf 등의 함수가 있습니다.

val numbers = mutableSetOf<Int>(1, 2, 3, 4, 5, 6)
numbers.add(10)
numbers.remove(4)
numbers.removeIf({ it < 3 })

MapPermalink

Collection인터페이스의 상속자가 아닙니다. 그러나 Kotlin Collection 유형 이기도합니다. Map는 키-값 (또는 elements)을 저장 합니다. 키는 고유하지만 다른 키 들은 동일한 값으로 쌍을 이룰 수 있습니다.

Immutable:

val numbersMap = mapOf("key1" to 1, "key2" to 2, "key3" to 3, "key4" to 1)
if ("key2" in numbersMap)
if (1 in numbersMap.values)
numbersMap.containsValue(1)

Mutable: mutableMapOf, hashMapOf, linkedMapOf, sortedMapOf 등의 함수가 있습니다.

val numbersMap = mutableMapOf("one" to 1, "two" to 2)
numbersMap.put("three", 3)
numbersMap["one"] = 11