10.4 Null Object Pattern(널 오브젝트 패턴)

2024. 3. 12. 23:58CS - Roadmap.sh/10. Design Patterns

※[https://roadmap.sh/computer-science]를 따라서 공부하고 기록한 글입니다.

cs - 10. Design Patterns - 10.4 Null Object Pattern

Null Object Pattern

Null object pattern is a design pattern that is used to represent a null value with an object. It is a way to avoid null reference exceptions by providing a default object that does nothing. It is a way to provide a default behavior in case data is not available.

 

널 객체 패턴은 객체로 널 값을 표현하는 데 사용되는 디자인 패턴입니다. 아무 작업도 수행하지 않는 기본 객체를 제공하여 널 참조 예외를 방지하는 방법입니다. 데이터를 사용할 수 없는 경우 기본 동작을 제공하는 방법입니다.

 

 

 

Null Object Pattern

 

널 오브젝트 패턴은 널(null)참조를 체크하는 대신 널 객체를 사용해 널 참조를 대신 하는 패턴입니다. 이 패턴은 주요 목적은 코드 내에서 널 체크를 줄여 가독성, 유지보수성을 향상시켜, 널 참조로 인해 발생할 수 있는 예외나 오류를 미연에 방지하는 것입니다.

 

 

 

Null Object Pattern 의 주요 구성 요소

1. 추상 컴포넌트(Abstract Component)

 인터페이스나 추상 클래스로, 널 객체와 실제 객체가 구현해야 하는 메서드를 정의

 

2. 실제 객체 (Real Object)

실제로 기능을 제공하는 클래스, 추상 컴포넌트를 상속하거나 구현합니다.

 

3. 널 객체(Null Object)

추상 컴포넌트를 상속하거나 구현하지만, 실제 작업 수행 x or 기본값 반환.

 

4. 클라이언트 (Client)

실제 객체와 널 객체를 사용하는 코드 부분, 이 패턴을 사용해서 에서 널 체크를 줄일수 있습니다.

 

 

장점을 정리해보자면

1. 널 체크 감소

2. 안정성 향상

3. 디폴트 동작 제공

이 있습니다.

 

 

In Python
from abc import ABC, abstractmethod
# 1. 로그 기록기 인터페이스

class Logger(ABC):
    @abstractmethod
    def log(self, message: str) -> None:
        pass

# 2. 실제 로그 기록기 구현(real)

class RealLogger(Logger):
    def log(self, message: str) -> None:
        print(f"Logging: {message}")

# 3. 널 객체 (Null)

class NullLogger(Logger):
    def log(self, message: str) -> None:
        pass  

def main():
    # 로그를 기록해야 하는 경우
    logger = RealLogger()
    logger.log("이 메시지는 로그에 기록됩니다")

    # 로그를 기록하지 않아도 되는 경우
    no_logging_needed = NullLogger()
    no_logging_needed.log("이 메시지는 기록되지 않습니다")

if __name__ == "__main__":
    main()

 

이런식으로 파이썬에서 구현해볼수 있습니다.

 

기록 안하는 경우도 확인해 볼 수 있습니다.

728x90