널 오브젝트 패턴(Null Object Pattern)
자바에서 흔히 마주칠 수 있는 에러가 NullPointerException이다. 이를 방지하기 위해 if(object!=null) 등의 코드를 활용하게 된다. 특정 객체가 존재하지 않는다는 것을 null이아닌 Null Object를 반환하여 NullPointerException을 방지하는 기법이 널 오브젝트 패턴이다. 단점으로는 잘못 사용할 경우 예외나 에러를 발견하기 어려울 수 있다.
예제
금액을 지불하는 날짜가 정해져있는 신용카드 고객들이 있다.
널 오브젝트 패턴 활용 전
Customer c = DB.getCustomer("Bob");
if (c != null && c.isTimeToPay(today)) {
c.pay();
}
널 오브젝트 패턴 활용 후
//getCustomer:DB에서 Bob을 찾아서 반환. 없을 경우 NULL Customer를 반환하는 코드
Customer e = DB.getCustomer("Bob");
if (c.isTimeToPay(today)) { //null 체크 삭제
c.pay();
}
interface Customer{
public boolean isTimeToPay(Date payDate);
public void pay();
//NULL OBJECT를 싱글톤으로 생성
public static final Customer NULL = new Employee(){
@Override
public boolean isTimeToPay(Date payDate){
return false;
}
@Override
public boolean pay(){
//Do nothing
}
}
}
요약
- 객체 정의 시 널 오브젝트를 정의하여 null 값 비교 코드를 줄이고 NPE도 방지할 수 있다.
'Domain > 디자인패턴' 카테고리의 다른 글
[디자인패턴] 컴포지트 패턴(Composite Pattern) (0) | 2021.04.04 |
---|---|
[디자인패턴] 미디에이터 패턴(Mediator Pattern) (0) | 2021.04.03 |
[디자인패턴] 데코레이터 패턴(Decorator Pattern) (0) | 2021.04.02 |
[디자인패턴] 프록시 패턴(Proxy Pattern) (0) | 2021.04.01 |
[디자인패턴] 퍼사드 패턴(Facade Pattern) (0) | 2021.03.30 |