[Spring] Null-safety : Null 관련 애노테이션

2022. 10. 31. 14:24JAVA/Spring

1. Null-safety

스프링 프레임워크 5에 추가된 Null 관련 애노테이션

Null 관련 애노테이션

  • @NonNull
  • @Nullable
  • @NonNullApi(패키지 레벨 설정)
  • @NonNullFields(패키지 레벨 설정)

목적

  • 툴의 지원을 받아 컴파일 시점에 최대한 NullPointerException을 방지하기 위함

 

2. Null-safety @NonNull 실습

 

1. @NonNull 애노테이션을 적용할 구현 코드 정의

@Service
public class EventService {

    @NonNull
    public String createEvent(@NonNull String name){
        return "hello " + name;
    }

    @NonNull
    public String publishEvent() {
        return null;
    }
}
  • 파라미터에 @NonNull 적용 : name 변수는 null 금지
  • 메서드 정의부에 @NonNull 적용 : 반환 값의 null 금지

 

2. [파일]→[설정]→[컴파일러]→어노테이션 구성으로 들어가서 Null관련 애노테이션 추가

  • 버튼 클릭하여 org.springframework.lang.Nullable 추가

  • 버튼 클릭하여 org.springframework.lang.NonNull, NonNullApi, NonNullFields 추가

 

3. [파일]→[설정]→[컴파일러]→[어노테이션 프로세서]→어노테이션 처리 활성화 체크박스 클릭

  • NonNull 애노테이션 적용시 컴파일 타임에 컴파일 되지 못하도록 하기 위함

 

4. 테스트 코드 추가 및 실행 확인

@SpringBootTest
public class EventServiceTest {
    @Autowired
    EventService eventService;

    @Test
    public void testCreateEvent_whenParameterIsNull(){
        //given

        //when
        String result = eventService.createEvent(null);
        //then
    }
    
    @Test
    public void testPublishEvent_whenReturnIsNull(){
        //given
        
        //when
        String result = eventService.publishEvent();
        //then
    }
}

실행 결과 : 컴파일 실패

 

3. Null-safety @NonNullApi 실습

 

1. [파일]→[새로 만들기]→package-info.java 생성및 정의

@NonNullApi
package kr.yh;

import org.springframework.lang.NonNullApi;
  • kr.yh 패키지 이하 레벨에 Null을 금지
  • Null을 허용하기 위해서는 해당 로직에 @Nullable 애노테이션을 적용하면 됨

References

source code : https://github.com/yonghwankim-dev/spring_study/tree/master/spring_null-safety/src/main/java/kr/yh
[인프런] 스프링 프레임워크 핵심 기술