이 포스트는 아래의 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
일 수 없습니다.