Objects.requireNonNull() - java.util.Objects

2022. 4. 16. 20:00·Java

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 데이터 타입, 변수, 배열  (0) 2022.07.31
NoSuchElementException  (0) 2022.04.16
static  (0) 2022.04.13
로깅 라이브러리 Logging Library  (0) 2022.04.11
정적팩토리 메서드  (0) 2022.04.09
'Java' 카테고리의 다른 글
  • Java 데이터 타입, 변수, 배열
  • NoSuchElementException
  • static
  • 로깅 라이브러리 Logging Library
devstep
devstep
웹 백엔드 개발자
  • devstep
    개발 여정
    devstep
  • 전체
    오늘
    어제
    • 분류 전체보기 (89) N
      • Java (24)
      • Spring Framework (16)
        • Spring (13)
        • JPA (3)
      • Database (8)
        • RDBMS공통 (1)
        • MySQL (6)
        • Redis (0)
        • Oracle (1)
      • Concept (13)
        • 테스트코드 (4)
        • 클린코드 (2)
        • 성능테스트 (4)
        • 설계 (1)
        • 인증 (1)
        • REST API (1)
      • git (2)
      • Intellij (4)
      • Computer Science (3)
        • 네트워크 (1)
        • 자료구조 (1)
        • 보안 (1)
      • Essay (17) N
        • Learning Essay (10)
        • WIL (7) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    블록암호화
    부하테스트
    innodb
    storageEngine
    단위테스트
    클린코드
    nofile
    JavaMemoryModel
    비대칭암호화
    tdd
    seed
    보안
    JVM
    JMeter
    성능테스트
    linux
    component
    부하테스트도구
    springsecurity
    자바메모리모델
    DDD
    nginx
    인텔리제이실행에러
    applicationcontext
    테스트코드
    대칭암호화
    bean
    aggregate
    ClusteredIndex
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
devstep
Objects.requireNonNull() - java.util.Objects
상단으로

티스토리툴바