클린 소프트웨어 - 널 오브젝트 패턴

널 오브젝트 패턴

널 오브젝트 패턴을 사용하면 null 검사의 필요를 제거하고, 코드를 단순화할 수 있다.

protocol Employee { ... }

class NullEmployee: Employee { ... }
class EmployeeImplementation: Employee { ... }
let employee: Employee = DB.getEmployee("Bob")
if employee.isTimeToPay {
employee.pay()
}

위의 코드에서, DB.getEmployee(_:) 메소드는 주어진 인자에 맞는 데이터가 있을 때는 EmployeeImplementation 객체를, 그렇지 않을 때는 NullEmployee 객체를 반환한다. NullEmployee의 구현은 ‘아무 일’도 하지 않게 한다. ‘아무 일’이라는 것은 메소드의 구현에 달려 있다. 이러한 구조로 null 생성을 대체할 수 있다.

null 체크를 하는 대신, 언제나 올바른 동작을 하도록 보장할 수 있다.

Swift는 옵셔널을 지원하여 null 체크를 쉽게 할 수 있다.

결론

C 기반 언어를 사용해온 사람에게, 어떤 종류의 실패에 대해 null이나 0을 반환하는 함수에 익숙하므로 이러한 것들을 체크하여 실패 여부를 확인하는 것에 익숙하다.

널 오브젝트 패턴을 사용하면 함수가 실패한 경우에 null이나 0을 반환하거나, 에러를 던지는 대신, 항상 유효한 객체를 반환하는 것을 보장할 수 있다. 실패를 나타내는 객체는 ‘아무 일도’ 하지 않는다.