반응형
안녕하세요
K-IN 입니다.
코틀린에 대해서 알아보겠습니다.
전체 강의 목록은 아래의 링크를 클릭해주세요.
data 키워드와 데이터 클래스
일반적으로 데이터 클래스는 데이터를 보유 및 저장을 목적으로 사용됩니다.
코틀린은 이를 간소하고 편리하게 만들기 위해 data 키워드를 제공합니다.
즉, data 키워드를 사용하면 컴파일러가 아래의 표준기능들을 자동으로 생성하게됩니다.
- equals() 메서드: 객체의 내용 비교를 위한 equals() 메서드가 생성됩니다.
- hashCode() 메서드: 해시코드를 생성하는 hashCode() 메서드가 생성됩니다.
- toString() 메서드: 객체를 문자열로 표현하기 위한 toString() 메서드가 생성됩니다.
- componentN() 메서드: 분리된 구성요소에 접근하기 위한 componentN() 메서드가 생성됩니다.
- 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 올림.
반응형
'프로그래밍 > 코틀린' 카테고리의 다른 글
코틀린, let 확장 함수을 알아보자 (75) | 2024.03.13 |
---|---|
코틀린, 정적 멤버와 컴패니언 객체(companion object) (5) | 2024.03.07 |
K017. 코틀린 함수(Functions) 깊게 살펴보기 - Functions 파트8, 람다(Lambdas) 3 (79) | 2024.03.07 |
K016. 코틀린 함수(Functions) 깊게 살펴보기 - Functions 파트7, 람다(Lambdas) 2 (85) | 2024.03.05 |
K015. 코틀린 함수(Functions) 깊게 살펴보기 - Functions 파트6, 람다(Lambdas) 1 (109) | 2024.02.16 |