Post

Kotlin Data Class 공식 문서 살펴보기

Data classes

data class는 데이터를 담기위한 목적으로 만들어진 클래스이며, 데이터 클래스를 다음과 같이 정의하면 컴파일러는 다음과 같은 함수를 자동으로 생성합니다.

1
data class User(val name: String = "John", val age: Int = 42)
  • .equals() / .hashCode()
  • .toString() : data class toString()은 다음과 같이 출력 됩니다. “User(name=John, age=42)”
  • .componentN() 함수 : data class에서 선언한 순서대로 정의되는 함수입니다. 예를들어 componet1()은 name의 값을 return 합니다.
  • .copy() : data class의 속성 값을 복사합니다. 이미 정의 돼 있는 일부 데이터를 변경할 때 주로 사용합니다.

이러한 자동으로 generated 되는 코드의 일관성과 의미있는 동작을 보장하기 위해서 다음과 같은 제약사항이 있습니다.

  • data class의 primary constructor는 최소 한개의 파라미터를 가져야 합니다.
  • 모든 primary constructor의 파라미터는 val 또는 var 키워드로 선언돼야 합니다.
  • data class는 abstract, open, sealed, inner를 선언할 수 없습니다.

primary constructor에 대해 정리 잘 된 글을 보시려면 여기를 클릭 해주세요.

실험

data class 내부에 선언한 변수도 자동으로 함수를 만들어줄까?

결론은 아닙니다.

1
2
3
4
5
6
7
8
9
10
11
12
data class User(
    val name: String = "John",
    val age: Int = 42
) {
    val isNameJohn = name == "John"
}

fun test() { 
  val user = User().copy(name = "Jaepark")
  println(user.toString())
  println(user.isNameJohn)
}
1
2
User(name=Jaepark, age=42)
false

user data class를 자동으로 생성된 toString을 출력 해본결과 data class 내부에 정의된 isNameJohn은 출력되지 않았습니다.

참고
Kotlin 공식 문서 - data classes
Kotlin 공식 문서 - collections copy

This post is licensed under CC BY 4.0 by the author.