π[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 μμ΄ λΆλ³ κ°μ²΄μ²λΌ μ¬μ© κ°λ₯ |
μ μ°μ± | μ νμ νλ μ‘°ν©μΌλ‘ μμ± κ°λ₯ |