ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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 출력

     

    *참고*

    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

     

    반응형

    'Kotlin' 카테고리의 다른 글

    [Kotlin]확장 함수(Extension Functions)  (0) 2023.04.20
    [Kotlin]범위 지정 함수(apply, run, with, let, also)  (0) 2023.03.26
    [Kotlin]람다표현식  (0) 2023.03.26

    댓글

Designed by Tistory.