π[Spring] @NoArgsConstructor
μ 무μμΌκΉμ?
π Intro.
- βοΈ
@NoArgsConstructor
λ Lombokμμ μ 곡νλ μ΄λ Έν μ΄μ μΌλ‘, νλΌλ―Έν°κ° μλ κΈ°λ³Έ μμ±μλ₯Ό μλμΌλ‘ μμ±ν΄μ€λλ€.
β 1οΈβ£ μ£Όμ νΉμ§.
1. κΈ°λ³Έ μμ±μ μΆκ°.
- βοΈ
@NoArgsConstructor
λ₯Ό μ¬μ©νλ©΄ ν΄λμ€μ κΈ°λ³Έ μμ±μλ₯Ό λͺ μμ μΌλ‘ μμ±νμ§ μμλ λ¨. - βοΈ μλ μμ±λ κΈ°λ³Έ μμ±μλ νλ μ΄κΈ°ν λ‘μ§μ΄ μλ κΈ°λ³Έμ μΈ μμ±μμ.
2. μ£Όλ‘ κ°μ²΄ μμ±μ μ¬μ©.
- βοΈ JPA, Jackson κ°μ λΌμ΄λΈλ¬λ¦¬μμ κ°μ²΄λ₯Ό μΈμ€ν΄μ€νν λ κΈ°λ³Έ μμ±μκ° νμν¨.
3. final νλμ νΈν κ°λ₯.
- βοΈ κΈ°λ³Έμ μΌλ‘
final
νλκ° μμΌλ©΄ μ»΄νμΌ μλ¬κ° λ°μν¨. - βοΈ μ΄λ₯Ό ν΄κ²°νκΈ° μν΄
@NoArgsConstructor(force = true)
λ₯Ό μ¬μ©ν μ μμ.
β 2οΈβ£ μ¬μ© μμ .
1. κΈ°λ³Έ μ¬μ©.
import lombok.NoArgsConstructor;
@NoArgsConstructor
public class MyClass {
private String name;
private int age;
}
- βοΈ μ μ½λλ λ€μκ³Ό κ°μ κΈ°λ³Έ μμ±μλ₯Ό μμ±ν¨.
public MyClass() { }
2. JPAμμμ μ¬μ©.
- βοΈ JPAμμλ μν°ν° ν΄λμ€μ κΈ°λ³Έμμ±μκ° νμν¨.
- βοΈ
@NoArgsConstructor
λ₯Ό μ¬μ©νμ¬ κ°νΈνκ² κΈ°λ³Έ μμ±μλ₯Ό μΆκ°ν μ μμ.
```java
import jakarta.persistence.Entity;
import lombok.NoArgsConstructor;
- βοΈ
@Entity
@NoArgsConstructor
public class User {
private Long id;
private String username;
}
- βοΈ JPAλ μν°ν° ν΄λμ€λ₯Ό 리νλ μ
μ ν΅ν΄ μΈμ€ν΄μ€ννκΈ° λλ¬Έμ κΈ°λ³Έ μμ±μκ° νμμ.
### 3. force μμ± μ¬μ© (final νλμ ν¨κ»)
- βοΈ κΈ°λ³Έ μμ±μλ `final` νλ μ΄κΈ°νλ₯Ό κ°μ νμ§ μμ.
- βοΈ νμ§λ§ `@NoArgsConstructor(force = true)`λ₯Ό μ¬μ©νλ©΄ `final` νλλ κΈ°λ³Έκ°μΌλ‘ μ΄κΈ°νλλλ‘ μ²λ¦¬ν μ μμ.
```java
import lombok.NoArgsConstructor;
@NoArgsConstructor(force = true)
public class MyClass {
private final String name; // κΈ°λ³Έκ°: null
private final int age; // κΈ°λ³Έκ°: 0
}
- βοΈ μ μ½λλ λ€μκ³Ό κ°μ μμ±μλ₯Ό μμ±ν¨.
public MyClass() { this.name = null; this.age = 0; }
- βοΈ
force = true
λ₯Ό μ¬μ©νλ©΄ κΈ°λ³Έ μμ±μλ₯Ό ν΅ν΄final
νλλ μ΄κΈ°νκ° κ°λ₯ν΄μ§λ―λ‘ νΉμ μν©μμ μ μ©ν¨.
β 3οΈβ£ Springκ³Ό ν¨κ» μ¬μ©.
Springμμ κ°μ²΄ μμ± μ νμ©.
π Springμμ JSON μμ² λ³Έλ¬Έμ μ²λ¦¬νκ±°λ JPA μν°ν°λ₯Ό κ΄λ¦¬ν λ κΈ°λ³Έ μμ±μκ° νμν¨.
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@NoArgsConstructor
public class UserDTO {
private String username;
private String email;
}
- βοΈ JSON μμ²μ μ²λ¦¬νλ λΌμ΄λΈλ¬λ¦¬(Jackson λ±)κ° κΈ°λ³Έ μμ±μλ₯Ό μ¬μ©νμ¬ DTO κ°μ²΄λ₯Ό μΈμ€ν΄μ€ν ν¨.
- βοΈ
@NoArgsConstructor
λ£° μ¬μ©νμ¬ κ°νΈνκ² μ΄λ₯Ό μ§μν μ μμ.
β 4οΈβ£ μ₯μ .
1. μ½λ κ°κ²°ν.
- βοΈ κΈ°λ³Έ μμ±μλ₯Ό μλμΌλ‘ μμ±νλ―λ‘ μλμΌλ‘ μμ±ν νμκ° μμ.
2. λΌμ΄λΈλ¬λ¦¬ νΈνμ±.
- βοΈ JPA, Jackson λ± κΈ°λ³Έ μμ±μκ° νμν λΌμ΄λΈλ¬λ¦¬μ μ½κ² νΈνλ¨.
3. νΉμ μν© μ§μ.
- βοΈ
force - true
λ₯Ό ν΅ν΄final
νλλ κΈ°λ³Έκ°μΌλ‘ μ΄κΈ°νν μ μμ.
β 5οΈβ£ μ£Όμμ .
1. force = true
μ¬μ© μ μ΄κΈ°ν μ£Όμ.
- βοΈ
final
νλκ° κΈ°λ³Έκ°(null λλ 0)μΌλ‘ μ΄κΈ°νλκΈ° λλ¬Έμ μλμΉ μμ λμμ μ λ°ν μ μμ.2. JPAμ ν¨κ» μ¬μ©ν λ μ κ·Ό μ νμ.
- βοΈ JPAμμλ κΈ°λ³Έ μμ±μκ°
protected
μ΄μμ΄μ΄μΌ νλ―λ‘ λ€μκ³Ό κ°μ΄ μ€μ νλ κ²μ΄ μ’μ@NoArgsConstructor(access = AccessLevel.PROTECTED)
π μ 리.
- βοΈ
@NoArgsConstructor
λ κΈ°λ³Έ μμ±μλ₯Ό μλμΌλ‘ μμ±ν΄μ£Όλ Lombok μ΄λ Έν μ΄μ μΌλ‘, JPAμ κ°μ λΌμ΄λΈλ¬λ¦¬μ νΈνμ±μ λμ΄κ³ μ½λμ κ°λ μ±μ κ°μ νλ λ° μ μ©ν¨.- βοΈ μΆκ°λ‘
force
μ΅μ μ ν΅ν΄final
νλλ μ΄κΈ°νν μ μμ.
- βοΈ μΆκ°λ‘