본문 바로가기
Kotlin

[Kotlin] Data class, Sealed class

by LoseyKim 2024. 3. 6.
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
}

참고문서

https://kotlinlang.org/docs/data-classes.html

 

Data classes | Kotlin

 

kotlinlang.org

https://kotlinlang.org/docs/sealed-classes.html

 

Sealed classes and interfaces | Kotlin

 

kotlinlang.org