본문 바로가기
프로그래밍/코틀린

코틀린, data 키워드와 데이터 클래스

by K-인사이터 2024. 3. 7.
반응형

안녕하세요

K-IN 입니다.

 

코틀린에 대해서 알아보겠습니다. 

전체 강의 목록은 아래의 링크를 클릭해주세요.

 

K000. 코틀린 시리즈 (연재물)

안녕하세요 K-IN 입니다. 요즘 코틀린을 이용한 개발 프로젝트가 늘어나고 있습니다. 이에, 코틀린에 대해서 상세하게 정리하는 간행물을 제작하고자 합니다. 여기에 있는 링크들은 모두 코틀린

k-in.tistory.com

 

 

data 키워드와 데이터 클래스

일반적으로 데이터 클래스는 데이터를 보유 및 저장을 목적으로 사용됩니다. 

 

코틀린은 이를 간소하고 편리하게 만들기 위해 data 키워드를 제공합니다. 

즉, data 키워드를 사용하면 컴파일러가 아래의 표준기능들을 자동으로 생성하게됩니다. 

  1. equals() 메서드: 객체의 내용 비교를 위한 equals() 메서드가 생성됩니다.
  2. hashCode() 메서드: 해시코드를 생성하는 hashCode() 메서드가 생성됩니다.
  3. toString() 메서드: 객체를 문자열로 표현하기 위한 toString() 메서드가 생성됩니다.
  4. componentN() 메서드: 분리된 구성요소에 접근하기 위한 componentN() 메서드가 생성됩니다.
  5. copy() 메서드: 객체를 복사하는 copy() 메서드가 생성됩니다.

예시를 보면 아래와 같습니다. equals 등을 컴파일러가 자동으로 생성해주기 때문에

객체간의 비교 person1 == person2 가 가능합니다. 

data class Person(
    val firstName: String,
    val lastName: String
)

fun main() {
    val person1 = Person("John", "Doe")
    val person2 = Person("John", "Doe")

    println(person1 == person2) // true
}

 

data 키워드가 없다면? 

data 키워드를 통해서 여러 메서드를 코틀린 컴파일러가 자동으로 생성해줘서 편리하다는 것을 표면적으로 이해하였습니다.

그렇다면 만약 data 키워드가 없다면 우리는 어떤 구현을 해야할지 살펴보겠습니다. 

 

class Person(val firstName: String, val lastName: String) {

    // equals 메서드 구현
    override fun equals(other: Any?): Boolean {
        if (this === other) return true
        if (other !is Person) return false

        return this.firstName == other.firstName && this.lastName == other.lastName
    }

    // hashCode 메서드 구현
    override fun hashCode(): Int {
        var result = firstName.hashCode()
        result = 31 * result + lastName.hashCode()
        return result
    }

    // toString 메서드 구현
    override fun toString(): String {
        return "Person(firstName='$firstName', lastName='$lastName')"
    }
}

fun main() {
    val person1 = Person("John", "Doe")
    val person2 = Person("John", "Doe")

    println(person1 == person2) // true
}

 

위 예시는 data 키워드를 코틀린이 제공하지 않을 경우 우리가 작업해야 할 코드입니다. equals 메서드 구현부터 많은 구현이 반복되어야 합니다. 

 

즉, 일반적인 데이터 클래스를 정의하는데 더 많은 시간을 소모하는 것을 의미합니다. 

 

맺음말

코틀린에서 제공하는 data 키워드를 알아보고 왜 필요하는지를 알아보는 시간을 가졌습니다. 

예시코드는 아래의 플레이그라운드를 통해서 여러분이 직접 플레이할 수 있도록 마련하였습니다. 

 

 

이상입니다.

K-IN 올림. 

 

반응형