Home Kotlin의 데이터 클래스와 씰드 클래스에 대해 알아보자
Post
Cancel

Kotlin의 데이터 클래스와 씰드 클래스에 대해 알아보자

코틀린은 안드로이드 개발을 포함한 다양한 영역에서 널리 사용되는 현대적인 프로그래밍 언어로 데이터 클래스(data class)와 씰드 클래스(sealed class)를 지원하는데 이 두 클래스 유형은 코틀린 프로그래밍 언어에서 중요한 역할을 한다

그렇기에 오늘 글에서는 이 두 개념에 대해 자세히 알아보자

데이터 클래스(Data Classes)

코틀린의 데이터 클래스는 데이터 저장과 전달에 최적화된 클래스 유형으로 간결한 구문과 자동 생성된 메소드들을 통해 다양한 데이터를 효율적으로 관리를 할 때 사용한다

1
2
3
4
5
6
7
data class User(val name: String, val age: Int)

fun main() {
    val alice = User("Alice", 30)
    val (name, age) = alice
    println("Name: $name, Age: $age")
}

위 코드처럼 데이터 클래스는 data 키워드를 사용해 선언하고 데이터 클래스로 클래스를 생성하면 자동으로 메소드들이 생성되는데 equals(), hashCode(), toString(), copy() 등의 메소드가 이에 해당한다

이러한 메소드들은 인스턴스 비교와 복제를 단순화할 수 있기에 유용히며 데이터 클래스는 최소 한 개의 매개변수를 갖는 주 생성자가 필요하다

실드 클래스(Sealed Classes)

실드 클래스는 제한된 클래스 계층을 구현하는데 사용되는 클래스로 실드 클래스를 사용하면 타입 안전성을 강화하고 복잡한 상태 또는 연산의 관리를 단순화할 수 있다 뭔가 말이 복잡하니

다 집어치우고 코드로 확인해보자

1
2
3
4
5
6
7
8
9
10
sealed class ApiResponse
data class Success(val data: String): ApiResponse()
data class Error(val message: String): ApiResponse()

fun handleResponse(response: ApiResponse) {
    when (response) {
        is Success -> println("Success: ${response.data}")
        is Error -> println("Error: ${response.message}")
    }
}

예제 코드는 위와 같고 실드 클래스는 다음과 같은 특징을 가지고 있는데 실드 클래스의 서브클래스는 실드 클래스와 동일한 파일 내에서만 정의할 수 있으며 when 식과 함께 사용될 때 모든 가능한 케이스를 다루어야 한다

위와 같은 특징을 통해서 실드 클래스는 혹시 모를 처리를 하지 않아서 나올 수 있는 런타임 오류의 가능성을 줄일 수 있고 계층 구조를 더욱 명확하고 관리하기 쉽게 만들 수 있다

이러한 실드 클래스의 서브클래스는 일반 클래스, 데이터 클래스, 심지어 다른 실드 클래스가 될 수 있기에 대다수의 경우의 사용이 가능하다

데이터 클래스와 실드 클래스는 어떨 때 사용할까?

그렇다면 앞에서 배운 데이터 클래스와 실드 클래스는 어떨 때 사용할까?

  • 데이터 클래스 사용: 데이터 클래스는 데이터의 저장 및 전달에 최적화되어 있기에 주로 데이터 전달 객체(Data Transfer Objects, DTOs), 구성 설정, 혹은 다른 간단한 데이터 집합을 표현하는 데 사용된다

  • 실드 클래스 사용: 실드 클래스는 다양한 상태와 그에 대한 처리를 명확하고 안전하게 관리할 수 있게 해주기에 복잡한 비즈니스 로직, 상태 머신, 또는 제한된 타입 집합이 필요한 경우에 사용된다

This post is licensed under CC BY 4.0 by the author.