NullPointException
자바 개발자라면 많이 마주치는 오류라고 단언컨데 이야기할 수 있을것 같습니다. 처음 자바 개발을 배우며 매번 만나던 오류였고 개발자로 취업후 2개월정도는 많이 고생했던 기억이 납니다.
이제는 NullPointException 에러방지는 몸에 습관이 되어서 잘 만나보지 못하지만 혹여나 NPE로 고생하시는 개발자분들 위해 간단하게 제가 Java Spring Framework에서 NPE를 방지하는 방법을 공유하도록 하겠습니다.
// Db 엔티티 단건조회시 Optional 타입으로 조회
Optional<Board> optionalBoard = boardRepository.findById(boardId);
// 데이터가 존재하지 않을경우 체크
if (optionalBoard.isEmpty()) {
throw new IllegalArgumentException("존재하지 않은 boardId 입니다.");
}
// 데이터가 존재할경우
if (optionalBoard.isPresent()) {
// 데이터가 존재할경우 실행할 로직 작성
}
// 데이터가 존재할경우 (람다식)
optionalBoard.ifPresent(board -> {
// 데이터가 존재할경우 실행할 로직 작성
});
// 선행 로직에서 이미 Null체크를 했기때문에 Null Safe
Board board = optionalBoard.get();
// String Type 공백 Null 체크 (권장)
if (!StringUtils.hasText(board.getAuthor())) {
throw new IllegalArgumentException("작성자가 존재하지 않습니다.");
}
// String Type Null, 공백 체크 (Deprecated) -> " " -> false: 공백체크를 완벽하게 하지는 못한다.
if (StringUtils.isEmpty(board.getAuthor())) {
throw new IllegalArgumentException("작성자가 존재하지 않습니다.");
}
// 값이 확실하게 존재하는 값으로 비교
if (CONST_TITLE.equals(board.getTitle())) {
// 같을경우 로직
}
// 객체타입의 Null 체크
if (ObjectUtils.isEmpty(board.getCreateAt())) {
throw new IllegalArgumentException("작성일이 존재하지 않습니다.");
}
// 데이터가 복수의 데이터를 조회할경우
List<Board> boardList = boardRepository.findAll();
// List Size가 0인지, Null인지 체크
if (CollectionUtils.isEmpty(boardList)) {
throw new IllegalArgumentException("게시글 리스트가 존재하지 않습니다.");
}
Front에서 요청할때 RequestDto형식의 데이터는 벨리데이션 처리, 디비에서 읽어오는 데이터의 경우에는 무조건 NotNull인 컬럼에 대해서는 항상 사용시 Null 체크만 잘 하셔도 충분히 버그없는 코드를 잘 작성하실 수 있으실겁니다!
StringUtils, ObjectUtils, CollectionUtils는 Spring Framework에서 제공하는 클래스 입니다. 이점 참고 부탁드립니다.
그러면 행복 코딩하세요!
'Spring > experience' 카테고리의 다른 글
레거시 Spring Framework Project 패키지 리팩토링 (0) | 2025.02.16 |
---|---|
Java 부동소수점 계산시 정확한 계산을 위해 왜 BigDesimal을 사용해야하는가? (1) | 2025.02.10 |
Spring Boot Batch 프로젝트에서 Webclient 사용시 주의점 (0) | 2024.12.05 |
Spring Framework ResponseEntity 사용에 대한 고찰 (0) | 2024.11.17 |
현업에서 자주 사용한 Java Stream Api (3) | 2024.11.10 |