모르지 않다는 것은 아는것과 다르다.

Spring

Null Safety

채마스 2022. 3. 14. 18:16

Null Check

  • 개발을 하다보면, NPE 는 자주 등장하는 에러이다.
  • 그럼 어떻게하면 NPE(Null Pointer Exception) 을 피할 수 있을까?
  • 아래와 같이 Null Check 를 잘 해주면 된다.
public void method(String request) {
    if(request == null) return;

    System.out.println(request.toUpperCase());
}
  • 위와 같이 null 여부를 체크해주면 NPE 를 피할 수 있다. -> 하지만 개발자가 실수로 null 체크를 하지 않았을 때, 에러의 위치를 정확히 파악하기 힘들 수도 있다.
  • 이러한 문제를 해결하기 위해서는 Spring 에서는 @NonNull, @Nullable 애노테이션을 제공한다.

 

@NonNull

  • 해당 값이나 함수 등이 Null이 아님을 나타내는 애노테이션이다.
  • org.springframework.lang.NonNull 를 사용한다.

메서드 파라미터에 붙이는 경우

  • null 이라는 데이터가 들어오는 것을 사전에 방지한다.
public void method(@NonNull String request) {
    if(request == null) return; // 경고 메시지가 보인다.

    System.out.println(request.toUpperCase());
}
  • @NonNull 이라고 설정한 파라미터에 null 을 체크하면 경고 메시지가 보인다.

 

프로퍼티에 붙이는 경우

@NonNull
public String request = "Request";

public void method() {

    request = null; // 경고 메시지가 보인다.
}
  • 위와 같이 null 을 저장하는 경우 경고

 

메서드에 붙이는 경우

@NonNull
public String method() {
    return null
}
  • 위와 같이 null 을 리턴하는 경우 경고 메시지가 보인다.

 

@Nullable

  • @NonNull과 반대로 해당 데이터가 null일 수 있음을 명시한다.
@Nullable
public String request = "request";

public void method(){
    System.out.println(request.toUpperCase());
}
  • 해당 어노테이션이 붙은 값을 사용하는 경우 null check를 항상 수행하도록 경고 메시지가 보인다.




REFERENCES

  • 양세열님의 스프링 프레임워크

'Spring' 카테고리의 다른 글

@ControllerAdvice  (0) 2022.03.19
설정파일(Properties) 관리  (0) 2022.03.19
프락시 팩토리빈과 @AspectJ  (0) 2022.03.11
프로파일과 Resource 인터페이스  (0) 2022.03.10
캐시를 사용한 읽기 속도 최적화  (0) 2022.03.10