본문 바로가기
컴퓨터 언어/Kotlin

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

by 웅대 2022. 12. 22.
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
반응형

댓글