-
[Kotlin]데이터 클래스(Data Class)Kotlin 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 출력
*참고*
반응형'Kotlin' 카테고리의 다른 글
[Kotlin]확장 함수(Extension Functions) (0) 2023.04.20 [Kotlin]범위 지정 함수(apply, run, with, let, also) (0) 2023.03.26 [Kotlin]람다표현식 (0) 2023.03.26