[Spring] Null-safety : Null 관련 애노테이션
2022. 10. 31. 14:24ㆍJAVA/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
[인프런] 스프링 프레임워크 핵심 기술
'JAVA > Spring' 카테고리의 다른 글
[SpringBoot] 프로파일(Profile) (0) | 2022.11.01 |
---|---|
[Spring][IoC] @Component와 컴포넌트 스캔(Component Scan) (0) | 2022.11.01 |
[Spring] 스프링 AOP : @AOP (0) | 2022.10.31 |
[Spring] 프록시 기반 AOP (0) | 2022.10.30 |
[Spring] Spring AOP(Aspect-Oriented Programming) 개념 (0) | 2022.10.30 |