Kotlin 문법 - 컬렉션 기본 문법( List, Set, Map)

느린달팽이·2025년 10월 16일

코틀린 복습

목록 보기
24/25

Kotlin 문법 - 컬렉션 기본 문법( List, Set, Map)

Kotlin 컬렉션은 List / Set / Map으로 나뉘며, 각각 읽기 전용가변 형태가 있다.

  • 읽기 전용: List<T>, Set<T>, Map<K, V>
  • 가변: MutableList<T>, MutableSet<T>, MutableMap<K, V>

읽기 전용은 인터페이스 제약일 뿐, 객체가 절대 변하지 않는다는 의미의 “진짜 불변”을 보장하지 않는다.


1) List / MutableList

  • List: 순서가 있는 목록, 추가·삭제 불가
  • MutableList: 순서가 있는 목록, 추가·삭제 가능
val l: List<Int> = listOf(1, 2, 3)
val m: MutableList<Int> = mutableListOf(1, 2, 3)

println(l[0])   // 인덱스 접근
println(m.size) // 크기 조회

m.add(4)
m.remove(2)
println(m)      // [1, 3, 4]

ArrayList 참고

  • ArrayList<T>는 구현체 이름이다.
  • JVM에서 mutableListOf()는 보통 ArrayList 기반으로 생성된다.
val a: ArrayList<String> = arrayListOf("A", "B")
val b: MutableList<String> = mutableListOf("A", "B")

2) LinkedList

  • 노드들이 포인터로 연결된 연결 리스트 개념의 컬렉션
  • Kotlin 표준 팩토리는 없으며 JVM에선 java.util.LinkedList를 직접 사용
val ll = java.util.LinkedList<Int>()
ll.addFirst(10)
ll.addLast(20)
println(ll) // [10, 20]

3) Set / MutableSet

  • 중복 없는 집합
val s: Set<Int> = setOf(1, 2, 2, 3) // {1, 2, 3}
val ms: MutableSet<Int> = mutableSetOf(1, 2)
ms.add(2)  // 변화 없음
ms.add(3)  // {1, 2, 3}

자주 쓰는 구현체

  • HashSet : 일반 집합
  • LinkedHashSet : 삽입 순서 유지
  • TreeSet : 항상 정렬 상태 유지
val sorted = sortedSetOf(3, 1, 2) // TreeSet 기반
println(sorted) // [1, 2, 3]

4) Map / MutableMap

  • Key → Value 쌍을 보관, Key 중복 시 덮어씀
val m1: Map<String, Int> = mapOf("A" to 1, "B" to 2)
val m2: MutableMap<String, Int> = mutableMapOf("A" to 1)

m2["B"] = 2         // 추가/수정
println(m2["A"])    // 조회
m2.remove("A")      // 삭제

자주 쓰는 구현체

  • HashMap : 일반 맵
  • LinkedHashMap : 삽입 순서 유지
  • TreeMap : Key 기준 정렬 유지
val sortedMap = sortedMapOf(2 to "two", 1 to "one")
println(sortedMap) // {1=one, 2=two}

5) 정렬 유지 컬렉션

항상 정렬 규칙을 유지해야 할 때 TreeSetTreeMap을 사용한다. 요소의 자연 순서나 Comparator로 기준을 지정한다.

data class Item(val name: String, val price: Int)

val byPrice = java.util.TreeSet<Item>(
    compareBy(Item::price).thenBy(Item::name)
)

byPrice.add(Item("A", 1200))
byPrice.add(Item("B", 800))
println(byPrice) // 가격→이름 순으로 정렬된 상태로 보관

6) 선택 가이드

  • 읽기 전용 목록이 필요하면 listOf
  • 추가·삭제되는 목록이면 mutableListOf
  • 중복 없이 모으려면 mutableSetOf 또는 HashSet
  • 키로 값을 관리하려면 mutableMapOf 또는 HashMap
  • 항상 정렬 상태가 필요하면 sortedSetOf 또는 sortedMapOf
  • 삽입 순서를 유지하며 보고 싶으면 LinkedHashSet, LinkedHashMap

7) 컬렉션 확장 함수

val nums = listOf(1, 2, 3, 4, 5)

val even = nums.filter { it % 2 == 0 } // [2, 4]
val doubled = nums.map { it * 2 }      // [2, 4, 6, 8, 10]

nums.forEach { println(it) }           // 요소 순회
profile
한걸음이라도 제대로... 쓰임있는 앱을 만들자

0개의 댓글