Data object는 Kotlin의 새로운 선언 유형(버전 1.9부터)으로, 싱글톤 객체와 data class의 속성을 결합합니다. 이는 객체의 단일 인스턴스만 필요하고 자동 생성된 equals, hashCode, toString 메서드가 필요한 경우에 적합합니다.
이전에 고유한 엔티티를 저장하고 toString() 및 equals() 메서드를 자동 생성하기 위해서는 수동 구현이 포함된 object를 작성하거나 단일 객체로 data class를 타협적으로 사용해야 했습니다.
싱글톤 객체(object)는 자동 생성된 equals, hashCode, toString을 가지지 않고, data class는 여러 인스턴스를 가정합니다. 이는 포괄적인 enum-like 모델에는 적합하지 않습니다.
data object의 등장으로 두 가지 문제가 간결하게 해결됩니다:
코드 예:
data object LoadingState data object NoData println(LoadingState == LoadingState) // true println(LoadingState.toString()) // LoadingState
주요 특징:
data object와 일반 object의 차이점은 무엇인가요?
오직 data object만이 컴파일러 수준에서 equals, hashCode, toString 메서드의 자동 생성을 받습니다; 일반 object는 Any에서 구현을 사용합니다(참조 동등성, 빈약한 toString).
매개변수가 있는 생성자를 가진 data object를 만들 수 있나요?
아니요, data object는 매개변수가 있는 생성자를 가질 수 없습니다. 항상 매개변수 없이 존재해야 하며, 오직 하나의 인스턴스만 존재해야 합니다.
data object를 상속할 수 있나요?
예, data object는 인터페이스, incluindo sealed interface를 구현할 수 있으며, 상태 계층의 일부가 될 수 있습니다.
예시:
sealed interface Result data object Success : Result data object Failure : Result
개발자가 "데이터 없음"을 object NoData로 모델링한 후, 다른 객체와 equals()로 비교하여 예상치 못한 결과를 얻습니다(참조 비교, 내용 비교 아님).
장점:
단점:
로딩 상태를 위해 data object를 사용하여 예상되는 data class 규칙에 따라 평등 및 출력을 수행합니다. 모델 레이어는 상태에 대한 패턴 매칭을 안정적으로 사용합니다.
장점:
단점: