[Spring + JPA] List<> 자료형 Builder 패턴 사용시 NullPointerException

Dev_ch·2023년 2월 22일
0
post-thumbnail
post-custom-banner

개발을 하다보면 예외처리를 하지 않은 상태에서 자주 마주치는 NullPoitnerException이다,, 다만 이번에는 연관관계의 테이블에서 List<> 자료형으로 선언해둔 값을 가져올려 했는데 해당 Exception이 발생했다. 이와 같은 상황에 대해 해결하는 방법을 알아보도록 하자.


문제상황

이미 빌드할때부터 위 사진 처럼 난리가 난 상태였지만 이를 잘 읽어보지 않고 계속 돌려대다가 oneToMany로 연결된 값을 꺼낼려다가 NullPointerException이 발생하였다.

원인

빌더 패턴을 이용하게되면 우리가 미리 넣어놨던 값은 없어지고 필드의 기본 초기값으로 생성된다!

@Entity
.
.
.
@Builder
public class Content extends BaseEntity {
.
.
.
@OneToMany(mappedBy = "content")
 private List<ContentImage> contentImages = new ArrayList<>();
 }

위와같이 엔티티를 생성하고 빌더패턴을 통해 인스턴스를 만들었다면, 해당 ArrayList<>()라는 값이 전달되지 않고 필드의 기본 초기값인 null이 들어가게 된다. 그러다보니 아무리 정보를 가져오려해도 해당 객체에는 null이 들어가있어 조회를 하게되면 NullPointerException이 발생하던 것 이다.

해결

@Entity
.
.
.
@Builder
public class Content extends BaseEntity {
.
.
.
@OneToMany(mappedBy = "content")
@Builder.Default
 private List<ContentImage> contentImages = new ArrayList<>();
 }

@Builder 어노테이션에서 지원하는 Default 기능으로 생성하려하는 인스턴스의 기본 값을 세팅해줄수있다. 위와같이 선언해둔 항목은 인스턴스 생성시 필드의 기본 초기값이 들어가지 않고 세팅해둔 기본 값이 들어간다.

그렇다면 위 객체는 null이 아닌 new ArrayList<>()로 초기화 되게 된다.


되게 별거 아니지만, 이번 Exception 때문에 빌더패턴과 구조에 대해 다시 한번 알아갈 수 있었던 것 같다. 개발을 할때는 해보지 않았던 방법과 기술을 써보는것도 중요하지만 여러 Exception을 만나보면서 얻어가는것이 훨씬 많은 것 같다 🫢

profile
내가 몰입하는 과정을 담은 곳
post-custom-banner

0개의 댓글