10. Data, Enum, Sealed Classes
다양한 클래스
치트시트
Data class
자동 생성: equals/hashCode/toString/copy
서버 DTO, 값 객체에 사용
Enum class
제한된 상수, when과 함께 활용
권한/상태/타입 상수에 적합
Sealed class
제한된 계층, 상태 모델링
Enum보다 유연, 각 상태마다 데이터/로직 포함 가능
API 응답, 오류 처리, 상태 전이 모델링
1) Data Class — DTO와 값 객체(Value Object) 최적화
data키워드로 선언자동 생성:
equals,hashCode,toString,copy,componentN
data class UserDto(
val id: Long,
val name: String,
val email: String?
)서버 활용 패턴
API DTO (요청/응답)
JPA Entity와 구분된 전송 객체
도메인 모델의 값 객체 (예:
Money,Email)
👉 자바에서는 Lombok이나 record(JDK16+)로 비슷한 효과를 냈지만, 코틀린은 언어 차원에서 기본 제공
2) Enum Class — 제한된 상수 집합
자바 Enum과 동일하지만,
when과 함께 강력해짐
특징:
상속 불가, 인터페이스 구현 가능
각 인스턴스는 싱글톤
서버 활용 패턴
권한(Role), 상태(Status), 타입(Type) 상수 표현
DB 매핑 시 문자열/숫자 Enum과 매핑
3) Sealed Class — 상태 표현과 제한된 계층
sealed키워드로 선언같은 파일/패키지 내에서만 하위 클래스 선언 가능
컴파일 타임에 모든 하위 타입을 알고 있음
Enum vs Sealed
Enum: 값 자체만 구분, 고정된 상수
Sealed: 각 상태마다 데이터/로직 포함 가능
서버 활용 패턴
API 응답 래퍼 (성공/실패/로딩)
비즈니스 로직 상태 모델링 (예: 결제 진행 단계, 인증 단계)
오류 처리 (Success/Failure/Retry 같은 타입 안전 표현)
👉 자바도 JDK17부터 sealed class 도입
4) 실무 예시 (서버 개발)
A. 서비스 계층 응답
B. 도메인 값 객체
C. 권한 정의
Last updated