리스트, 세트, 맵 - swkim0128/PARA GitHub Wiki

코틀린에서 리스트(List), 세트(Set), **맵(Map)**은 대표적인 컬렉션(Collection) 자료구조입니다. 각각 데이터를 저장하고 조작하는 다양한 방법을 제공합니다.

1. 리스트 (List)

리스트는 순서가 있는 요소들의 집합이며, 같은 요소를 중복 저장할 수 있습니다.

1.1 리스트 생성

val list1 = listOf("Apple", "Banana", "Cherry") // 불변 리스트 (읽기 전용)
val list2 = mutableListOf("Dog", "Cat", "Horse") // 가변 리스트 (요소 추가 가능)

1.2 리스트 요소 접근

fun main() {
    val fruits = listOf("Apple", "Banana", "Cherry")

    println(fruits[0]) // 출력: Apple
    println(fruits.get(1)) // 출력: Banana
    println(fruits.size) // 출력: 3
}

1.3 리스트 수정 (MutableList)

fun main() {
    val animals = mutableListOf("Dog", "Cat", "Horse")

    animals.add("Elephant") // 요소 추가
    animals.remove("Cat") // 요소 삭제
    animals[0] = "Tiger" // 값 변경

    println(animals) // 출력: [Tiger, Horse, Elephant]
}

1.4 리스트 반복

fun main() {
    val numbers = listOf(10, 20, 30)

    for (num in numbers) {
        println(num)
    }

    numbers.forEach { println(it) }
}

1.5 리스트 필터링 및 변환

fun main() {
    val numbers = listOf(1, 2, 3, 4, 5)

    val evenNumbers = numbers.filter { it % 2 == 0 }
    println(evenNumbers) // 출력: [2, 4]

    val squaredNumbers = numbers.map { it * it }
    println(squaredNumbers) // 출력: [1, 4, 9, 16, 25]
}

2. 세트 (Set)

세트는 중복을 허용하지 않는 컬렉션으로, 요소의 순서를 보장하지 않습니다.

2.1 세트 생성

val set1 = setOf("Apple", "Banana", "Cherry") // 불변 세트
val set2 = mutableSetOf("Dog", "Cat", "Horse") // 가변 세트

2.2 세트의 주요 기능

fun main() {
    val fruits = mutableSetOf("Apple", "Banana", "Cherry")

    fruits.add("Banana") // 중복 요소 추가 시 무시됨
    fruits.add("Orange")
    fruits.remove("Cherry")

    println(fruits) // 출력: [Apple, Banana, Orange]
}

2.3 세트에서 요소 검색

fun main() {
    val colors = setOf("Red", "Green", "Blue")

    println("Green" in colors) // 출력: true
    println(colors.contains("Yellow")) // 출력: false
}

2.4 세트 연산

fun main() {
    val setA = setOf(1, 2, 3, 4, 5)
    val setB = setOf(3, 4, 5, 6, 7)

    println(setA union setB) // 합집합: [1, 2, 3, 4, 5, 6, 7]
    println(setA intersect setB) // 교집합: [3, 4, 5]
    println(setA subtract setB) // 차집합: [1, 2]
}

3. 맵 (Map)

맵은 키(Key)와 값(Value)의 쌍으로 이루어진 컬렉션입니다.

3.1 맵 생성

val map1 = mapOf(1 to "Apple", 2 to "Banana", 3 to "Cherry") // 불변 맵
val map2 = mutableMapOf("name" to "John", "age" to 30) // 가변 맵

3.2 맵 요소 접근

fun main() {
    val users = mapOf("Alice" to 25, "Bob" to 30)

    println(users["Alice"]) // 출력: 25
    println(users.getOrDefault("Charlie", 0)) // 출력: 0
}

3.3 맵 수정 (MutableMap)

fun main() {
    val scores = mutableMapOf("Math" to 90, "Science" to 85)

    scores["English"] = 88 // 요소 추가
    scores.remove("Science") // 요소 삭제
    scores["Math"] = 95 // 값 변경

    println(scores) // 출력: {Math=95, English=88}
}

3.4 맵 반복

fun main() {
    val users = mapOf("Alice" to 25, "Bob" to 30)

    for ((key, value) in users) {
        println("$key의 나이: $value")
    }

    users.forEach { (key, value) -> println("$key: $value") }
}

3.5 맵 필터링

fun main() {
    val users = mapOf("Alice" to 25, "Bob" to 30, "Charlie" to 22)

    val filteredUsers = users.filter { it.value >= 25 }
    println(filteredUsers) // 출력: {Alice=25, Bob=30}
}

4. 리스트(List), 세트(Set), 맵(Map) 비교

컬렉션 특징 중복 허용 순서 유지
List 순서가 있는 요소 집합 ✅ 허용 ✅ 유지
Set 중복을 허용하지 않는 집합 ❌ 불허 ❌ 유지되지 않을 수 있음
Map 키-값 쌍으로 저장 키는 중복 ❌, 값은 중복 ✅ 키 기반 접근

5. 요약

기능 List Set Map
선언 방식 listOf(), mutableListOf() setOf(), mutableSetOf() mapOf(), mutableMapOf()
요소 접근 list[index] set.contains(value) map[key]
수정 가능 여부 mutableListOf() 사용 시 가능 mutableSetOf() 사용 시 가능 mutableMapOf() 사용 시 가능
중복 허용 여부 ✅ 허용 ❌ 불허 키 ❌, 값 ✅

코틀린의 컬렉션(List, Set, Map)은 안전하고 간결한 코드를 작성할 수 있도록 다양한 기능을 제공합니다. 각 컬렉션의 특성을 이해하고 적절한 상황에 맞게 활용하면 효율적인 데이터 처리가 가능합니다! 🚀

⚠️ **GitHub.com Fallback** ⚠️