학습
Kotlin 데이터 클래스
Kotlin 데이터 클래스 — 초급
데이터 클래스
1. 도입 (왜 배워야 하는가)
Kotlin의 데이터 클래스는 단순한 데이터 구조체를 정의하는 데 매우 유용합니다. 실무에서 데이터 클래스는 주로 API로부터 받아온 데이터를 저장하거나, 데이터베이스와의 상호작용을 처리하는 데 사용됩니다. 데이터 클래스는 코드의 가독성을 높이고, 데이터 처리의 효율성을 향상시키는 데 큰 도움을 줍니다.
데이터 클래스를 사용하지 않으면, 일반 클래스를 만들어야 하고, 이를 위해 equals(), hashCode(), toString() 메서드를 수동으로 오버라이드해야 합니다. 이 과정은 번거롭고, 개발자가 실수할 여지가 많습니다. 데이터 클래스를 활용하면 이러한 문제를 피할 수 있습니다.
2. 핵심 개념 설명
데이터 클래스는 주로 다음과 같은 특성을 가집니다:
- 주 생성자: 데이터 클래스는 주 생성자를 통해 프로퍼티를 정의합니다. 이 프로퍼티들은 자동으로
getter,setter,equals(),hashCode(),toString()메서드를 생성합니다. - Immutable (불변): 기본적으로 데이터 클래스의 프로퍼티는
val로 선언됩니다. 이는 데이터의 불변성을 보장하여 프로그램의 안정성을 높입니다. - 간결함: 데이터 클래스를 사용하면 코드가 간결해지고, 유지보수가 쉬워집니다.
관련 용어 정리
| 용어 | 설명 |
|---|---|
| 데이터 클래스 | 데이터를 저장하기 위한 특별한 클래스 |
| 주 생성자 | 클래스의 인스턴스를 생성할 때 초기화할 프로퍼티를 정의하는 생성자 |
| 불변성 | 객체의 상태가 한번 설정되면 변경되지 않도록 하는 특성 |
3. 기본 코드 예제
가장 기본적인 데이터 클래스의 사용법은 다음과 같습니다.
data class Person(val name: String, val age: Int)
fun main() {
val person = Person("Alice", 30)
println(person) // 출력: Person(name=Alice, age=30)
}
실행 결과
Person(name=Alice, age=30)
코드 한 줄씩 동작 설명
data class Person(val name: String, val age: Int):Person이라는 데이터 클래스를 정의하고, 두 개의 프로퍼티(name,age)를 설정합니다.fun main(): 프로그램의 시작점인main함수를 정의합니다.val person = Person("Alice", 30):Person클래스의 인스턴스를 생성하고person변수에 할당합니다.println(person):person객체를 출력합니다. 이 때, 데이터 클래스에서 자동 생성된toString()메서드가 호출되어 객체의 상태를 문자열로 변환합니다.- 데이터 클래스에서는
val을 사용하여 불변성을 유지하는 것이 좋습니다.var로 선언하면 데이터 클래스의 장점을 잃게 됩니다. - 데이터 클래스는 자동으로
toString()을 생성하므로, 이를 오버라이드할 필요가 없습니다. 이는 불필요한 코드로, 유지보수성을 떨어뜨립니다. - 데이터 클래스는 데이터를 간편하게 정의하고 처리할 수 있는 구조체입니다.
- 주 생성자를 사용하여 프로퍼티를 정의하고, 불변성을 유지하는 것이 중요합니다.
- 실무에서 데이터 클래스는 API 응답이나 데이터베이스의 레코드를 표현하는 데 유용하게 사용됩니다.
- 다음에 학습하면 좋은 주제로는
sealed class나enum class가 있습니다. 이들은 데이터의 종류를 제한하고, 더욱 안전한 코드를 작성하는 데 도움을 줍니다.
4. 실전 활용 예제
예제 1: 쇼핑몰 장바구니
쇼핑몰 애플리케이션에서 장바구니에 담긴 상품을 표현하는 데이터 클래스를 만들어봅시다.
data class CartItem(val productId: String, val quantity: Int)
fun main() {
val item1 = CartItem("P001", 2)
val item2 = CartItem("P002", 1)
println(item1) // 출력: CartItem(productId=P001, quantity=2)
println(item2) // 출력: CartItem(productId=P002, quantity=1)
}
이 예제에서는 장바구니에 담긴 각 상품을 CartItem 데이터 클래스로 표현합니다.
예제 2: 사용자 정보
사용자 정보를 저장하기 위한 데이터 클래스를 사용할 수 있습니다.
data class User(val username: String, val email: String)
fun main() {
val user = User("john_doe", "[email protected]")
println(user) // 출력: User(username=john_doe, [email protected])
}
이 예제에서는 사용자의 이름과 이메일을 저장하는 User 데이터 클래스를 정의합니다.
5. 흔한 실수와 주의사항
실수 1: 데이터 클래스의 기본 생성자에 var 사용
data class Person(var name: String, var age: Int) // 잘못된 사용
실수 2: toString() 메서드 오버라이드
data class Person(val name: String, val age: Int) {
override fun toString(): String {
return "이름: $name, 나이: $age" // 불필요한 오버라이드
}
}