본문 바로가기
Languages/Kotlin

[Kotlin] 데이터 클래스

by jbrochan 2023. 4. 18.

데이터 클래스는 data 키워드로 선언하며 자주 사용하는 데이터를 객체로 묶어주는 역할을 한다.

또한 데이터 클래스는 Value Object 클래스를 편리하게 이용할 수 있게 해준다.

 

data class DataClass(val name: String, val email: String, val age: Int)

equals() 함수

데이터 클래스의 경우 데이터 자체의 보관을 목적으로 하는 클래스이기 때문에

객체의 데이터를 비교하는 equals() 함수를 사용할 때 일반 클래스의 객체와 차이점이 존재한다.

 

class NonData(val name: String)    // 일반 클래스
data class Data(val name: String)    // 데이터 클래스

fun  main(){
    val non1 = NonData("kim")
    val non2 = NonData("kim")
    
    val data1 = Data("kim")
    val data2 = Data("kim")
}

다음과 같이 4개의 객체를 생성하고 일반 클래스와 데이터 클래스끼리 equals() 를 이용해 비교할 경우

일반 클래스의 경우 false 값을 리턴하게 되지만,

데이터 클래스의 경우 true 값을 리턴하게 된다.

이는 데이터 클래스의 경우 객체 자체가 아니라, 객체의 데이터를 비교하기 때문이다.

 

참고로 equals() 함수는 주 생성자에 선언한 멤버 변수의 데이터만 비교 대상으로 삼는다.

즉, 주 생성자에 선언한 멤버 변수만 같은지 판단한다.

 


toString() 함수

toString 함수는 해당 객체가 가지는 값을 반환하며 equals() 함수와 마찬가지로 일반 클래스와 데이터 클래스사이에 차이가 있다.

 

fun main(){
    class NonData(val name: String)
    data class Data(val name: String)
    
    val non = NonData("kim")
    val data = Data("kim")
    
    println(non.toString())
    println(data.toString())
}

다음과 같이 일반 클래스와 데이터 클래스를 선언하고 toString() 함수를 사용했을 때

일반 클래스의 경우에는 의미 없는 값을 반환하지만

데이터 클래스의 경우에는 객체가 포함하는 멤버 변수의 데이터를 반환한다.

 

일반 클래스 : com.example.kotlin0308.TestKt$main$NonData@7f63425a 
데이터 클래스 : Data(name=kim)

 

 

댓글