널 객체 패턴, 함부로 쓰면 버그
by DD
11개월 전
조회수 1
널 객체 패턴은 `null` 대신 특정 객체를 사용해 오류를 처리하는 디자인 패턴이다.
오류 처리를 위해 널 객체 패턴을 사용하면 코드 단순화가 가능하지만, 타입 안전성을 저해할 수 있다.
경계 조건과 일반 조건을 명확히 구분해야 할 경우, Optional 타입 사용을 권장한다.
널 객체 패턴의 작동 원리
널 객체 패턴은 `null` 대신 특정 값을 갖는 객체를 사용하여 오류 처리를 단순화한다. 구체적으로, `TeamDao.selectMemberIds`가 `null`을 반환하는 경우, `.orEmpty()`를 사용하여 빈 List로 대체한다. 따라서 호출하는 쪽에서는 `null` 체크 없이 코드를 작성할 수 있다.
널 객체 패턴의 트레이드오프
널 객체 패턴은 코드 간결성을 제공하지만, 타입 안전성을 희생시킨다. 반면, `isInvalid`와 같은 속성을 잊어버리면 런타임 오류가 발생할 수 있다. 따라서 경계 조건과 일반 조건을 명확히 구분해야 하는 경우, Optional 타입을 사용하는 것이 더 안전하다.
타입 안전성을 확보하는 방법
오류 값을 구분해야 할 때는 널 객체 패턴 대신 Optional 타입을 사용하는 것이 좋다. 구체적으로, `List?` 대신 `List`를 사용하고, 빈 목록을 오류 값으로 취급한다. 따라서 동적 타입 언어에서도 런타임 오류를 통해 버그를 조기에 발견할 수 있다.