1. Null Object Pattern이란?
- Null Object Pattern은 null 참조를 특별한 객체로 대체하여 null 체크를 제거하는 디자인 패턴입니다.
- 이번 글에서는 조영호님의 "오브젝트"라는 도서에서 영화 할인 정책을 예시로 이 패턴의 효과적인 활용법을 설명합니다.
정보
Null Object Pattern의 핵심은 "아무것도 하지 않는 행동"을 가진 객체를 만들어 null 대신 사용하는 것입니다.
2. 문제 상황: null 체크의 번거로움
2.1 기존 설계의 문제점
- 영화 예매 시스템에서 Movie 클래스가 할인 정책을 가질 때, 할인 정책이 없는 경우를 어떻게 처리해야 할까요?
기존 방식 - null 허용
public class Movie {
private String title;
private Duration runningTime;
private Money fee;
private DiscountPolicy discountPolicy; // null 가능
public Movie(String title, Duration runningTime, Money fee,
DiscountPolicy discountPolicy) {
this.title = title;
this.runningTime = runningTime;
this.fee = fee;
this.discountPolicy = discountPolicy;
}
public Money calculateMovieFee(Screening screening) {
if (discountPolicy == null) {
return fee;
}
return fee.minus(discountPolicy.calculateDiscountAmount(screening));
}
}
- 위 방식의 문제점
- 매번 null 체크를 해야 함
- 실수로 null 체크를 빼먹을 위험
- 코드 가독성 저하
- 다형성의 장점을 활용하지 못함
3. Null Object Pattern 적용
3.1 다중성을 1로 고정
- 할인 정책의 다중성을 "0 또는 1"에서 "1"로 변경하고, 할인이 없는 경우를 위한 특별한 정책을 만듭니다.