Objects.requireNonNull()
사용 이유
Objects.requireNonNull() 메서드 코드
public static <T> T requireNonNull(T obj) {
if (obj == null)
throw new NullPointerException();
return obj;
}
당연하게 느껴지는 코드이고, null일 때 당연히 NPE가 발생하는데 왜 사용해야 할까?
명시성 explicity
null이 아니어야 함을 명시적으로 표현할 수 있다.
따라서 과거에 짠 코드가 미래에 사용될 때 해당 객체가 null이면 안된다는 것을 개발자가 명시적으로 알 수 있다.
card.setId(Objects.requireNonNull(keyHolder.getKey()).longValue());
fail-fast
fail-fast란 장애가 발생한 시점에서 즉시 파악할 수 있는 것을 뜻한다.
public class Action {
String status
}
public class Card {
Action action;
public Card(Action action) {
this.action = Objects.requireNonNull(action);
}
}
- Objects.requireNonNull()를 사용할 경우 생성 시점에 바로 NPE 발생한다!
Action action = null; Card card = new Card(action); //생성 시점에 바로 NPE발생
- 사용하지 않는 경우는 객체 생성 시에는 에러가 발생하지 않고, 객체가 사용할 때 에러가 발생한다.
public class Action {
String status
}
public class Card {
Action action;
public Card(Action action) {
this.action = action;
}
public Action getAction(){
return action;
}
}
Action action = null;
Card card = new Card(action); //객체 생성시에는 NPE가 발생하지 않는다.
Action action = card.getAction(); // NPE 발생
항상 같은 시점에 exception 발생
- 객체 생성하는 시점에 에러가 발생하여 시스템의 일관성을 높히고 디버깅이 용이해진다.
명시적 NPE가 성능상의 이점
- JVM이 발견해서 NPE를 발생하는 것보다 명시적인 NPE가 성능상의 이점이 있다고 한다.
'Java관련 > Java' 카테고리의 다른 글
Java 데이터 타입, 변수, 배열 (0) | 2022.07.31 |
---|---|
NoSuchElementException (0) | 2022.04.16 |
static (0) | 2022.04.13 |
로깅 라이브러리 Logging Library (0) | 2022.04.11 |
정적팩토리 메서드 (0) | 2022.04.09 |
댓글