IllegalArgumentException VS NullPointerException

f1v3·2023년 11월 15일
1

Java

목록 보기
1/2

Parameter가 null이 들어온 경우 예외처리를 해줘야 되는 것은 개발자라면 누구나 아는 사실일 것이다.

하지만, 이러한 상황에서 parameter를 잘못 넘긴 경우이므로 IllegalArgumentException인가, null을 받아왔으니 NullPointerException인가?

결론부터 말하자면, 내 생각엔 IllegalArgumentException으로 예외처리하는게 의도에 더 가깝지 않을까 생각한다.

  • 이러한 문제에 대해서 stackoverflow에서는 Parameternull이 들어온 것이므로 Illegal(위법의) Argument(인자) Exception를 던져 처리하는 것이 맞다는 의견이 많음.
  • Google Guava에서는 Preconditions.classcheckNotNull 메서드에서는 NullPointerException을 던지고 있음.
    google guava

두 Exception의 명시된 Javadoc을 살펴보자

IllegalArgumentException

위의 내용을 해석해보자

  • 메서드가 잘못되었거나 부적절한 인수를 통과했음을 나타내기 위해 던집니다.

NullPointerException

위의 내용을 해석해보자

  • null 객체의 인스턴스 메서드를 '호출'하는 경우
  • null 객체의 필드에 '접근'하거나 '수정'하는 경우
  • 배열처럼 null의 길이를 측정하려는 경우
  • 배열처럼 null의 슬롯에 접근하거나 수정하려는 경우
  • Throwable 값처럼 null을 던지려는 경우

NullPointerException object는 virtual machine에 의해 억제가 비활성화 되거나 stack trace을 쓸 수 없는 경우에 발생할 수 있음.

Javadoc을 확인해도 무엇이 맞다고 정확히 말할 수 있는 사람은 없을 것 같다..

결론

  • 같이 프로그램을 작성하는 동료가 존재한다면 약속이 필요하다. 처리하는 방식을 일관성있게 통일시키면 고민 할 필요가 없어지지 않을까?

  • 정답이 없는 논쟁이지만 나는 IllegalArgumentException으로 예외처리를 하여 일관성을 유지하며, 잘못된 인자(null)가 들어왔다는 것을 알려주는게 더 좋은 처리 방식인 것 같다.

구글 Guava에서는 NullPointerException으로 처리하도록 통일해서 저렇게 처리한게 아닐까? 라는 생각이 든다.

profile
🏃‍♂️‍➡️

0개의 댓글

관련 채용 정보