@Builder 사용 시 null로 초기화

Kim jisu·2025년 6월 25일
0

 Debugging Note

목록 보기
28/37

1. @Builder.Default 적용 – User.java

  • 변경사항:
    status 필드에 @Builder.Default 어노테이션을 추가하여 @Builder 사용 시 null로 초기화되는 문제를 방지.
  • 배경:
    Lombok의 @Builder는 기본값을 무시하고 null을 설정하기 때문에, 명시적으로 @Builder.Default를 지정해야 정상 동작.
  • 해결 효과:
    사용자 상태(status)가 명확히 초기화되어 null로 인한 인증/인증 문제 또는 상태 관리 오류 방지.

2. @EqualsAndHashCode(callSuper = false) 적용 – 6개 엔티티 클래스

  • 적용 대상:

    • Mortgage.java
    • HouseLoan.java
    • SubscriptionInfo.java
    • SubscriptionSupplyTarget.java
    • SubscriptionLocationInfo.java
    • SubscriptionPriceInfo.java
    • SubscriptionSpecialSupplyTarget.java
  • 공통 변경사항:

    • @EqualsAndHashCode(callSuper = false) 어노테이션 추가
    • 관련 import lombok.EqualsAndHashCode; 문 추가
  • 적용 이유:

    • 이들 엔티티는 모두 Stamped 클래스를 상속하고 있음

    • Stamped에는 createdAt, updatedAt시간 기반 감사 필드가 존재하며, 이들은 시간이 지나며 변경됨

    • callSuper = false 설정을 하지 않으면, 이러한 가변 필드가 equals()hashCode() 비교에 포함되어 문제 발생 가능

      • 예: Set이나 Map 사용 시 객체를 다시 조회하지 못하거나 중복으로 인식
  • 해결 효과:

    • 상속된 감사 필드를 equals / hashCode 계산에서 제외시켜, 데이터 구조 내 안정적인 비교/검색 보장
    • 특히 JPA 프록시 객체와의 비교, 컬렉션 중복 판단 등에서의 런타임 이슈 예방

✅ 결론

이번 수정은 다음과 같은 목적을 효과적으로 달성:

  • @Builder@EqualsAndHashCode 관련 Lombok 사용의 안정성 보완
  • JPA 및 컬렉션 처리 시 예상치 못한 동작 방지
  • 유지보수를 위한 코드의 명시성과 일관성 향상
profile
Dreamer

0개의 댓글