Kotlin Academy · 강의

컬렉션과 맵 키로 사용하는 데이터 클래스

구조적 동등성을 활용해 집합과 맵에서 데이터 클래스를 사용해 보세요.

레슨 4/413개 단계

컬렉션과 맵 키로 사용하는 데이터 클래스은(는) CoddyKit의 무료 Kotlin Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Kotlin Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Kotlin Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

값 객체로서의 데이터 클래스

데이터 클래스는 equals와 hashCode를 구조적으로 재정의하므로 일반 클래스와 달리 집합과 맵 키에서 완벽하게 작동합니다.

일반 클래스: 잘못된 맵 키

일반 클래스는 기본적으로 참조 동등성을 사용합니다. 겉보기에 같은 두 객체도 서로 다른 맵 키가 됩니다.
class Key(val id: Int)  // no equals/hashCode
val map = mutableMapOf<Key, String>()
val k1 = Key(1)
val k2 = Key(1)  // same id, different object
map[k1] = "value"
println(map[k2])  // null! k2 != k1 by reference

데이터 클래스: 올바른 맵 키

데이터 클래스는 구조적 동등성을 사용합니다. 프로퍼티가 같은 두 객체는 서로 같습니다.
data class Key(val id: Int)
val map = mutableMapOf<Key, String>()
val k1 = Key(1)
val k2 = Key(1)
map[k1] = "value"
println(map[k2])  // "value"! Equal by value

집합에서의 데이터 클래스

집합은 중복을 제거할 때 equals와 hashCode를 사용합니다. 데이터 클래스는 중복을 올바르게 제거합니다.
data class Tag(val name: String)
val tags = mutableSetOf<Tag>()
tags.add(Tag("kotlin"))
tags.add(Tag("kotlin"))  // duplicate
tags.add(Tag("java"))
println(tags.size)  // 2 (not 3)

데이터 클래스와 함께 사용하는 groupBy

데이터 클래스 키를 기준으로 컬렉션을 그룹화하십시오.
data class Category(val name: String, val parent: String)
val items = listOf(
    "List" to Category("Collections", "stdlib"),
    "Map" to Category("Collections", "stdlib"),
    "Flow" to Category("Coroutines", "kotlinx")
)
val grouped = items.groupBy { it.second }
println(grouped.keys.size)  // 2

맵으로 발생 횟수 세기

데이터 클래스를 맵 키로 사용하여 구조화된 데이터의 발생 횟수를 세십시오.
data class Pair2(val x: Int, val y: Int)
val points = listOf(Pair2(1,2), Pair2(1,2), Pair2(3,4))
val counts = points.groupingBy { it }.eachCount()
println(counts)  // {Pair2(x=1, y=2)=2, Pair2(x=3, y=4)=1}

중첩된 데이터 클래스

데이터 클래스는 다른 데이터 클래스를 포함할 수 있습니다. 중첩된 데이터 클래스에 대해서는 equals와 hashCode가 깊은 수준까지 적용됩니다.
data class Address(val city: String, val country: String)
data class Person(val name: String, val address: Address)
val p1 = Person("Alice", Address("Berlin", "DE"))
val p2 = Person("Alice", Address("Berlin", "DE"))
println(p1 == p2)  // true

데이터 클래스와 함께 사용하는 sortedBy

데이터 클래스 인스턴스의 프로퍼티를 기준으로 목록을 정렬하십시오.
data class Student(val name: String, val grade: Double)
val students = listOf(
    Student("Bob", 3.2),
    Student("Alice", 3.8),
    Student("Charlie", 2.9)
)
println(students.sortedBy { it.grade })

데이터 클래스와 캐싱

캐시 키가 여러 요소로 구성될 때 데이터 클래스를 HashMap의 캐시 키로 사용하십시오.
data class CacheKey(val userId: Long, val resourceType: String)
val cache = HashMap<CacheKey, ByteArray>()
val key = CacheKey(42, "avatar")
cache[key] = byteArrayOf(1, 2, 3)
println(cache[CacheKey(42, "avatar")] != null)  // true

데이터 클래스에서 distinct 사용하기

데이터 클래스 목록에서 distinct()는 해당 클래스의 equals를 사용하여 중복을 제거합니다.
data class Event(val type: String, val ts: Long)
val events = listOf(
    Event("click", 1000),
    Event("click", 1000),  // duplicate
    Event("scroll", 2000)
)
println(events.distinct().size)  // 2

불변 키가 더 안전합니다

맵이나 집합의 키에는 항상 val 프로퍼티를 사용하는 데이터 클래스를 사용하십시오. 삽입한 후 키를 변경하면 데이터 구조가 깨집니다.
data class ImmutableKey(val id: Int)  // val properties only
// DON'T: data class MutableKey(var id: Int)  // changing id breaks map!

빠른 확인

일반 클래스는 그렇지 않은 경우가 많은데, 데이터 클래스가 맵 키로 올바르게 작동하는 이유는 무엇입니까?

복습

데이터 클래스는 올바른 구조적 equals/hashCode를 가지므로 맵 키와 집합 요소로 사용할 수 있습니다. 키를 불변으로 유지하려면 val 프로퍼티를 사용하십시오. 데이터 클래스와 함께 groupBy, distinct 및 sortedBy를 활용하면 강력한 질의를 작성할 수 있습니다.
무료로 시작

AI 튜터와 함께 Kotlin을(를) 배우세요 — 무료

브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.

코스
51
레슨
203

자주 묻는 질문

“컬렉션과 맵 키로 사용하는 데이터 클래스” 강의는 무료인가요?

네 — “컬렉션과 맵 키로 사용하는 데이터 클래스” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Kotlin Academy 강의 전체를 잠금 해제할 수 있습니다. Kotlin Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“컬렉션과 맵 키로 사용하는 데이터 클래스”에서 뭘 배우나요?

구조적 동등성을 활용해 집합과 맵에서 데이터 클래스를 사용해 보세요. 브라우저에서 직접 실행하는 실습 코드로 Kotlin Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Kotlin Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Kotlin Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“컬렉션과 맵 키로 사용하는 데이터 클래스” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Kotlin Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Kotlin Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 데이터 클래스 기초: 자동 생성 메서드
  2. copy()와 부분 재정의로 복사하기
  3. componentN을 사용한 구조 분해 선언
  4. 컬렉션과 맵 키로 사용하는 데이터 클래스
← Kotlin Academy(으)로 돌아가기