[Kotlin] 데이터 클래스(data class)의 장점

2022. 12. 22. 12:00컴퓨터 언어/Kotlin

728x90

 

코틀린 클래스에는 데이터 클래스라는 것이 존재한다.

 

주로 데이터들의 집합을 표현하기 위해서 사용한다.

 

예를 들어 학생의 정보를 학번, 이름으로 표현한다고 하면 일반적인 클래스의 경우 다음과 같이 사용한다.

 

class Student(number : String, name : String){
    var sNumber = number
    var sName = name
}
동등성 

 

아래와 같이 두 Student 인스턴스를 생성하자.

 

    val s1 = Student("123","chulsoo")
    val s2 = Student("123","chulsoo")
    println(s1==s2)

위 코드의 결과는 False이다. 프로퍼티의 값은 같으나 결과적으로 서로 다른 객체이기 때문이다.

 

즉 "=="연산은 동일성을 체크하는 것이다. (아예 같은 객체)

 

그래서 일반 클래스에서 동등성 비교를 위해서는 추가적인 작업이 필요하다.

 

여기서 데이터 클래스를 쓰는 이유가 나타난다.

 

데이터 클래스는 "==" 연산이 기본적으로 동등성을 의미한다. (다른 객체여도 값이 같음)

 

먼저 데이터 클래스는 다음처럼 인자에 val을 붙여 파라미터로 만드는 방식으로 사용한다.

data class Student(
    val number : String, val name : String
    )

 

    val s1 = Student("123","chulsoo")
    val s2 = Student("123","chulsoo")
    println(s1==s2)

위의 결과는 값이 같기 때문에 true이다.

 

toString

 

데이터 클래스의 또 하나의 장점으로는 자동으로 toString을 구현해준다.

 

데이터 클래스를 사용할 때

    val s1 = Student("123","chulsoo")
    val s2 = Student("123","chulsoo")
    println(s1)
    //Student(number=123, name=chulsoo)

데이터 클래스를 사용하지 않을 때

    val s1 = Student("123","chulsoo")
    val s2 = Student("123","chulsoo")
    println(s1)
    //Student@16b98e56

일반 클래스에서 동등성을 표현하고 싶다면 equals와 hashCode 함수를 오버라이딩하여 커스텀 해야하고 객체의 정보를 출력하고 싶다면 toString 함수를 오버라이딩 해야한다.

 

이럴 때 데이터 클래스를 사용하면 자동으로 해준다.

 

구조 분해 선언

데이터 클래스의 프로퍼티들을 구조 분해 선언으로 간단하게 꺼내올 수 있다.

 

    val s1 = Student("123","chulsoo")
    val s2 = Student("123","chulsoo")
    val (number, name) = s1
    println("$number $name")

꺼내오지 않고 싶은 프로퍼티가 있다면 _을 사용하면 된다.

 

    val s1 = Student("123","chulsoo")
    val s2 = Student("123","chulsoo")
    val (_, name) = s1
    println(name)
    // number를 건너 뛰고 name만 가져온다.

 

꺼내오지 않고 싶은 프로퍼티가 마지막 프로퍼티라면 그냥 생략해도된다.

 

 

요약

데이터 클래스의 장점

1. 동등성 비교
2. toString
3, 구조 분해 선언
728x90