Data class : 데이터를 보유하고 있는 간단한 클래스를 정의할 때 사용 Sealed class : 상태를 효율적으로 관리하고 특정 유형의 클래스 계층을 제한하여 안정성을 높이는 데 사용
Data classes(데이터 클래스)
주로 데이터를 보관하는 데 사용
equals(), hashCode(), toString(), copy() 메서드를 자동으로 생성합니다.
상속 불가
data class Person(val name: String, val age: Int)
fun main() {
val person1 = Person("Alice", 30)
val person2 = Person("Alice", 30)
println(person1 == person2)
// 출력: true
println(person1.hashCode() == person2.hashCode())
// 출력: true
println(person1.toString())
// 출력: Person(name=Alice, age=30)
val person3 = person1.copy(age = 25)
println(person3)
// 출력: Person(name=Alice, age=25)
}
Sealed class (실드 클래스)
상속을 통해 계층 구조를 정의할 때 사용
하위 클래스를 제한하여 외부에서 새로운 하위 클래스를 추가하는 것을 방지
when 표현식을 사용하여 sealed class의 모든 하위 클래스에 대한 처리
sealed class Result
data class Success(val data: String) : Result()
data class Error(val message: String) : Result()
fun handleResult(result: Result) {
when (result) {
is Success -> println("Success: ${result.data}")
is Error -> println("Error: ${result.message}")
}
}
fun main() {
val successResult = Success("Data received")
val errorResult = Error("Failed to retrieve data")
handleResult(successResult)
// 출력: Success: Data received
handleResult(errorResult)
// 출력: Error: Failed to retrieve data
}