널 객체 패턴, 함부로 쓰면 버그

by DD
11개월 전
조회수 1

널 객체 패턴은 `null` 대신 특정 객체를 사용해 오류를 처리하는 디자인 패턴이다.

오류 처리를 위해 널 객체 패턴을 사용하면 코드 단순화가 가능하지만, 타입 안전성을 저해할 수 있다.

경계 조건일반 조건을 명확히 구분해야 할 경우, Optional 타입 사용을 권장한다.

널 객체 패턴의 작동 원리

널 객체 패턴은 `null` 대신 특정 값을 갖는 객체를 사용하여 오류 처리를 단순화한다. 구체적으로, `TeamDao.selectMemberIds`가 `null`을 반환하는 경우, `.orEmpty()`를 사용하여 빈 List로 대체한다. 따라서 호출하는 쪽에서는 `null` 체크 없이 코드를 작성할 수 있다.

널 객체 패턴의 트레이드오프

널 객체 패턴은 코드 간결성을 제공하지만, 타입 안전성을 희생시킨다. 반면, `isInvalid`와 같은 속성을 잊어버리면 런타임 오류가 발생할 수 있다. 따라서 경계 조건일반 조건을 명확히 구분해야 하는 경우, Optional 타입을 사용하는 것이 더 안전하다.

타입 안전성을 확보하는 방법

오류 값을 구분해야 할 때는 널 객체 패턴 대신 Optional 타입을 사용하는 것이 좋다. 구체적으로, `List?` 대신 `List`를 사용하고, 빈 목록을 오류 값으로 취급한다. 따라서 동적 타입 언어에서도 런타임 오류를 통해 버그를 조기에 발견할 수 있다.

코드 품질 개선 기법 16편: 불이 'null'인 굴뚝에 연기가 'null'이 아닐 수 없다