2024. 3. 12. 23:58ㆍCS - 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()
이런식으로 파이썬에서 구현해볼수 있습니다.
기록 안하는 경우도 확인해 볼 수 있습니다.
'CS - Roadmap.sh > 10. Design Patterns' 카테고리의 다른 글
10.5 Type Object Pattern (타입 객체 패턴) (2) | 2024.03.14 |
---|---|
10.3 Dependency Injection (DI, 의존성 주입) (0) | 2024.03.11 |
10.2 Architectural Patterns(아키텍처 패턴) (0) | 2024.03.11 |
10. Design Patterns - 10.1 GoF Design Pattern - 10.1.1 Singleton(싱글톤 패턴) (0) | 2024.03.09 |