발생한 문제 ❗
Team 클래스에 members 리스트를 필드에서 초기화했는데 Team 객체 생성시 Null을 반환하는 문제
@Entity
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Team {
@Id @GeneratedValue
private Long id;
private String name;
@OneToMany(mappedBy = "team")
private List<Member> members = new ArrayList<>();
}
위와 같이 Team 클래스를 정의한 뒤
Team team = new Team().builder().id(1).name("anak").build();
빌드 패턴을 이용해서 id와 name을 초기화한 뒤 객체를 생성했다. 하지만 team 에서 members에 접근할 때 NPE 오류가 발생했다!!
이건 @Builder 를 Class에 붙였을 때 발생할 수 있는 문제로, build() 과정에서 포함되지 않은 필드들은 모두 Null 또는 0이 된다고 공식 문서에 적혀있었다
@Builder.Default
If a certain field/parameter is never set during a build session, then it always gets 0 / null / false. If you've put @Builder on a class (and not a method or constructor) you can instead specify the default directly on the field, and annotate the field with @Builder.Default:
@Builder.Default private final long created = System.currentTimeMillis();
@Entity
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Team {
@Id @GeneratedValue
private Long id;
private String name;
// builder() 에서 초기화하지 않는 필드는
// Default 를 붙여주자!
@Builder.Default
@OneToMany(mappedBy = "team")
private List<Member> members = new ArrayList<>();
}