본문 바로가기

기타/안드로이드

22. Kotlin의 컬렉션

Kotlin의 컬렉션

Kotlin에서 컬렉션 사용  |  Android Developers

 

Kotlin에서 컬렉션 사용  |  Android Developers

목록, 세트, 맵을 비롯하여 배열 및 컬렉션을 사용하는 방법을 알아봅니다.

developer.android.com

위의 페이지를 참고하여 kotlin의 컬렉션에 대해 알아보자

 

개요

배열이나 벡터 같은 친구들을 data structure라고 하는데

kotlin에서는 이들을 콜렉션이라고 부른다

어떤 애들이 있는지 간단하게 살펴보자

 

1. Array

어느 언어에나 있어서 크게 설명할 필요 없는 배열이다

fun main() {
    val array1 = arrayOf(1, 2, 3, 4, 5)
    val array2 = Array(5, {0})
    println(array1[3])
    println(array2[3])

    val array3 = array1 + array2
    println(array3[3])
}

 

위와 같이 선언하고 참조한다

주목할 점은 +를 통해 두 배열을 합칠 수 있다는 것이다

 

 

 

2. List, Mutable List

리스트는 가변적인 배열정도로 생각하면 된다

새로운 항목을 추가하거나 삭제할 수 있고

그럴 때마다 전체 크기가 변한다

새로운 항목을 기존 항목의 사이에 끼워넣기도 가능하다

fun main() {
    val li = listOf("monday", "tuesday", "wednesday")
    val li2 = mutableListOf("monday", "tuesday", "wednesday")

    println(li.get(2))
    println(li.indexOf("tuesday"))
    println(li.size)
    for(day in li){
        println(day)
    }

    li2.add("thursday")
    li2.add(4, "friday")
    li2.remove("monday")
    li2.removeAt(0)
    for(day in li2){
        println(day)
    }
}

그냥 listOf로 만들어낸 리스트는 읽기 전용이고

리스트의 특징인 추가, 제거를 위해서는 mutableListOf를 이용해야 한다

 

참조, index값 가져오기, 크기, 반복문에서의 사용, 추가, 제거는 위에서 보는 바와 같다

 

 

3. Set

set은 한글로 집합이다

수학시간에 배운 집합을 기억한다면 이 컬렉션의 특징도 간단히 알 수 있을 것이다

중복되는 항목이 없어야 한다

또한 항목 추가 제거가 가능하다

 

제일 중요한 특징은 index가 아니라 해시값을 쓴다는 것이다

항목의 값을 해시함수에 넣으면 어떤 값이 나오는데 그게 바로 해시값이다

해시값은 왠만해서는 중복이 되지않으면서 항목의 값이 조금만 변해도 해시값은 엄청나게 변한다

이 해시의 특징을 이용해서 set를 구현한 것이다

 

이런 이론적인 내용은 이미 얼추 알고 있고 지금은 별 쓸모 없으니 여기까지 하고 넘어가자

fun main() {
    val s = setOf("monday", "tuesday", "wednesday")
    val s2 = mutableSetOf("monday", "tuesday", "wednesday")

    println(s.size)
    println("monday" in s)

    println(s2.size)
    s2.add("thursday")
    s2.add("monday")
    println(s2.size)
    s2.remove("monday")
    for(day in s2){
        println(day)
    }
}

list와 마찬가지로 mutableSetOf를 통해 가변적인 집합을 만들 수 있다

s2에 이미 있는 월요일을 추가하면 크기 변화가 없음에 주목하자

 

 

 

4. map

map은 키와 값이 쌍을 이뤄 하나의 항목이 된다

key-value pair라고 부르는 구조로

set인데 각 항목에 추가적인 꼬리표를 달았다고 생각하면 쉽다

fun main() {
    val map = mapOf(
        "monday" to 0,
        "tuesday" to 1,
        "wednesday" to 2
    )
    val map2 = mutableMapOf(
        "monday" to 0,
        "tuesday" to 1,
        "wednesday" to 2
    )

    println(map.size)
    println(map["monday"])
    println(map["thursday"])

    map2["thursday"] = 2
    map2.remove("monday")
    map2["tuesday"] = 0
    map2.put("wednesday", 1)
    for(day in map2){
        println(day)
    }
}

기본적인 사용방법은 위와 같다