[디자인 패턴] 널 오브젝트 패턴

[원본 링크]

널 오브젝트(Null Object) 패턴은 말 그대로 널 객체를 구현하는 패턴이다.
이름처럼 오류를 처리할 때 종종 사용할만 하다.

만약 객체를 받아오는데, 생성 시에 뭔가 오류가 발생하면 어떻게 해야할까?
그냥 null을 반환할 수도 있다. 근데 이건 null 예외가 발생할 위험이 있으므로 좋지 않다.
두번째 방법은 해당 생성 메소드에서 예외를 던지는 것이다. 사실 이것도 그리 좋지는 않다.
널 오브젝트 패턴은 이런 경우에 보다 매끄러운 코드를 작성할 수 있게 해준다.

코드를 한번 보자.
이 인터페이스는 자기소개를 하는 하나의 메서드를 갖는다.

그리고 이걸 2개만 구현하겠다.

그리고, 생성 함수를 대충 만들어본다. 여기선 생성이 실패할 수도 있는데,
그럴때는 그냥 null만 반환한다.

저기선 랜덤값이 2가 나올 수도 있다.
그럴 때 예외가 터질 수 있는 것이다.

저걸 감안하지 않고 생각없이 돌리면

이렇게 예외가 터진다.

임시방편은, 매번 null 체크를 하는거다.
잘 동작하긴 하지만 당연히 그리 좋은 방법도 아니고, 까먹기 좋다.

그렇다고 여기서 예외처리문을 사용하면 흐름이 괜히 복잡해진다.
이럴 때 널 오브젝트를 쓸만하다.
꼭 이래야하는 건 아니지만, 로버트 마틴이 제시한 구현 형태는 이렇다.
인터페이스에 Null이란 정적필드를 두고, 익명 클래스를 구현한다.

이게 널 오브젝트다.
이 객체는 존재는 하지만, 아무것도 행하지 않는다.

오류가 발생할 때 이걸 던져준다.

이건 예외가 발생해도 아무 문제 없이 작동이 된다.

이게 널 오브젝트 패턴이다.

뭔가 제대로 된 처리와 오류 메세지를 남기고 싶다면, Null 오브젝트를 별개 클래스로 만들어서 오류 메세지를 저장하도록 할 수도 있겠다.


예시 코드
https://github.com/myyrakle/DesignPatterns/tree/master/Null%20Object

참조
클린 소프트웨어