본문 바로가기

언어/Kotlin

[ 코틀린 / Kotlin ] 따라하면서 컬렉션 데이터 타입에 대해서 이해하자.

반응형

 

 

Kotlin에서 컬렉션 타입(Collection Types)은 데이터를 구조화하고 관리하는 데 사용됩니다. Kotlin은 다양한 컬렉션 타입을 제공하며, 이들은 크게 읽기 전용변경 가능한 컬렉션으로 나뉩니다. 주요 컬렉션 타입에는 리스트(List), 셋(Set), 맵(Map)이 있습니다. 각 타입은 특정한 데이터 관리 요구 사항을 충족합니다.

아래에서는 각 컬렉션 타입의 사용 예제를 통해 자세히 설명하겠습니다.

1. 리스트 (Lists)

리스트는 순서가 있는 요소들의 집합입니다. Kotlin에서는 읽기 전용 리스트변경 가능한 리스트를 지원합니다.

읽기 전용 리스트 (Read-only List)

  • 읽기 전용 리스트는 요소를 추가하거나 제거할 수 없습니다.
  • listOf() 함수를 사용하여 생성합니다.
fun main() {
    val readOnlyList: List<String> = listOf("Kotlin", "Java", "Python")

    // 리스트의 요소 접근
    println(readOnlyList[0])  // 출력: Kotlin
    println(readOnlyList.get(1))  // 출력: Java

    // 리스트의 길이
    println(readOnlyList.size)  // 출력: 3

    // 리스트의 순회
    for (item in readOnlyList) {
        println(item)
    }
    // 출력:
    // Kotlin
    // Java
    // Python

    // 요소가 포함되어 있는지 확인
    println("Java" in readOnlyList)  // 출력: true
}

변경 가능한 리스트 (Mutable List)

  • 변경 가능한 리스트는 요소를 추가하거나 제거할 수 있습니다.
  • mutableListOf() 함수를 사용하여 생성합니다.
fun main() {
    val mutableList: MutableList<String> = mutableListOf("Kotlin", "Java", "Python")

    // 요소 추가
    mutableList.add("C++")
    println(mutableList)  // 출력: [Kotlin, Java, Python, C++]

    // 특정 위치에 요소 추가
    mutableList.add(1, "JavaScript")
    println(mutableList)  // 출력: [Kotlin, JavaScript, Java, Python, C++]

    // 요소 제거
    mutableList.remove("Java")
    println(mutableList)  // 출력: [Kotlin, JavaScript, Python, C++]

    // 특정 위치의 요소 제거
    mutableList.removeAt(2)
    println(mutableList)  // 출력: [Kotlin, JavaScript, C++]

    // 요소 수정
    mutableList[1] = "TypeScript"
    println(mutableList)  // 출력: [Kotlin, TypeScript, C++]
}

2. 셋 (Sets)

셋은 중복을 허용하지 않는 고유한 요소들의 집합입니다. Kotlin에서는 읽기 전용 셋변경 가능한 셋을 지원합니다.

읽기 전용 셋 (Read-only Set)

  • 읽기 전용 셋은 요소를 추가하거나 제거할 수 없습니다.
  • setOf() 함수를 사용하여 생성합니다.
fun main() {
    val readOnlySet: Set<String> = setOf("Kotlin", "Java", "Python")

    // 셋의 요소 접근 (순서가 보장되지 않음)
    println(readOnlySet.contains("Java"))  // 출력: true

    // 셋의 크기
    println(readOnlySet.size)  // 출력: 3

    // 셋의 순회
    for (item in readOnlySet) {
        println(item)
    }
    // 출력 (순서가 보장되지 않음):
    // Kotlin
    // Java
    // Python
}

변경 가능한 셋 (Mutable Set)

  • 변경 가능한 셋은 요소를 추가하거나 제거할 수 있습니다.
  • mutableSetOf() 함수를 사용하여 생성합니다.
fun main() {
    val mutableSet: MutableSet<String> = mutableSetOf("Kotlin", "Java", "Python")

    // 요소 추가
    mutableSet.add("C++")
    println(mutableSet)  // 출력: [Kotlin, Java, Python, C++]

    // 중복 요소 추가 시도 (셋이므로 중복되지 않음)
    mutableSet.add("Java")
    println(mutableSet)  // 출력: [Kotlin, Java, Python, C++]

    // 요소 제거
    mutableSet.remove("Python")
    println(mutableSet)  // 출력: [Kotlin, Java, C++]

    // 요소 확인
    println(mutableSet.contains("Kotlin"))  // 출력: true
}

3. 맵 (Maps)

맵은 키-값 쌍(key-value pair)을 저장하는 컬렉션입니다. 각 키는 고유하며, 각 키에 대해 하나의 값이 매핑됩니다. Kotlin에서는 읽기 전용 맵변경 가능한 맵을 지원합니다.

읽기 전용 맵 (Read-only Map)

  • 읽기 전용 맵은 키-값 쌍을 추가하거나 제거할 수 없습니다.
  • mapOf() 함수를 사용하여 생성합니다.
fun main() {
    val readOnlyMap: Map<String, Int> = mapOf("Kotlin" to 1, "Java" to 2, "Python" to 3)

    // 키를 사용하여 값 접근
    println(readOnlyMap["Kotlin"])  // 출력: 1

    // 맵의 크기
    println(readOnlyMap.size)  // 출력: 3

    // 모든 키와 값의 순회
    for ((key, value) in readOnlyMap) {
        println("$key -> $value")
    }
    // 출력:
    // Kotlin -> 1
    // Java -> 2
    // Python -> 3
}

변경 가능한 맵 (Mutable Map)

  • 변경 가능한 맵은 키-값 쌍을 추가하거나 제거할 수 있습니다.
  • mutableMapOf() 함수를 사용하여 생성합니다.
fun main() {
    val mutableMap: MutableMap<String, Int> = mutableMapOf("Kotlin" to 1, "Java" to 2)

    // 키-값 쌍 추가
    mutableMap["Python"] = 3
    println(mutableMap)  // 출력: {Kotlin=1, Java=2, Python=3}

    // 특정 키의 값 수정
    mutableMap["Java"] = 10
    println(mutableMap)  // 출력: {Kotlin=1, Java=10, Python=3}

    // 키-값 쌍 제거
    mutableMap.remove("Kotlin")
    println(mutableMap)  // 출력: {Java=10, Python=3}

    // 특정 키의 값 접근
    println(mutableMap["Python"])  // 출력: 3
}

요약

Kotlin의 컬렉션 타입은 데이터를 효율적으로 관리하고 조작할 수 있는 강력한 도구를 제공합니다. 각 컬렉션 타입은 읽기 전용과 변경 가능한 버전으로 나뉘며, 이는 코드의 의도를 명확히 하고 데이터의 안전성을 보장합니다. Kotlin의 리스트, 셋, 맵을 사용하면 데이터 구조를 쉽게 정의하고 필요한 연산을 간편하게 수행할 수 있습니다.

반응형