개발/Java & Kotlin

[Java] Null Object Pattern 공부

devhooney 2025. 5. 4. 13:29
728x90

 

1. 개념

 

널 오브젝트 패턴은 null을 반환하거나 사용하지 않고, 그 대신에 행동은 하지만 아무 효과가 없는 객체를 반환하거나 사용하는 방식이다. 이 객체는 실제 구현체와 동일한 인터페이스를 구현하지만, 내부 로직은 아무것도 하지 않는다.

 

 

728x90

 

 

 

2. 구성요소

 

- 인터페이스 or 추상 클래스
  > 공통된 메서드 정의

- 실제 구현 클래스(Real Object)
  > 기능을 실제로 수행

- 널 오브젝트 클래스(Null Object)
  > 아무것도 하지 않는 구현체 (혹은 디폴트 동작만 수행)

 

예제)

public interface Log {
    void info(String message);
}

// 실제 로깅 구현
public class ConsoleLog implements Log {
    public void info(String message) {
        System.out.println("INFO: " + message);
    }
}

// Null Object 구현
public class NullLog implements Log {
    public void info(String message) {
        // 아무것도 하지 않음
    }
}

// 사용 예
public class App {
    private final Log log;

    public App(Log log) {
        this.log = log;
    }

    public void run() {
        log.info("앱이 실행됨");
    }
}

// 메인
public class Main {
    public static void main(String[] args) {
        Log log = new NullLog(); // 로깅 비활성화
        App app = new App(log);
        app.run(); // 아무 출력도 없음
    }
}

 

 

 

 

3. 장점

 

null 체크 불필요 → 코드 간결해짐

런타임 NullPointerException 방지

전략 패턴처럼 사용 가능 (행동을 바꾸는 객체를 주입)

 

 

 

 

4. 단점

 

의도적으로 아무 일도 하지 않는 객체가 동작하기 때문에, 디버깅 시 문제가 감춰질 수 있음

잘못 사용하면 버그를 놓칠 위험 있음

 

 

 

 

5. 언제 쓰면 좋을까?


선택적으로 기능(예: 로깅, 알림 등)을 끄거나 대체할 때

컬렉션에서 null 대신 의미 있는 기본 객체를 사용할 때

객체의 존재 여부를 판단하지 않고 동일한 흐름을 유지하고 싶을 때

 

 

 

728x90