Home > Backend Development > πŸ“š[Backend Development] @Builder μ• λ„ˆν…Œμ΄μ…˜

πŸ“š[Backend Development] @Builder μ• λ„ˆν…Œμ΄μ…˜
Backend Ddevelopment Database Server Build System

πŸ“š[Backend Development] @Builder μ• λ„ˆν…Œμ΄μ…˜

@Builder μ• λ„ˆν…Œμ΄μ…˜μ€ Lombok λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μ œκ³΅ν•˜λŠ” κΈ°λŠ₯으둜, Javaμ—μ„œ Builder νŒ¨ν„΄μ„ μ‰½κ²Œ κ΅¬ν˜„ν•  수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.

βœ… 1. λΉŒλ” νŒ¨ν„΄μ΄λž€?

Builder νŒ¨ν„΄μ€ λ³΅μž‘ν•œ 객체λ₯Ό λ‹¨κ³„μ μœΌλ‘œ 생성할 수 있게 ν•˜λŠ” 생성 λ””μžμΈ νŒ¨ν„΄μž…λ‹ˆλ‹€.

  • μƒμ„±μžλ‚˜ setter λŒ€μ‹  μ‚¬μš©
  • 선택적 ν•„λ“œ, λΆˆλ³€μ„±, 가독성 ν–₯상
  • 특히 νŒŒλΌλ―Έν„°κ°€ λ§Žμ€ 객체λ₯Ό 생성할 λ•Œ μœ μš©ν•¨

예:

LoginUser user = LoginUser.builder()
    .email("user@example.com")
    .nickname("user")
    .age(25)
    .build();

βœ… 2. Lombok의 @Builder둜 λΉŒλ” νŒ¨ν„΄ 적용 예제.

🧩 μ—”ν‹°ν‹° μ˜ˆμ‹œ

@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class LoginUser {
    private String email;
    private String nickname;
    private int age;
}

🧩 μ‚¬μš©λ²•

LoginUser user = LoginUser.builder()
    .email("user@example.com")
    .nickname("Kobe")
    .age(28)
    .build();
  • μˆœμ„œ 상관없이 ν•„λ“œ λͺ…μ‹œ κ°€λŠ₯
  • 가독성 뛰어남
  • null-safe ν•˜κ²Œ 생성 κ°€λŠ₯

βœ… 3. @Builder의 νŠΉμ§• 및 λ‚΄λΆ€ λ™μž‘

  • λ‚΄λΆ€μ μœΌλ‘œ 정적 λΉŒλ” 클래슀(LoginUserBuilder)λ₯Ό 생성
  • 각 ν•„λ“œλŠ” withXxx() λ©”μ„œλ“œ ν˜•νƒœλ‘œ μ„€μ • κ°€λŠ₯
  • build() λ©”μ„œλ“œκ°€ μ΅œμ’… 객체λ₯Ό λ°˜ν™˜

λΉŒλ” λ©”μ„œλ“œ μ˜ˆμ‹œ (Lombok이 λ‚΄λΆ€ μƒμ„±ν•˜λŠ” ꡬ쑰):

public class LoginUser {
    public static class LoginUserBuilder {
        private String email;
        private String nickname;
        private int age;
        
        public LoginUserBuilder email(String email) {
            this.email = email;
            return this;
        }
        
        public LoginUser build() {
            return new LoginUser(email, nickname, age);
        }
    }
}

βœ… 4. @Builder의 μ‚¬μš© μ£Όμ˜μ‚¬ν•­.

상황 주의점
@Builder + JPA Entity μƒμ„±μžμ— @Builderλ₯Ό λΆ™μ΄λŠ” 방식 μΆ”μ²œ(κΈ°λ³Έ μƒμ„±μž ν•„μš”)
@Builder + Default κ°’ μ„€μ • ν•„λ“œ μ΄ˆκΈ°ν™” μ‹œ @Builder.Defaultλ₯Ό ν•¨κ»˜ μ‚¬μš©ν•΄μ•Ό 적용됨
Setter μ—†μŒ λΆˆλ³€ 객체처럼 μ‚¬μš©ν•  수 μžˆμ–΄ μ•ˆμ •μ„± ↑

βœ… 5. @Builder.Default μ˜ˆμ‹œ.

@Builder
public class LoginUser {
    private String email;
    
    @Builder.Default
    private String role = "USER"; // κΈ°λ³Έκ°’ μ„€μ •
}

βœ… μš”μ•½

μž₯점 μ„€λͺ…
가독성 ν•„λ“œλͺ… 기반으둜 객체 생성 κ°€λŠ₯
μœ μ§€λ³΄μˆ˜ ν•„λ“œ μˆœμ„œ μ‹ κ²½ μ“Έ ν•„μš” μ—†μŒ
μ•ˆμ „μ„± setter 없이 λΆˆλ³€ 객체처럼 μ‚¬μš© κ°€λŠ₯
μœ μ—°μ„± 선택적 ν•„λ“œ μ‘°ν•©μœΌλ‘œ 생성 κ°€λŠ₯