KOTLIN · 객체지향
상태 패턴 (State Pattern)
객체의 상태에 따라 동작을 변경하는 패턴입니다. sealed class와 when으로 안전하게 상태 전이를 관리합니다.
객체지향고급state-patternsealed-classstate-machinetransition
핵심 설명
객체의 상태에 따라 동작을 변경하는 패턴입니다. sealed class와 when으로 안전하게 상태 전이를 관리합니다.
Kotlin code
sealed class OrderState {
data object Created : OrderState()
data object Paid : OrderState()
data object Shipped : OrderState()
data object Delivered : OrderState()
data class Cancelled(val reason: String) : OrderState()
}
class Order(val id: String) {
var state: OrderState = OrderState.Created
private set
fun pay() { transition(OrderState.Created, OrderState.Paid) }
fun ship() { transition(OrderState.Paid, OrderState.Shipped) }
fun deliver() { transition(OrderState.Shipped, OrderState.Delivered) }
fun cancel(reason: String) {
require(state !is OrderState.Delivered) { "배송 완료 후 취소 불가" }
state = OrderState.Cancelled(reason)
}
private fun transition(from: OrderState, to: OrderState) {
require(state == from) { "현재 상태($state)에서 전이 불가" }
state = to
println("주문[$id]: $from → $to")
}
}
fun main() {
val order = Order("ORD-001")
order.pay()
order.ship()
order.deliver()
println("최종 상태: ${order.state}")
}학습 팁
sealed class로 상태를 정의하면 when에서 모든 상태를 빠짐없이 처리할 수 있어 상태 누락 버그를 방지합니다.
주의할 점
상태 전이 규칙을 검증하지 않으면 유효하지 않은 상태 변경이 발생합니다. require로 전이 사전 조건을 반드시 검증하세요.
자주 묻는 질문
상태 패턴 (State Pattern)란 무엇인가요?
객체의 상태에 따라 동작을 변경하는 패턴입니다. sealed class와 when으로 안전하게 상태 전이를 관리합니다.
상태 패턴 (State Pattern) 학습 시 주의할 점은 무엇인가요?
상태 전이 규칙을 검증하지 않으면 유효하지 않은 상태 변경이 발생합니다. require 로 전이 사전 조건을 반드시 검증하세요.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.