본문 바로가기
Android/Kotlin

[Kotlin] Collections(List, Set, Map)

by Dani K 2021. 10. 24.

Collection(콜렉션)은 대부분의 프로그래밍 언어에 있는 자료구조이다.

코틀린의 Collection(List, Set, Map)을 살펴보자.

 

Collection Types

코틀린의 Collection은 기본적으로 Mutable(변할 수 없는)과 Immutable(불변의)을 별개로 지원한다.

Mutable로 생성하면 추가, 삭제가 가능하지만, Immutable로 생성하면 수정이 불가하다.

 

Immutable (불변)

Read-Only 읽기 전용 Collection (수정, 추가, 삭제 불가)

 

Mutable (가변)

Write+Read 읽기/쓰기 Collection으로 add, put, remove 등이 가능

 

 

코틀린의 콜렉션들은 아래 그림과 같은 상속 구조 갖고 있다.

 

 

(출처: kotlinlang.com)

 

List

List는 데이터가 저장하거나 삭제될 때 순서를 지키는 Collection이다.

index로 값에 접근하는 순서를 지키며, 같은 값이 중복으로 저장될 수 있다.

List는 Mutable(변할 수 없는)과 Immutable(불변의)을 모두 지원한다.

 

 

Immutable List (읽기 전용)

listOf<type>(item, item, ...)로 Immutable List를 생성 및 초기화를 할 수 있다.

코틀린은 아이템의 타입을 추론하기 때문에 타입을 생략해도 된다.

 

val foods = listOf<String>("김밥", "라면", "김치")

//타입추론으로 <String> 생략 가능
val foods = listOf("김밥", "라면", "김치")

 

Mutable List (수정 가능)

수정 가능한 List는 mutableListOf로 선언한다.

 

val colors = mutableListOf("빨강","초록","파랑")
//추가
colors.add("노랑")
//삭제
colors.removeAt(1)
//수정
colors.set(0, "보라")

 

이외에도 replace, replaceAll, contains, forEach 등의 메소드도 지원한다.

 

Set

Set은 동일한 아이템이 없는 Collection이다.

Set의 아이템들의 index(순서)는 특별히 정해져 있지 않고, 같은 값이 중복되지 않는다.

Set은 null 객체를 갖고 있을 수 있다.

동일한 객체는 추가될 수 없기 때문에 null도 1개만 가질 수 있다.

List와 같이 Set도 Immutable과 Mutable을 별개로 지원한다.

 

 

Immutable Set (읽기 전용)

setOf<type>(item, item, ...)로 객체를 생성할 수 있다.

 

val foods = setOf("김밥", "김치", "파전")

 

Mutable Set (수정 가능)

Mutable은 mutableSetOf<type>(item, item, ...) 로 생성할 수 있다.

List와 비슷한 메소드들을 지원한다.

 

val foods = mutableSetOf("김밥", "김치", "파전")
//추가
foods.add("라면")
//삭제
foods.remove("김치")
//집합의 크기
println(foods.size) //3
//집합 여부
println(foods.contains("김밥")) //true

 

Map

Map은 key와 value를 짝지어 값을 저장하는 Collection이다.

Map의 key는 유일하기 때문에 동일한 이름의 key는 허용되지 않는다.

Map 또한 Immutable과 Mutable을 별개로 지원한다.

 

 

Immutable Map (읽기 전용)

mapOf<key type, value type>(item)로 생성할 수 있다.

아이템은 Pair 객체로 표현하며, Pair에 key와 value를 넣을 수 있습니다. 

Pair는 to라는 inifx 함수를 이용하여 A to B로 간단히 표현이 가능하다.

 

val menu = mapOf<String, int>("공기밥" to 1000, "김치찌개" to 8000)
//or
val menu = mapOf("공기밥" to 1000, "김치찌개" to 8000)

 

Mutable Map (수정 가능)

Mutable은 mutableMapOf<key type, value type>(item)로 생성한다.

 

val menu = mutableMapOf("공기밥" to 1000, "김치찌개" to 8000)
//추가 
map.put("두루치기", 9000)
// or 
map["두루치기"] = 9000
//삭제 
map.remove("공기밥") 
//수정 
map.replace("김치찌개", 9000) 
//전체삭제 
map.clear()

 

Reference

https://kotlinlang.org/docs/collections-overview.html

https://codechacha.com/ko/collections-in-kotlin/

 

 

댓글