[Kotlin] Data Class

문승연·2023년 7월 31일
0

Kotlin 기본

목록 보기
3/11

이 포스트는 아래의 Android 공식 홈페이지에서 제공하는 Codelab을 기반으로 작성되었습니다.
https://developer.android.com/codelabs/basic-android-kotlin-compose-generics?hl=ko#0

이 포스트는 이전 포스트의 예제를 이어서 진행한다.
https://velog.io/@moonliam_/Kotlin-Generics-Data-Type-%EC%9D%BC%EB%B0%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%9C%A0%ED%98%95

Question 클래스는 데이터만 포함하고 있는 클래스이고 작업을 실행하는 메소드가 존재하지 않는다. 이러한 클래스를 데이터 클래스(Data Class) 라고 정의할 수 있다.

특정 클래스를 Data Class로 정의하면 Kotlin 컴파일러에서 특정한 가정을 하여 toString() 및 기타 메소드가 자동으로 구현된다.

만약 Data Class가 아닌 일반 클래스에서 toString() 과 같은 메소드를 호출할 경우 다음과 같이 클래스 고유 id값만 표시 된다.

fun main() {
    val question1 = Question<String>("Quoth the raven ___", "nevermore", Difficulty.MEDIUM)
    val question2 = Question<Boolean>("The sky is green. True or false", false, Difficulty.EASY)
    val question3 = Question<Int>("How many days are there between full moons?", 28, Difficulty.HARD)
    println(question1.toString())
}
Question@37f8bb67

이제 Question 클래스를 Data Class로 정의한 다음 같은 코드를 다시 실행해보면 결과는 다음과 같다.

data class Question<T>(
    val questionText: String,
    val answer: T,
    val difficulty: Difficulty
)
Question(questionText=Quoth the raven ___, answer=nevermore, difficulty=MEDIUM)

일반 Class가 Data Class로 정의되면 다음 메소드가 구현된다.

  • equals()
  • hashCode() : 특정 컬렉션 유형을 사용할 때 이 메소드가 표시된다.
  • toString()
  • componentN() : component1() , component2()
  • copy()

참고: 데이터 클래스에는 생성자에 매개변수가 하나 이상 있어야 하며 모든 생성자 매개변수는 val 또는 var로 표시되어야 한다. 데이터 클래스는 또한 abstract 또는 open , sealed , inner 일 수 없습니다.

profile
"비몽(Bemong)"이라는 앱을 개발 및 운영 중인 안드로이드 개발자입니다.

0개의 댓글