π[Backend Development] @NoArgsConstructor
μ @AllArgsConstructor
μ΄λ
Έν
μ΄μ
π¦ @NoArgsConstructor
μ΄λ
Έν
μ΄μ
.
@NoArgsConstructor
λ νλΌλ―Έν°κ° μλ κΈ°λ³Έ μμ±μ(no-arg constructor)λ₯Ό μλμΌλ‘ λ§λ€μ΄μ£Όλ Lombok μ΄λ
Έν
μ΄μ
μ
λλ€.
β
1. @NoArgsConstructor
μ΄λ
Έν
μ΄μ
μ 무μμΈκ°μ?
@NoArgsConstructor
λ Lombok λΌμ΄λΈλ¬λ¦¬μ μ΄λ
Έν
μ΄μ
μ€ νλλ‘, public MyClass() {}
μ κ°μ΄ μλ¬΄λ° μΈμλ λ°μ§ μλ μμ±μ μ½λλ₯Ό μ»΄νμΌ μμ μ μλμΌλ‘ μμ±ν΄μ€λλ€.
β
2. @NoArgsConstructor
μ΄λ
Έν
μ΄μ
μ μΈμ μ¬μ©νλμ?
JPA Entity ν΄λμ€λ₯Ό λ§λ€ λ κ±°μ νμ μ¬μ©λ©λλ€.
λν, JSON λ°μ΄ν°λ₯Ό κ°μ²΄λ‘ λ³ννλ λΌμ΄λΈλ¬λ¦¬(e.g, Jackson)λ₯Ό μ¬μ©ν λλ νμν©λλ€.
β
3. @NoArgsConstructor
μ΄λ
Έν
μ΄μ
μ μ΄λμ μ¬μ©νλμ?
ν΄λμ€(Class) λ 벨μμ μ μΈνμ¬ μ¬μ©ν©λλ€.
β
4. @NoArgsConstructor
μ΄λ
Έν
μ΄μ
μ μ΄λ»κ² μ¬μ©νλμ?
ν΄λμ€ μμ μ΄λ
Έν
μ΄μ
μ λΆμ¬μ£ΌκΈ°λ§ νλ©΄ λ©λλ€.
JPA Entityμμλ protected
μ κ·Ό μ μ΄μλ₯Ό μ¬μ©νλ κ²μ΄ μ’μ ν¨ν΄μ
λλ€.
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
@Entiry
@NoArgsConstructor(access = AccessLevel.PROTECTED) // protected κΈ°λ³Έ μμ±μλ₯Ό μλ μμ±
public class Product {
@Id
private Long id;
private String name;
/*
// μλ μμ±μκ° μ»΄νμΌ μμ μ μλμΌλ‘ μμ±λ©λλ€.
protected Product() {
}
*/
}
β
5. @NoArgsConstructor
μ΄λ
Έν
μ΄μ
μ μ μ¬μ©νλμ?
@NoArgsConstructor
λ₯Ό μ¬μ©νλ μ£Όλ μ΄μ λ νλ μμν¬μ μꡬμ¬νμ λ§μ‘±μν€κ³ κ°μ²΄ μμ±μ μμ μ±μ λμ΄κΈ° μν¨μ
λλ€.
-
νλ μμν¬ νΈνμ± : JPAμ κ°μ νλ μμν¬λ λ΄λΆμ μΌλ‘ κ°μ²΄λ₯Ό μμ±νκΈ° μν΄ κΈ°λ³Έ μμ±μλ₯Ό νμλ‘ ν©λλ€.
@NoArgsConstructor
λ μ΄ μꡬμ¬νμ μΆ©μ‘±μμΌμ€λλ€. -
μμ μ± :
@NoArgsConstructor(access = AccessLevel.PROTECTED)
λ‘ μ€μ νλ©΄, κ°λ°μκ°new Product()
μ²λΌ μ€μλ‘ λΆμμ ν κ°μ²΄λ₯Ό μμ±νλ κ²μ λ§μ μ μμ΅λλ€. κ°μ²΄ μμ±μ@Builder
λ μ μ ν©ν 리 λ©μλ λ±μ μ¬μ©νλλ‘ κ°μ νμ¬ μ½λμ μμ μ±μ λμ λλ€. - μ½λ κ°κ²°μ± : κ°λ°μκ° μ§μ μμ±μ μ½λλ₯Ό μμ±ν νμκ° μμ΄ μ½λκ° κΉλν΄μ§λλ€.
π¦ @AllArgsConstructor
μ΄λ
Έν
μ΄μ
.
@AllArgsConstructor
μ΄λ
Έν
μ΄μ
λ ν΄λμ€μ λͺ¨λ νλλ₯Ό μΈμλ‘ λ°λ μμ±μλ₯Ό μλμΌλ‘ λ§λ€μ΄μ£Όλ Lombok μ΄λ
Έν
μ΄μ
μ
λλ€.
β
1. @AllArgsConstructor
μ΄λ
Έν
μ΄μ
μ 무μμΈκ°μ?
@AllArgsConstructor
λ Lombok λΌμ΄λΈλ¬λ¦¬μ μ΄λ
Έν
μ΄μ
μ€ νλλ‘, ν΄λμ€μ μ μΈλ λͺ¨λ νλλ₯Ό νλΌλ―Έν°λ‘ μμλλ‘ λ°λ μμ±μ μ½λλ₯Ό μ»΄νμΌ μμ μ μλμΌλ‘ μμ±ν΄μ€λλ€.
β
2. @AllArgsConstructor
μ΄λ
Έν
μ΄μ
μ μΈμ μ¬μ©νλμ?
- ν΄λμ€μ λͺ¨λ νλλ₯Ό μ΄κΈ°νν΄μΌ νλ κ°μ²΄λ₯Ό λ§λ€ λ.
- λ€λ₯Έ μ΄λ
Έν
μ΄μ
, νΉν
@Builder
μ ν¨κ» μ¬μ©νμ¬ κ°μ²΄ μμ±μ λ νΈλ¦¬νκ² λ§λ€κ³ μΆμ λ. - μμ‘΄μ± μ£Όμ (Dependency Injection) ν μ€νΈ λ±μμ λͺ¨λ νλλ₯Ό μΈλΆμμ μ£Όμ λ°μμΌ ν λ.
β
3. @AllArgsConstructor
μ΄λ
Έν
μ΄μ
μ μ΄λμ μ¬μ©νλμ?
ν΄λμ€(Class) λ 벨μ μ μΈνμ¬ μ¬μ©ν©λλ€.
β
4. @AllArgsConstructor
μ΄λ
Έν
μ΄μ
μ μ΄λ»κ² μ¬μ©νλμ?
ν΄λμ€ μμ μ΄λ Έν μ΄μ μ λΆμ¬μ£ΌκΈ°λ§ νλ©΄ λ©λλ€.
import lombok.AllArgsConstructor;
@AllArgsConstructor // μ΄ μ΄λ
Έν
μ΄μ
μ΄ μλ μμ±μ μ½λλ₯Ό μλμΌλ‘ λ§λλλ€.
public class Product {
private Long id;
private String name;
/*
// μλ μμ±μκ° μ»΄νμΌ μμ μ μλμΌλ‘ μμ±λ©λλ€.
public Product(Long id, String name) {
this.id = id;
this.name = name;
}
*/
}
β
5. @AllArgsConstructor
μ΄λ
Έν
μ΄μ
μ μ μ¬μ©νλμ?
@AllArgsConstructor
λ₯Ό μ¬μ©νλ μ£Όλ μ΄μ λ μ½λμ κ°κ²°μ±κ³Ό νΈμμ± λλ¬Έμ
λλ€.
- 보μΌλ¬νλ μ΄νΈ μ½λ μ κ±° : ν΄λμ€μ νλκ° μΆκ°λκ±°λ μμκ° λ³κ²½λ λλ§λ€ μμ±μ μ½λλ₯Ό μ§μ μμ ν΄μΌ νλ λ²κ±°λ‘μμ μμ μ€λλ€.
-
@Builder
μμ μλμ§ :@Builder
μ΄λ Έν μ΄μ μ κ°μ²΄λ₯Ό μμ±ν λ λͺ¨λ νλλ₯Ό λ°λ μμ±μλ₯Ό νμλ‘ ν©λλ€. μ΄ λ@AllArgsConstructor
λ₯Ό ν¨κ» μ¬μ©νλ©΄ κ°λ°μκ° μ§μ μμ±μλ₯Ό μμ±ν νμ μμ΄ λΉλ ν¨ν΄μ μ½κ² ꡬνν μ μμ΅λλ€.