# [[Special Case Pattern (특수 사례 패턴)]]

## 📌 Brief Summary
특수 사례 패턴(Special Case Pattern)은 특정한 형태의 예외적 동작을 수행하는 클래스의 개별 인스턴스를 생성하여 모델링하는 패턴이다 [1]. 이 패턴은 반복적인 널(Null) 확인 코드나 예외 처리 코드를 줄여 다형성을 통해 깔끔하게 시스템이 동작할 수 있도록 돕는다 [1-3]. 대표적으로 '알 수 없는 고객'이나 '숫자가 아님(NaN)' 등의 예외 상황을 독립적인 객체로 다루는 데 활용된다 [1].

## 📖 Core Content
* **패턴의 개념과 가치**: 특수 사례 클래스는 특별한 동작을 가진 클래스의 특정 인스턴스를 의미한다 [1]. 이 패턴이 제공하는 가장 핵심적인 가치는 오류를 다루는 코드를 대폭 줄여준다는 점이다 [1].
* **Null 객체의 확장**: 'Null 객체 도입(Introduce Null Object)'은 특수 사례 패턴의 대표적인 적용 형태이다 [1, 4]. 클라이언트가 객체의 타입을 묻거나 널(Null)인지 조건문으로 확인한 뒤 분기하는 대신, 다형성을 활용하여 객체에게 바로 동작을 지시하도록 코드를 개선한다 [2, 3].
* **다양한 특수 사례의 세분화**: 널(Null)이나 예외 상황의 종류가 구체적으로 다를 경우, 상황에 맞춰 별도의 특수 사례 클래스들을 구축할 수 있다 [5]. 예를 들어 '아직 입주하지 않아 고객이 없는 경우(NoCustomer)'와 '누구인지 알 수 없는 고객(UnknownCustomer)'을 각각의 특수한 사례로 나누어 다룰 수 있다 [1, 5].
* **데이터 보존과 활용**: 특수 사례 객체는 단순히 예외를 피하는 것을 넘어 자체적인 데이터를 가질 수도 있다 [5]. 가령 '알 수 없는 고객' 객체에 사용 기록 데이터를 임시로 저장해 두었다가, 나중에 고객의 정체를 알게 되었을 때 비용을 청구하는 식으로 활용이 가능하다 [5].
* **연산의 연속성 보장**: 특수 사례는 연산 시 예외를 던지지 않고 안전한 형태의 값을 지속적으로 반환하게 할 수 있다 [1]. 자바의 부동 소수점에서 '숫자가 아님(NaN)' 값으로 연산하면 계속 NaN이 반환되는 것처럼, Null 객체의 접근자(accessor)를 호출했을 때 또 다른 Null 객체를 반환하도록 구성하는 방식이 이에 해당한다 [1, 6].

## ⚖️ Trade-offs & Caveats
* 특수 사례 클래스나 Null 객체로 동작을 통합하는 것은 대부분의 클라이언트들이 해당 특수 상황에 대해 '동일한(표준적인) 응답'을 원할 때만 실질적인 의미가 있다 [7]. 
* 많은 클라이언트가 같은 동작을 원한다면 기본으로 제공되는 특수 사례의 동작에 의존하여 코드를 단순화할 수 있다 [7]. 
* 반면, 특정 클라이언트가 표준 응답과는 다른 특별한 대처 방식을 원한다면, 결국 해당 클라이언트는 `isNull()` 등과 같은 메서드를 사용해 직접 상태를 검사하고 별도의 처리를 수행해야 한다는 한계가 존재한다 [7].

---
*Last updated: 2026-05-03*