훈련 - 코틀린: enum, sealed 클래스
게시: 17 May 2022
밀봉된 클래스는 열거형이 아닙니다(키워드: enum).
자바에서 온 당신은 기능 제공 열거형을 오버로드하려고 유혹을 느낄 수 있습니다: // 자바 코드
enum PizzaOrderStatus {
ORDER_RECEIVED,
PIZZA_BEING_MADE,
OUT_FOR_DELIVERY,
COMPLETED;
public PizzaOrderStatus nextStatus() {
switch (this) {
case ORDER_RECEIVED: return PIZZA_BEING_MADE;
case PIZZA_BEING_MADE: return OUT_FOR_DELIVERY;
case OUT_FOR_DELIVERY: return COMPLETED;
case COMPLETED:return COMPLETED;
}
}
}
대신에, sealed 클래스를 사용할 수 있습니다:
sealed class PizzaOrderStatus(protected val orderId: Int) {
abstract fun nextStatus() : PizzaOrderStatus
class OrderReceived(orderId: Int) : PizzaOrderStatus(orderId) {
override fun nextStatus(): PizzaOrderStatus {
return PizzaBeingMade(orderId)
}
}
class PizzaBeingMade(orderId: Int) : PizzaOrderStatus(orderId) {
override fun nextStatus(): PizzaOrderStatus {
return OutForDelivery(orderId)
}
}
class OutForDelivery(orderId: Int) : PizzaOrderStatus(orderId) {
override fun nextStatus(): PizzaOrderStatus {
return Completed(orderId)
}
}
class Completed(orderId: Int) : PizzaOrderStatus(orderId) {
override fun nextStatus(): PizzaOrderStatus {
return this
}
}
}
이 접근 방식의 장점은 이제 우리가 데이터를 전송할 수 있게 되었다는 것과 과 함께 상태:
var status: PizzaOrderStatus = OrderReceived(123)
while (status !is Completed) {
status = when (status) {
is OrderReceived -> status.nextStatus()
is PizzaBeingMade -> status.nextStatus()
is OutForDelivery -> status.nextStatus()
is Completed -> status
}
}
일반적으로, sealed classes는 데이터를 연결하고 싶을 때 좋습니다. 국가.
관련 기사
HyperFrames-Gradle : AsciiDoc을 MP4 비디오로 변환
31 May 2026
31 May 2026
아키텍처 « 독립 플러그인 + 소비자 루트 » : 왜 내 Gradle 빌드가 중복되는가
14 May 2026
14 May 2026