프로그램 아키텍쳐/Refactoring

Null 객체의 도입(Introduce Null Object)

본클라쓰 2010. 12. 9. 12:59

 

어떤 경우에는 Null 값이 들어오고 어떤 경우에는 정상적인 값이 들어올 경우가 있다면 Null 객체를 도입함으로써 Null 체크를 줄일 수 있다. Null 객체의 도입은 프로그램 코드 안에서 Null 체크가 많을 경우 유용한다.

 

 

 

Null 객체 만들기

  1. 원래 클래스의 서브 클래스를 만든다. (원래 클래스에는 Null체크가 있거나, 필요한 클래스를 말한다.)
  2. 서브 클래스에 isNull() 메소드를 만든다.(정상적인 경우 false, null일 경우 true를 반환)
  3. 원래 클래스를 Null 클래스로 치환한다.
  4. Null 체크가 필요하면 isNull() 메소드를 호출하여 치환한다.

 

Null 체크를 피하기 위해 Null 객체를 도입할 때는 주의가 필요하다. Null 객체를 도입함으로써 Null 체크는 줄어들지만 클래스는 증가하기 때문이다. 또한, Null 클래스를 선언할 때는 외부 클래스로 상속받아 구현하는 것보다 내부 클래스로 선언하게 되면 클래스 관리가 좀 더 편리해진다.

 

하지만 무분별하게 Null 객체를 도입하는 것은 지양되어야 한다. 패턴을 적용하는 경우나 리팩토링을 하는 경우에도 해결하고자 하는 문제가 무엇인가를 의식해야 한다. 따라서 Null 객체의 도입하는 이유는 Null 체크가 과도하게 많을 경우 도입하는 것이다.

 

즉, 패턴이나 리팩토링을 할 때는 트레이드오프를 잘 생각한 후 적용하는 것이 좋다. 케이에브스키의 책 ‘패턴 지향 리팩토링 입문’에서는 트레이드오프를 고려하지 않고 패턴을 적용하고 싶은 태도를 패턴광(Pattern Happy)이라고 부르면 이것에 빠지지 않게 주의해야 한다고 말하고 있다.