본문 바로가기

설계/디자인 패턴

널오브젝트 패턴

개요

자바에 변수가 선언되어 있고 여기에 값이 할당되지 않은 상태에서 변수를 참조하면 null pointer exception 이 발생 됩니다.

이게 의도했던 의도하지 않았던 unchecked exception 이 발생되기 때문에 시스템이 오류 상황을 미리 알기란 참 어려운 문제 입니다.

널오브젝트(NULL OBJECT) 패턴은 이와 같이 값이 null 일때 발생할 수 있는 문제를 최대한 방어하기 위한 패턴 입니다.


 

설명

먼저 계정 정보를 반환하는 service 함수가 있다고 가정해 보겠습니다. 이때 계정 정보가 없다면 null 을 반환 하는게 일반적인 함수 구현 방식인데 이때 null 을 반환 하는게 아니라 넬오브젝트를 반환하자는게 이 패턴의 핵심 입니다.

클래스다이어그램을 살펴보면 널오브젝트 NullAccount 는 AccountImpl 과 동일한 Account 인터페이스를 구현하고 있습니다.

AccountService 에서 getById 함수를 통해 Account 정보를 조회 하려 할때 반환 값이 null 이라면 NullAccount 널오브젝트를 반환하게 되는 겁니다.

널오브젝트는 내부에는 아무런 값이 들어 있지 않은 상태이지만 getById 함수는 최소한 null 을 반환 하지는 않습니다. 널오브젝트를 이용하면 비지니스 로직이 null 에 대한 신경을 쓰지 않고도 유효한 객체를 반환 한다는 것을 보장해 줄 수 있다는 것을 의미 합니다. 이때 반환된 널오브텍트는 아무런 동작을 하지 않습니다.

하지만 자바 8 부터 지원하기 시작한 Optional 을 이용하면 보다 쉽게 null 값에 대한 방어를 할 수 있습니다.


 

정리

  • 널오브젝트 패턴은 반환값이 항상 유효한 객체를 반환해 줌을 보장해 줄 수 있습니다.
  • 널오브젝트는 대상 구현체와 같은 인터페이스를 구현 합니다.
  • 자바 8 부터 지원하기 시작한 Optional 을 이용하면 쉽게 null 에 대한 방어를 할 수 있습니다.

'설계 > 디자인 패턴' 카테고리의 다른 글

널오브젝트 패턴  (0) 2020.08.22
모노스테이트 패턴  (0) 2020.08.22
싱글톤 패턴  (0) 2020.08.20
파사드 패턴  (0) 2020.08.20
스트래티지 패턴  (0) 2020.08.18
템플릿 메소드 패턴  (0) 2020.08.18