본문 바로가기
개발/자바

자바 ) requireNonNull (Feat. Optional)

by kakk789 2023. 2. 5.

requireNonNull

Objects.requireNonNull(변수, "메시지");
  • 해당 변수가 null일 경우에 즉각적으로 NPE가 발생한다.
  • 보통 Fast-fail를 위해 사용한다 (장애 발생 시점을 즉시 파악하기 위함) - > 디버깅 용이
  • A객체, B객체가 존재한다. 만약 B객체의 생성자 파라미터로 A객체 타입을 선언
String aaa = null;
System.out.println(Objects.requireNonNull( aaa, "what"));

함수 내부

public static <T> T requireNonNull(T obj, String message) {
    if (obj == null)
        throw new NullPointerException(message);
    return obj;
}
  • 함수 내부를 보면 확인 가능하듯이 즉각적으로 NPE로 예외처리 된다.
그렇다면 Optional과는 어떻게 다를까?
우선 Optional에 대해 알아보자

Optional

  • null 반환 시 에러를 유발할 가능성이 높은 상황에서 메서드의 반환 타입으로 Optional을 사용
Address address = new Address();
System.out.println(Optional.of(address).map(Address::getCity).orElse("서울"));

차이점

:requireNonNull은 NPE 발생 시 바로 예외처리가 발생된다. (프로그래머가 디버깅 하기 좋음)
:Optional.of는 null 가능성이 있는 값을 처리 하는데 초점이 맞춰져 있다.

용도

: 각자 사용법이 다르며 생성자나 메소드에서 절대 null이 되면 안되는 매개변수에는 Objects.requireNonNull 
: 프로그램 내에서 객체가 null일 가능성이 있을때 NPE를 막기 위해선 Optional을 사용하면 되겠다.

참고자료

https://mangkyu.tistory.com/203
https://hudi.blog/java-requirenonnull/
https://velog.io/@rockpago/Objects.requireNonNull
반응형

댓글