| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 |
- 우송대학교
- 개발 보드
- 아두이노
- 리컴포지션
- 자료구조
- 스택
- LinkedList
- kotlin
- PICO4
- Android
- Compoae
- 라즈베리파이 피코
- 우송대
- 클래스
- deque
- Stack
- 안드로이드
- Kotlin LinkedList
- State Hoisting
- 코틀린
- 컴포즈
- 재정의함수
- 큐
- Queue
- 상태 호이스팅
- 추상화함수
- List
- Class
- Kotlin자료구조
- kotlinClass
- Today
- Total
개발자의 생활
data class 본문
Kotlin에서는 data class라는 새로운 클래스를 제공하고 있습니다.
data class는 말 그대로 데이터를 위한 클래스입니다. 데이터를 다루기 위해 기본적인 로직이 구현되어 있고 데이터에 특화되어 있습니다.
그러면 구현되어 있는 기능을 하나씩 살펴보겠습니다.
1. 기본 메서드
1. toString
fun main(){
val book1 = Book("코틀린 책", 10_000)
val str: String = book1.toString()
println(str)
}
data class Book(
var title: String,
var price: Int
)
출력 결과

이렇게 자동으로 필드값을 확인할 수 있게 문자열로 만들어주는 메서드가 자동으로 구현이 됩니다.
2. hashcode
fun main(){
val book1 = Book("코틀린 책", 10_000)
val book2 = Book("코틀린 책", 10_000)
println(book1.hashCode())
println(book2.hashCode())
}
data class Book(
var title: String,
var price: Int
)
출력 결과

일반 클래스의 객체 해시값은 참조값을 기반으로 생성이 됩니다.
하지만 data class는 해시 코드를 필드값을 기반으로 생성하기 때문에 다른 인스턴스의 객체라도 필드값이 동일하다면 동일한 해시값을 가지게 됩니다.
3. equals
fun main(){
val book1 = Book("코틀린 책", 10_000)
val book2 = Book("코틀린 책", 10_000)
println(book1 == book2)
}
data class Book(
var title: String,
var price: Int
)
* == 은 Kotlin에서는 참조를 비교하는 연산자입니다. 즉 내부적으로 equals() 메서드가 호출이 됩니다.*
일반 클래스는 객체의 인스턴스가 다르기 때문에 일반적으로 참조를 비교하면 false 가 반환되지만 data class는 내부적으로 equals 가 구현되어 있어 필드값이 동일하다면 true를 반환하는 메서드가 구현되어 있습니다.
4. copy + (toString 추가 설명)
fun main(){
val book1 = Book("코틀린 책", 10_000)
println(book1.copy(price = 15_000))
println(book1)
}
data class Book(
var title: String,
var price: Int
)
출력 결과

copy는 기존 객체를 사용해서 새로운 객체를 만들어 반환하는 메서드입니다. 이뿐만이 아니라 파라미터 값을 변경하여 새로운 객체를 만들 수도 있습니다.
추가로 println 내부에 toString를 사용하지 않았는데 자동으로 toString 가 호출되어 출력됩니다. 이는 println의 특징입니다.
테스트 과정에서 편리한 기능 같습니다.
5. component
fun main(){
val book1 = Book("코틀린 책", 10_000)
println(book1.component1())
println(book1.component2())
}
data class Book(
var title: String,
var price: Int
)
출력 결과

component는 필드값을 반환해 주는 메서드입니다. 필드값 순서대로 component1, component2, component3...
순서대로입니다.
사실 component는 이 기능을 위해 존재하는 건 아닙니다.
필드 값을 가져오는 건 book1.title를 호출하면 자동으로 getter 메서드가 호출이 되며 component를 사용하면 가독성이 떨어지게 되죠 그럼 무엇 때문에 이 기능이 있는 걸까요
구조분해를 편리하게 사용할 수 있도록 지원하기 위한 키워드입니다.
val (a, b) = book1
println(a)
println(b)
이런 코드를 작성하면 컴파일러에 의해 자동으로
val a = book1.component1()
val b = book1.component2()
이런 코드로 변환이 됩니다.
2. 특징
data class는 일반 클래스에 데이터와 관련된 메서드를 기본으로 제공하는 거뿐이기 때문에 일반 클래스와 동일하게 생성자 프로퍼티, init, companion object, constructor, 상속 등을 동일하게 사용할 수 있습니다. data class를 상속할 수는 없습니다.
하지만 data class는 데이터를 정의하기 위한 클래스 이기 때문에 비즈니스 로직은 일반 클래스로 나누어 설계하는 것이 좋습니다.
data class의 필드는 반드시 1개 이상 있어야 합니다.
만약 필드가 없다면 data class에서 기본으로 제공하는 메서드들이 비교, 복사 등을 할 수 없기 때문에 data class를 사용하는 의미가 없기 때문입니다.
이상으로 data class에 대해 포스팅을 마치겠습니다. 감사합니다.
'kotlin' 카테고리의 다른 글
| sealed class (0) | 2025.09.16 |
|---|---|
| Enum Class (0) | 2025.09.14 |
| 중첩 클래스, 내부클래스 (0) | 2025.09.08 |
| object 키워드(정적 변수, 정적 함수) (1) | 2025.08.31 |
| 상속 (1) | 2025.08.22 |