const color =
  (isUnchecked && 'palette.label.alternative') ||
  (isChecked && 'palette.primary.normal') ||
  'palette.label.normal'

기존 접근과 문제점

기존 접근

  • 중첩된 삼항 연산자로 상태에 따라 값을 반환하는 코드 작성.
  • 간결하지만 가독성이 떨어지고, 상태가 늘어나면 유지보수가 어려워짐.

문법적 접근

  • if 문, switch 문, 객체 매핑, &&|| 논리 연산자 등 다양한 문법으로 해결 가능.
  • 하지만 이는 상태 관리의 본질적인 문제를 해결하지 못할 수 있음.

핵심 문제

  • status 모델을 어떻게 정의하고 참조할 것인가?
    • 상태의 의미를 명확히 표현할 수 있어야 함.
    • 상태와 그에 따른 동작이 쉽게 확장 가능해야 함.
    • 코드의 가독성과 유지보수성을 높여야 함.
class StatusManager {
  static Status = {
    UNCHECKED: 'UNCHECKED',
    CHECKED: 'CHECKED',
    DEFAULT: 'DEFAULT',
  } as const

  static getColor(status: keyof typeof this.Status) {
    switch (status) {
      case this.Status.UNCHECKED:
        return 'palette.label.alternative'
      case this.Status.CHECKED:
        return 'palette.primary.normal'
      default:
        return 'palette.label.normal'
    }
  }
}

const color = StatusManager.getColor(StatusManager.Status.CHECKED)
#321