널 오브젝트 패턴

1
2
3
4
Employee e = DB.getEmployee("Yang");
if (e != null && e.isTimeToPay(today)) {
e.pay();
}

이런 식의 코드가 있다고 하자. 데이터베이스에서 조회하는 직원이 존재하지 않으면 null을 반환할 수 있기 때문에 조건문에서 먼저 null 여부를 체크해줬다. 이런 번거로운 작업을 줄이고 로직 코드를 보다 더 깔끔하게 만드는 패턴이 널 오브젝트 패턴이다.

널 오브젝트 패턴


널 오브젝트 패턴은 추상화하려는 객체의 인터페이스를 만들고 그 구현체로 null을 의미하는 구현체와 진짜 객체를 의미하는 구현체를 만들어서 활용한다.
null을 의미하는 클래스의 메서드는 ‘아무 일’도 하지 않도록 구현한다. ‘아무 일’의 경우 각 메서드에 따라 다르다. isTimeToPay 메서드 같은 경우 null인 객체는 false를 반환하는게 자연스럽다.

널 오브젝트 패턴으로 코드를 고치면 다음과 같다.

1
2
3
4
Employee e = DB.getEmployee("Yang");
if (e.isTimeToPay(today)) {
e.pay();
}

물론 자바 8이후에는 Optional을 사용하면서 이런 문제가 많이 해소되었다.

Share