Parameter가 null이 들어온 경우 예외처리를 해줘야 되는 것은 개발자라면 누구나 아는 사실일 것이다.
하지만, 이러한 상황에서 parameter를 잘못 넘긴 경우이므로
IllegalArgumentException
인가, null을 받아왔으니NullPointerException
인가?
결론부터 말하자면, 내 생각엔 IllegalArgumentException
으로 예외처리하는게 의도에 더 가깝지 않을까 생각한다.
Parameter
에 null
이 들어온 것이므로 Illegal(위법의) Argument(인자) Exception를 던져 처리하는 것이 맞다는 의견이 많음.Preconditions.class
에 checkNotNull
메서드에서는 NullPointerException
을 던지고 있음.두 Exception의 명시된 Javadoc을 살펴보자
위의 내용을 해석해보자
부적절한 인수
를 통과했음을 나타내기 위해 던집니다.위의 내용을 해석해보자
인스턴스 메서드를 '호출'
하는 경우필드에 '접근'하거나 '수정'
하는 경우NullPointerException object는 virtual machine에 의해 억제가 비활성화 되거나 stack trace을 쓸 수 없는 경우에 발생할 수 있음.
Javadoc을 확인해도 무엇이 맞다고 정확히 말할 수 있는 사람은 없을 것 같다..
같이 프로그램을 작성하는 동료가 존재한다면 약속이 필요하다. 처리하는 방식을 일관성있게 통일시키면 고민 할 필요가 없어지지 않을까?
정답이 없는 논쟁이지만 나는 IllegalArgumentException
으로 예외처리를 하여 일관성을 유지하며, 잘못된 인자(null
)가 들어왔다는 것을 알려주는게 더 좋은 처리 방식인 것 같다.
구글 Guava에서는 NullPointerException으로 처리하도록 통일해서 저렇게 처리한게 아닐까? 라는 생각이 든다.