Kotlin

[Kotlin]데이터 클래스(Data Class)

__JeongYeon 2023. 3. 26. 21:21
반응형

[모든 포스팅은 개인적 공부를 위해 작성된 글입니다] 

- 그동안 데이터 클래스를 자주 사용했지만 막상 데이터 클래스에 대해 설명해야 한다고 생각해보니 잘 모르는 거 같아서 정리해보려고 한다

 

<데이터 클래스(Data Class)란?>

- 데이터 보관을 주 목적으로 하는 클래스

- toString(), hashCode(), equals(), copy() 메서드를 자동으로 만들어주는 클래스

- class 키워드 앞에 data를 붙이면 됨

 

<특징(데이터 클래스가 되기 위한 조건)>

- 상속 불가

- val 또는 var로만 선언 가능

- abstract, open, sealed, inner, internal 붙이기 불가능

- 1개 이상의 프로퍼티 가지고 있어야 함

- equals(), toString(), hashCode()에 오버라이드 구현 시 구현 함수 사용

 

<copy()>

data class Member(
    val id: String,
    val name: String
)

fun Temp(){
    val user1 = Member("abcd", "efg")
    val user2 = user1.copy(id = "hijk")
}

//티스토리 코드블럭에서 직접 타이밍 했기 때문에 오류가 있을 수 있습니다

- 위의 코드를 보면 user2에 copy()를 통해 user1을 복사하고 id값만 "abcd"에서 "hijk"로 바꿔줌

- 값을 그대로 복사하고 싶다면 user1.copy()로 하면 됨

 

<toString()>

println(user1)

- 위 코드의 결과값은 User(id=abcd, name=efg)

  - 생성자에 정의된 프로퍼티만 출력

- data class는 toString()을 기본적으로 제공하고 있으므로 위와 같이 바로 출력 가능

 

<hashCode()>

- class 객체인 경우 다른 값을 리턴하고 data class인 경우에는 같은 값 리턴

- ex) 일반 class 형태로 선언된 user1과 user2는 println(user1.hashCode())와 println(user2.hashCode())는 다른 값 출력

  - 반면에 data class 형태로 선언된 user1과 user2는 위 두 출력값이 동일

 

<equals()>

 class 객체인 경우 false를 data class인 경우에는 true 리턴

- ex) 일반 class 형태로 선언된 user1과 user2는 println(user1 == user2) 출력값이 false

  - 반면에 data class 형태로 선언된 user1과 user2는 true 출력

 

*참고*

https://medium.com/kenneth-android/kotlin-kotlin-data-class-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-7d7f51885075

 

[Kotlin] kotlin data class 이해하기

이번 포스팅에서는! Kotlin에서 중요하고도 많이 쓰이는 Data class에 대해서 알아보도록 하겠습니다.

medium.com

 

반응형