kkkkkkkkkkkk
kkkkk
kkkkkkkkkkkk
전체 방문자
오늘
어제
  • 분류 전체보기
    • CS & OS
    • Algorithms
    • Laguage
    • Book
      • 객체지향의 사실과 오해
      • Effective Java
      • Spring boot 와 AWS로 혼자 구현하는 ..
      • 도메인 주도 계발 시작하기
    • DB
    • Spring
    • Spring Boot
    • JPA
    • Git
    • Clean Code
    • HTTP

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 응집도
  • 결합도
  • 객체지향 프로그래밍
  • 역할
  • 설계 원칙
  • 책임

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
kkkkkkkkkkkk

kkkkk

Spring Boot

@Builder 사용시 초기화 필드는 어떻게 될까?

2022. 9. 5. 12:24

Account 클래스는 컬렉션을 참조하고 있고 null 방지를 위해 필드에서 초기화를 진행한 엔티티에 Tag 를 컬렉션에 추가하는 상황에 null 이 발생하는 이슈를 정리하는 글입니다.

 

 

아래와 같은 Account 클래스가 있다.

 

@Builder
@Entity
public class Account {
		
    @Id
    @GeneratedValue
    private Long id;

    private String name;
		
    @ManyToMany
    private Set<Tag> tags = new HashSet<>();
}

 

위의 Account 클래스를 빌더로 인스턴스를 생성하여 저장하고 Tag 도 저장한다.

 

@DisplayName("계정에 태그를 추가하는 테스트")
@Test
@Transactional
void addTag() {
    Account account = Account.builder().nickname("이기영").build();
    accountRepository.save(account);

    TagForm tagForm = new TagForm();
    tagForm.setTagTitle("spring");
    Tag tag = tagRepository.save(tagForm.toEntity());

    accountRepository.findById(1L).ifPresent(a -> a.getTags().add(tag));
}

 

하지만 NullPoint 가 발생한다.

 

null이 왜 발생할까?

 

@Buillder 는 클래스를 빌더패턴으로 생성할 수 있게 도와주는 애노테이션이다. 위의 Account 클래스 필드의 Tag 컬렉션을 필드에서 바로 초기화를 진행 했다.

 

이러한 필드에서 초기화된 상태는 @Builder 애노테이션에서 무시가 된다.

 

빌더로 초기화를 하던가 아니면 해당 필드에 @Builder.Default 로 해당 기본값으로 설정 해주면 null로 초기화가 되던 상황을 피할 수 있다.

'Spring Boot' 카테고리의 다른 글

[Spring boot] 순환 참조 이슈  (0) 2022.08.12
[Spring Boot] Spring 에서 비동기 처리 방식은 어떻게 하고 왜 사용해야 할까?  (0) 2022.07.31
[Spring Boot] Interceptor 는 어떻게 사용하고 왜 사용해야 할까?  (0) 2022.07.30
[Spring Boot] Filter를 왜 사용해야하고 어떻게 사용하는 걸까?  (0) 2022.07.30
[Spring Boot] Validation을 왜 해야하고 어떻게 할까?  (0) 2022.07.29
[Spring Boot] 예외처리를 왜 해야하고 어떻게 처리할까?  (0) 2022.07.29
ModelMapper  (0) 2022.07.20
[Spring Boot] Spring Dependency Injection 동작 원리와 Ioc Container를 알아보자  (0) 2022.03.02
    'Spring Boot' 카테고리의 다른 글
    • [Spring boot] 순환 참조 이슈
    • [Spring Boot] Spring 에서 비동기 처리 방식은 어떻게 하고 왜 사용해야 할까?
    • [Spring Boot] Interceptor 는 어떻게 사용하고 왜 사용해야 할까?
    • [Spring Boot] Filter를 왜 사용해야하고 어떻게 사용하는 걸까?
    kkkkkkkkkkkk
    kkkkkkkkkkkk

    티스토리툴바