개발/자바
자바 ) requireNonNull (Feat. Optional)
kakk789
2023. 2. 5. 18:07
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
반응형