롬복의 @Builder 위험성?

ILLION·2024년 5월 13일
0

JAVA

목록 보기
3/3

Travel엔티티에 해당 코드가 있다.

@OneToMany(mappedBy = "travel", cascade = CascadeType.ALL)
    private List<TravelImage> travelImages = new ArrayList<>();

@Builder를 사용해서 Travel를 인스턴스화 하려고 시도했다.

public Travel toTravelEntity() {
        List<TravelImage> travelImages = toTravelImageEntity();
        Travel travel = Travel.builder()
                .title(title)
                .content(content)
                .price(price)
                .local(local)
                .country(country)
                .lat(lat)
                .lng(lng)
                .maxPeople(maxPeople)
                .build();
        travel.addTravelImages(travelImages);
        return travel;
    }

builder할 때 travelImages필드에 값을 안 넣은 상태로 build했다.
나는 당연히 Travel클래스의 travelImages필드에 new ArrayList<>(); 했기에
값을 안 넣어도 초기화가 될 줄 알았다.
그래서 travel.addTravelImages(travelImages); <- 해당 코드를 통해 travelImages필드에
값을 넣을려했는데 NPE이 생겨버린거다.

어쨌든 builder를 통해 초기화를 할 경우 어떤 필드(String 혹은 Collection 등등)에 값을 안 넣을 경우 초기화가 안되고 null로 된다.

번외로 travelImages필드에 값만 안 넣은 상황만 동일하게 하고 일반 생성자를 통해 인스턴스화를 해봤는데 그땐 정상적으로 travelImages필드가 초기화 되었다.

profile
결과를 중요시하기보단 과정을 중요하게 생각하는 마음가짐

0개의 댓글