Null Object Pattern
함수에서 null을 리턴하는 경우, 함수를 사용하는 곳에서 null을 처리하는 예외처리를 해줘야한다.
반면, Null Object Pattern을 사용하면 null 객체를 처리하는 로직이 전파되는 문제를 줄일 수 있다. 그 결과, 중복 코드를 줄일 수 있어서, 코드가 단순해진다.
예를 들어, 회원 정보를 조회하는 다음과 같은 코드가 있다고 생각해보자.
public Customer GetByPhoneNumber(string phoneNumber)
{
return _customerRepository
.List(c => c.PhoneNumber == phoneNumber)
.FirstOrDefault();
}
var customer = GetByPhoneNumber(phone);
int orderCount = customer != null ? customer.OrderCount : 0;
decimal totalPurchase = customer != null ? customer.TotalPurchase : 0m;
이 경우, 매번 값이 null인지 체크한 후 기본값을 할당해야한다.
그런데 다음과 같이 기본값을 지닌 회원 객체를 반환하면, null check에 대한 책임을 한 곳으로 모을 수 있다.
public class Customer
{
public static Customer NotFound =
new Customer() { OrderCount=0, TotalSales=0m };
// other properties and behavior
}
or
public class NullObjectCustomer : Customer
{
public NullObjectCustomer(){
OrderCount=0;
TotalSales=0m;
}
// other properties and behavior
}
public Customer GetByPhoneNumber(string phoneNumber)
{
var customer = _customerRepository
.List(c => c.PhoneNumber == phoneNumber)
.FirstOrDefault();
if(customer == null) { return Customer.NotFound; }
// or if(customer == null) { return new NullObjectCustomer(); }
return customer;
}
or
return new NullObjectCustomer();
https://deviq.com/design-patterns/null-object-pattern
'소프트웨어-이야기 > 프로그래밍 언어와 프레임워크' 카테고리의 다른 글
[예외처리] notification pattern (0) | 2022.06.13 |
---|---|
[Rule Engine] 비즈니스 규칙 엔진 (0) | 2022.06.11 |
[DDD] Specification 명세 (0) | 2022.05.15 |
Java14. Record Keyword (0) | 2022.05.14 |
Spring과 의존성 주입 (DI) (0) | 2022.04.18 |