코틀린 클래스에는 데이터 클래스라는 것이 존재한다.
주로 데이터들의 집합을 표현하기 위해서 사용한다.
예를 들어 학생의 정보를 학번, 이름으로 표현한다고 하면 일반적인 클래스의 경우 다음과 같이 사용한다.
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, 구조 분해 선언
'컴퓨터 언어 > Kotlin' 카테고리의 다른 글
[Kotlin] 영역 함수 (run, let, with, apply, also) (0) | 2022.12.21 |
---|---|
[Kotlin] 고차 함수와 람다 함수 (0) | 2022.12.20 |
[Kotlin] 클래스 사용법 (0) | 2022.12.08 |
[Kotlin] try-catch문을 활용한 예외 처리 (finally) (0) | 2022.12.07 |
[Kotlin] 내포된 반복문과 레이블 (0) | 2022.12.06 |
댓글