Notice
Recent Posts
Recent Comments
Link
«   2025/12   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

나만의 개발 로그 | 고민 로그

Lombok @NoArgsConstructor(force = true) 본문

웹 개발

Lombok @NoArgsConstructor(force = true)

ultramancode 2023. 2. 16. 00:12

1. Lombok @NoArgsConstructor(force = true)

1-1. 왜 필요한가?

  • JPA, 직렬화, 프레임워크 프록시 등은 기본 생성자가 반드시 있어야 객체를 만들 수 있다.
  • 하지만 final 필드가 있으면 Lombok이 기본 생성자를 자동 생성하지 못한다.
  • force = true 옵션을 주면 Lombok이 final 필드에도 임시 디폴트 값(0/false/null)을 강제로 넣어 주면서 기본 생성자를 만들어 준다.

1-2. 예시 : JPA 엔티티

@Entity 
@Getter 
@NoArgsConstructor(access = AccessLevel.PROTECTED, force = true) 
public class ImageMeta {
@Id 
@GeneratedValue 
private Long id; 
private final String fileName; 
private final long size;

// 비즈니스용 생성자 
public ImageMeta(String fileName, long size) { 
	this.fileName = fileName; this.size = size; 
    } 
    
}
상황 동작
애플리케이션 코드 → new ImageMeta("logo.png", 2048) 정상 생성, final 값 유지
JPA 프록시/리플렉션 → new ImageMeta() Lombok이 생성한 숨은 기본 생성자 호출 → fileName=null, size=0 으로 임시 세팅
 

⚠️ 주의
강제로 들어간 null/0 값은 비즈니스 로직에서 사용하지 않도록 보호 로직(Assert) 또는 후속 초기화 코드가 필요

 

Comments