본문 바로가기
Android (Kotlin)/kotlin 문법

[Kotlin] Data Class

by 키윤 2023. 12. 3.

Syntax

data class CLassName( val data1: String, val data2: Int)

조건

  • 주 생성자에 매개변수가 1개 이상 있어야 한다.
  • 주 생성자의 매개변수가 val 또는 var이어야 한다.
  • 데이터 클래스는 abstract, slealed, open이 될 수 없다.
  • 다른 클래스 확장이 가능하고 인터페이스 적용 가능하다.

데이터 클래스에 들어있는 함수

  • toString()

객체의 데이터를 출력하기 위해 알아서 문자열로 바꾸어준다.
예를들어 데이터 클래스 가 아래와 같이 정의 되면

data class Cell(var name: String, var roll: Int)

fun main() {
	val p = Cell("Euny", 21)
    println(p)
}

위 클래스가 실행되면 p의 출력 값은 Cell(name=Euny, roll=21)일 것이다.

아 그리고 출력값의 syntax는 다음과 같다.

classname(parameter_name: value, parameter_name2: value)
  • copy()

객체의 프로퍼티의 복사본을 만들거나 프로퍼티를 수정할 수 있는 함수

data class Record(var name: String, var roll: Int)

fun main() {
	var r1 = Record("Ram,8)
    println("data of object r1 : $r1")
    
    var r2 = r1.copy()
    println("data of copied object r2 : $r2")
    
	var r1 = r1.copy(roll = 10)
    println("Moditifed of object r3 : $r3")
    
    
    }

출력값

data of object r1 : Record(name=Ram, roll=8)
data of copied object r2 : Record(name=Ram, roll=8)
Modified data of r1 : Record(name=Ram, roll=10)
  • equals()
data class Record(var name: String, var roll: Int)

fun main() {
	val r1 = Record("Ram", 8)
    val r2 = r1.copy()
    val r3 = r1.copy(roll=10)
    
    if (r1.equals(r2) == true) {
    	println("r1 and r2 are equal")
    } else {
		println("r1 and r2 are not equal")
        
    if (r1.equals(r3) == true) {
    	println("r1 and r3 are equal")
    } else {
		println("r1 and r3 are not equal")

 

  • hashCode()
data class Record(var name: String, var roll: Int)

fun main() {
	val r1 = Recrod("Euny", 99)
    val r2 = r1.copy()
    val r3 = r1.copy(roll = 22)
    
    println("${r1.hashCode()}")
    println("${r2.hashCode()}")    
    println("${r3.hashCode()}")
}

출력값:

2539466
2539466
2539468

출처: https://www.simplilearn.com/tutorials/kotlin-tutorial/understanding-kotlin-data-class