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
반응형
'개발 > 자바' 카테고리의 다른 글
자바 8) Stream.of vs Arrays.stream 차이점 (예제 - 배열 더하기) (0) | 2023.02.07 |
---|---|
자바 ) Generic (제네릭) 이해하기 (0) | 2023.02.06 |
자바 ) List의 내용을 대문자로 변경 후 List로 저장(feat. Stream) (0) | 2023.02.04 |
enum 타입의 정적 리소스.class 파일 배열 만들기 (일반식, Stream) (0) | 2023.02.03 |
자바8) 두 배열에서 중복 값 제거 (feat. Stream.of) (0) | 2023.02.01 |
댓글