본문 바로가기
Spring/experience

SpringFramework NullPointException 방지법

by include_hoany 2025. 1. 13.

 

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에서 제공하는 클래스 입니다. 이점 참고 부탁드립니다.

 

그러면 행복 코딩하세요!