Entity, Dtoμμ μμ£Ό μ¬μ©νλ @Builder μ΄λ Έν μ΄μ μ μν κ³Ό μλ―Έλ₯Ό νμ€ν μ΄ν΄νκ³ μΆμ΄ μ 리ν΄λ³΄μλ€.
λΉλ ν¨ν΄
- κ°μ²΄λ₯Ό μμ±ν λ μ¬μ©νλ λμμΈ ν¨ν΄μ΄λ€. μμ±μμμ μΈμκ° λ§μ λ λΉλ ν¨ν΄μ μ¬μ©μ κ³ λ €ν΄λ³Ό μ μλ€.
- ν΄λμ€λ₯Ό μ€κ³ν λ νμλ‘ λ°μμΌ ν μΈμμ μ νμ μΌλ‘ λ°μμΌ ν μΈμκ° μ‘΄μ¬νλ€λ©΄ ν΄λμ€μ κ°μ²΄λ₯Ό μμ±ν λ, μ¬μ©ν μ μλ λμμΈ ν¨ν΄μ μ μΈ΅μ μμ±μ ν¨ν΄, μλ° λΉμ¦ ν¨ν΄, λΉλ ν¨ν΄μΌλ‘ μ΄ 3κ°μ§κ° μλ€.
λ¨Όμ μ μΈ΅μ μμ±μ ν¨ν΄λΆν° μμ보μ
μ μΈ΅μ μμ±μ ν¨ν΄
- μμ±μλ‘ λ°μ΄ν°λ₯Ό λ°μ κ°μ²΄λ₯Ό μμ±νλ€.
- User κ°μ²΄ μμ± μ, νμ κ°μ id, userNameμ΄λ©° μ ν κ°μ nickName, ageλ€.
public class User {
private int id; //ID(νμ)
private String userName; //μ΄λ¦(νμ)
private String nickname; //λ³λͺ
(μ ν)
private int age; //λμ΄(μ ν)
public User(int id, String userName){
this(id, userName, null, 0);
}
public User(int id, String userName, String nickname){
this(id, userName, nickname, 0);
}
public User(int id, String userName, String nickname, int age){
this.id = id;
this.userName = userName;
this.nickname = nickname;
this.age = age;
}
User user = new User(1, "emily", "emily11", 22);
μ μΈ΅μ μμ±μ ν¨ν΄μ λ¨μ μ λ€μκ³Ό κ°λ€.
⦠맀κ°λ³μ μ‘°ν©μ΄ λ§μ μλ‘ μμ±μ μκ° λ§μμ§λ€. → κ°λ μ± μ ν, λΉν¨μ¨μ μ½λ
β¦ μμ±μ νΈμΆμ, 맀κ°λ³μμ μμΉλ₯Ό μκ³ μμ΄μΌ νλ€.
μλ° λΉμ¦ ν¨ν΄
- μ μΈ΅μ μμ±μ ν¨ν΄μ λ¨μ μ 보μν ν¨ν΄μ΄λ€.
- κΈ°λ³Έ μμ±μλ‘ κ°μ²΄λ₯Ό λ§λ νμ setter λ©μλλ‘ λ§€κ°λ³μλ₯Ό μ£Όμ νλ λ°©λ²μ΄λ€.
public class User {
private int id; //ID(νμ)
private String userName; //μ΄λ¦(νμ)
private String nickname; //λ³λͺ
(μ ν)
private int age; //λμ΄(μ ν)
public User(){
}
public void setId(int id){
this.id = id;
}
public void setUserName(String userName){
this.userName = userName;
}
public void setNickname(String nickname){
this.nickname = nickname;
}
public void setAge(int age){
this.age = age;
}
}
User user = new User();
user.setId(1);
user.setUserName("Emily");
user.setNickname("Emily11");
user.setAge(22);
μ μΈ΅μ μμ±μ ν¨ν΄μ λΉν΄ κ°λ μ±μ΄ μ’κ³ setter λ©μλλ‘ μνλ 맀κ°λ³μμ κ°μ μ€μ ν μ μλ€.
κ·Έλ¬λ μ½λ μμ΄ λμ΄λκ³ , κ°μ²΄λ₯Ό ν λ²μ λ©μλ νΈμΆλ‘ μμ±ν μ μκ² λλ©° κ°μ²΄μ μΌκ΄μ±μ΄ κΉ¨μ§λ€.
κ°μ²΄μ μΌκ΄μ±μ΄ κΉ¨μ§λ€λ κ²μ 맀κ°λ³μκ° νλ μΆκ°λ λλ§λ€ μΈμ€ν΄μ€κ° λ³νλ€λ κ²μ΄λ€.
μΌκ΄μ±μ΄ 무λμ§λ―λ‘ λΆλ³ ν΄λμ€λ‘ λ§λλ κ²λ λΆκ°λ₯νλ€. λ°λΌμ κ°μ²΄κ° μλμ λ€λ₯΄κ² λ³ν κ°λ₯μ±μ΄ μλ€.
λΉλ ν¨ν΄
- μ μΈ΅μ μμ±μ ν¨ν΄κ³Ό μλ° λΉμ¦ ν¨ν΄μ μ₯μ μ κ²°ν©ν κ°μ²΄ μμ± ν¨ν΄μ΄λ€.
- μ 보λ μλ° λΉμ¦ ν¨ν΄μ²λΌ λ°μΌλ©° κ°λ μ±μ λμ΄κ³ , κ°μ²΄λ μ μΈ΅μ μμ±μ ν¨ν΄μ²λΌ μμ±νλ©° κ°μ²΄μ μΌκ΄μ±μ μ μ§νλ€.
- λ³λμ Builder ν΄λμ€λ₯Ό λ§λ€μ΄ νμλ³μλ μμ±μλ‘, μ νλ³μλ λ©μλλ‘ λ°μ ν, build λ©μλλ‘ μΈμ€ν΄μ€λ₯Ό 리ν΄νλ©° κ°μ²΄λ₯Ό μμ±νλ€.
public class User {
private int id; //ID(νμ)
private String userName; //μ΄λ¦(νμ)
private String nickname; //λ³λͺ
(μ ν)
private int age; //λμ΄(μ ν)
public static class Builder(){
private int id;
private String userName;
private String nickname;
private int age;
//νμλ³μλ Builder μμ±μλ‘ μ£Όμ
public Builder(String id, String userName) {
this.id = id;
this.userName = userName;
}
//μ νλ³μλ λΉλ ν΄λμ€μ νλμ setν ν λΉλ κ°μ²΄λ₯Ό λ°ν
public Builder setNickname(String nickname) {
this.nickname = nickname;
return this;
}
public Builder setAge(String age) {
this.age = age;
return this;
}
//λΉλ λ©μλ
public User build() {
return new User(this); //this : κ°μ²΄ μμ μ κ°λ¦¬ν€λ λ νΌλ°μ€ λ³μ
}
}
}
User user = User.builder(1,"Emily")
.nickname("Emily11")
.age(22)
.build();
λΉλ λ©μλ μ΄νμ setter κ°μ κ°μ λ³κ²½ν μ μλ λ©μλκ° μμΌλ―λ‘ λ©€λ²λ³μλ₯Ό λ³κ²½ν μ μλ€. λ°λΌμ λ°μ΄ν°μ μΌκ΄μ±, κ°μ²΄μ λΆλ³μ±μ 보μ₯νλ€.
λΉλ ν¨ν΄(Builder Pattern)μ μ₯μ
1. νμν λ°μ΄ν°λ§ μ€μ ν μ μλ€.
2. μ μ°μ±μ ν보ν μ μλ€.
3. κ°λ μ±μ λμΌ μ μλ€.
4. λ³κ²½ κ°λ₯μ±μ μ΅μνν μ μλ€.
5. λ°μ΄ν°μ μμμ μκ΄μμ΄ κ°μ²΄λ₯Ό μμ±ν μ μλ€.
6. build()ν¨μκ° nullμΈμ§ 체ν¬ν΄μ£Όλ―λ‘ κ²μ¦μ΄ κ°λ₯νλ€.
@Builder
Lombok νλ¬κ·ΈμΈμμ μ§μνλ μ΄λ Έν μ΄μ μΌλ‘ λΉλ ν΄λμ€λ₯Ό μλμΌλ‘ λ§λ€ μ μλ€.
ν΄λμ€λ μμ±μ μμ @Builder μ΄λ Έν μ΄μ μ λΆμ΄λ©΄ λΉλκ° μκΈ΄λ€.
(μμ±μ μμ λΆμ΄λ©΄, μμ±μμ ν¬ν¨λ νλλ§ λΉλμ ν¬ν¨λλ€.)
@Builder
public class User {
private int id;
private String userName;
private String nickname;
private int age;
}
User user = User.builder() //λΉλν΄λμ€ μμ±μ
.id(1)
.name("Emily")
.nickname("Emily11")
.age(22)
.build();
λΉλ ν¨ν΄μ μ¬μ©νμ§ μμλ λλ κ²½μ°
λλΆλΆμ μΌμ΄μ€μμ λΉλ ν¨ν΄μ μ μ©νλ κ² μ’λ€.
κ·Έλ¬λ μμ±μμ νμν 맀κ°λ³μμ μκ° μΌλ°μ μΌλ‘ 4κ°λ³΄λ€ μ λ€λ©΄ λΉλλ₯Ό μ°μ§ μμλ λλ€.
- λΉλλ λΉλκ° λΆμ ν΄λμ€μ λͺ¨λ νλλ₯Ό 볡μ¬νλ―λ‘ μ½λκ° μ₯ν©νκ³ (verbose) μ€λ³΅λλ€.
'Spring π±' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Spring JPA] Entityμ @Setterλ₯Ό μ§μν΄μΌ νλ μ΄μ (0) | 2023.07.27 |
---|---|
[JPA] μμμ± μ»¨ν μ€νΈ (0) | 2023.07.25 |
[Spring] μ±κΈν€ 컨ν μ΄λ (0) | 2023.07.19 |
[Spring] μμ‘΄μ± μ£Όμ (DI)μ΄λ? (0) | 2023.07.13 |
[Spring] JUnit5μ assertJλ‘ ν μ€νΈ μ½λ μμ±νκΈ° (0) | 2023.06.19 |