Android

[Android] 코틀린(Kotlin) 컬렉션(Collection)

구루싸 2020. 4. 28. 20:55
반응형
SMALL

하루만 더 일하면 6일간의 휴가가 찾아오는 즐거운 밤이네요-_-

요새 나이를 먹었는지 숙취가 하루 꼬박 가네요ㅜㅜ

코로나19의 영향으로 해외는 못나가서인지

제주도 호텔은 풀이라는 소문이...

한박자 빠르게 미리미리 준비해야

휴가도 제대로 즐길 수 있겠네요

오늘의 학습 주제는 코틀린의 컬렉션입니다

컬렉션은 연관된 값들을 모아서 저장하고

사용하는 방법을 제공하는 것을 말합니다

컬렉션에는 List, Set, Map 이렇게 세가지 종류가 있고

컬렉션에 저장된 각각의 데이터를 요소(element)라고 합니다

먼저 List에 대해 알아보겠습니다

val patronList: List<String> = listOf("Eli", "Mordoc", "Sophie")
val mutablePatronList: MutableList<String> = mutableListOf("Eli", "Mordoc", "Sophie")
val readOnlyPatronList = mutablePatronList.toList()

fun main(args: Array<String>) {
    println(patronList)
    println(patronList[1])
    println("First : ${patronList.first()} Last : ${patronList.last()} ")
    println(patronList.getOrElse(4) { "Unknown Patron" })
    val fifthPatron = patronList.getOrNull(4) ?: "Unknown Patron"
    println(fifthPatron)
    if ( patronList.contains("Eli") ) {
        println("The pub owner said: Eli is playing cards in the inner room")
    } else {
        println("The pub owner said: Eli is not here")
    }
    mutablePatronList.remove("Eli")
    mutablePatronList.add("Alex")
    mutablePatronList.add(2, "GuruSa")
    mutablePatronList[2] = "Guru"
    mutablePatronList += listOf("Shruti", "GuruSa")
    mutablePatronList -= listOf("Shruti", "GuruSa")
    mutablePatronList.removeIf { it.contains("o") }
    for ( patron in patronList ) {
        println("Good night, $patron")
    }
    patronList.forEach { patron ->
        println("Good night, $patron")
    }
    patronList.forEachIndexed { index, patron ->
        println("Good night, $patron - your number is ${index + 1}")
    }
}

이제 Set에 대해 알아보겠습니다

Set과 List는 둘 다 같은 반복 처리 함수를 사용하고

읽기 전용과 변경 가능 버전이 존재하는 등 여러 면에서 비슷합니다

다른 점은 List는 위치(index)로 식별하기 때문에 중복된 요소를 허용하지만

Set은 고유한 요소를 가지며 인덱스와 인덱스 연산자([])를 사용해서 요소를 처리할 수 없습니다

val planets = setOf("Mercury", "Venus", "Earth")
fun main(args: Array<String>) {
    println(planets)
    println(planets.contains("Pluto"))
    println(planets.elementAt(2))
}

Set은 인덱스 기반의 변경자 함수를 제공하지 않지만

요소의 추가와 삭제를 지원합니다

아래는 흔히 사용되는 MutableSet의 변경자 함수를 정리한 것입니다

함수 설명
add Set에 요소를 추가한다
addAll 다른 컬렉션의 모든 요소를 Set에 추가한다
+= Set에 요소를 추가한다
-= Set에서 요소를 제거한다
remove Set에서 요소를 제거한다
removeAll 다른 컬렉션의 모든 요소와 일치되는 요소를 Set에서 제거한다
clear Set의 모든 요소를 삭제한다

마지막으로 Map에 대해 알아보고 마치겠습니다

Map은 List나 Set과 다르게 키와 값의 쌍으로 데이터가 저장되며

이 데이터를 항목(entry)라고 합니다

하나의 Map에서 키의 모든 요소는 같은 타입이어야 하고

값의 모든 요소도 같은 타입이어야 하지만

키와 값은 서로 다른 타입이 될 수 있습니다

//val patronGold = mapOf("Eli" to 10.5, "Mordoc" to 8.0, "Sophie" to 5.5)
val patronGold = mapOf(
        Pair("Eli", 10.5),
        Pair("Mordoc", 8.0),
        Pair("Sophie", 5.5))
fun main(args: Array<String>) {
    println(patronGold)
    println(patronGold["Eli"])
    println(patronGold.getValue("Eli"))
    println(patronGold.getOrElse("Reggie") {
        "No Such patron"
    })
    println(patronGold.getOrDefault("Reginald", 0.0))
}

위의 코드에서 to가 보이는데 to는 키워드가 아니고

to 연산자를 오버로딩(overloading)한 것입니다

또 Pair 타입을 사용해서 나타낼 수도 있습니다

아래의 표는 Map에서 값을 가져오는 함수입니다

함수 설명
[] 키의 값을 가져오며, 키가 없으면 null을 반환한다
getValue 키의 값을 가져오며, 키가 없으면 NoSuchElementException을 발생시킨다
getOrElse 키의 값을 가져오거나, 또는 키가 없으면 지정된 익명 함수를 실행해서 결괏값을 반환한다
getOrDefault 키의 값을 가져오거나, 또는 키가 없으면 지정한 기본값을 반환한다

이제 변경 가능한 Map의 변경자 함수를 소개하겠습니다

함수 설명
[] 지정된 키의 값을 추가 또는 변경한다
+= 지정된 항목을 추가 또는 변경한다
put 지정된 키의 값을 추가 또는 변경한다
putAll 키와 값의 쌍으로 지정된 모든 항목을 추가한다
getOrPut 키가 없으면 항목을 추가하고 항목의 값을 반환하며, 있으면 기존 항목의 값을 반환한다
remove 지정된 키의 항목을 제거한다
- 지정된 키의 항목을 제외한 새로운 Map을 반환한다
-= 지정된 키의 항목을 제거한다
clear Map의 모든 항목을 제거한다

이것으로 오늘의 학습을 미차겠습니다

그럼 이만-_-

반응형
LIST