π[Spring] @RequireArgsConstructorμ 무μμΌκΉμ?
π Intro.
- βοΈ
@RequireArgsConstructorλ Lombokμμ μ 곡νλ μ΄λ Έν μ΄μ μΌλ‘, ν΄λμ€μfinalλ‘ μ μΈλ νλλ@NonNullλ‘ μ§μ λ νλμ λν΄ νμ μμ±μλ₯Ό μλμΌλ‘ μμ±ν¨.
β 1οΈβ£ μ£Όμ νΉμ§.
1. final νλλ§ ν¬ν¨.
- βοΈ
finalλ‘ μ μΈλ νλκ° λμμ΄ λ¨. - βοΈ
finalμ΄ μλ νλλ μμ±μμ ν¬ν¨λμ§ μμ.
2. @NonNull νλ ν¬ν¨.
- βοΈ
@NonNullμ΄λ Έν μ΄μ μ΄ λΆμ νλλ ν¬ν¨λ¨. - βοΈ
@NonNullμ΄ λΆμ νλλ μμ±μμμ null 체ν¬λ₯Ό μλμΌλ‘ μΆκ°ν¨.
3. μ£Όλ‘ μμ‘΄μ± μ£Όμ μ μ¬μ©.
- βοΈ Springμμ μμ±μ κΈ°λ° μμ‘΄μ± μ£Όμ (Constructor-based Dependency Injection)μ μμ£Ό μ¬μ©λ¨.
β 2οΈβ£ μμ±μ μλ μμ± μμ .
1. κΈ°λ³Έ μ¬μ©.
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
public class MyService {
private final MyRepository myRepository;
private final String name; // μμ±μ ν¬ν¨.
private int age; // μμ±μ ν¬ν¨λμ§ μμ.
}
- βοΈ μ μ½λλ λ€μκ³Ό κ°μ μμ±μλ₯Ό μλμΌλ‘ μμ±ν¨:
public MyService(MyRepository myRepository, String name) { this.myRepository = myRepository; this.name = name; }
2. @NonNull νλ μ¬μ©.
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
public class MyService {
@NonNull
private final MyRepository myRepository; // @NonNull null μ²΄ν¬ μΆκ°.
private final String name; // μμ±μμ ν¬ν¨.
private int age; // μμ±μμ ν¬ν¨λμ§ μμ.
}
- βοΈ μμ±λ μμ±μλ
@NonNullνλμ λν΄ null 체ν¬λ₯Ό ν¬ν¨ν¨.public MyService(MyRepository myRepository, String name) { if (myRepository == null) { throw new NullPointerException("myRepository is marked @NonNull but is null"); } this.myRepository = myRepository; this.name = name; }
3. Springκ³Ό ν¨κ» μ¬μ©.
π Springμμλ @RequiredArgsConstructorλ₯Ό μ¬μ©νλ©΄ μμ±μ μ£Όμ
μ½λλ₯Ό κ°κ²°νκ² μμ±ν μ μμ.
- βοΈ μΌλ°μ μΈ μμ±μ μ£Όμ
@Service public class MyService { private final MyRepository myRepository; public MyService(MyRepository myRepository) { this.myRepository = myRepository; } } - βοΈ
@RequiredArgsConstructorμ¬μ©@Service @RequiredArgsConstructor public class MyService { private final MyRepository myRepository; } - βοΈ Springμ΄ μλμΌλ‘ MyRepositoryλ₯Ό μ£Όμ ν¨.
- βοΈ μ½λκ° κ°κ²°ν΄μ§κ³ , μμ‘΄μ± μ£Όμ μ λ κ°λ μ±μ΄ μ’μμ§.
β 3οΈβ£ μ₯μ .
1. μ½λ κ°κ²°ν.
- βοΈ νμ μμ±μλ₯Ό μ§μ μμ±ν νμκ° μμ΄μ§.
2. λΆλ³ κ°μ²΄ μμ±μ μ ν©.
- βοΈ
finalνλλ₯Ό μ¬μ©νλ©΄ ν΄λΉ νλλ₯Ό λΆλ³μΌλ‘ μ μ§ν μ μμ.
3. Springκ³Όμ νΈνμ±.
- βοΈ μμ±μ κΈ°λ° μμ‘΄μ± μ£Όμ μμ νμ©λκ° λμ.
β 4οΈβ£ μ£Όμμ .
1. final νλλ§ ν¬ν¨.
- βοΈ μμ±μμ ν¬ν¨λμ§ μλ νλ(
finalμ΄ μλ νλ)μ κ°μ μ€μ νλ €λ©΄Setterλλ λ€λ₯Έ λ°©λ²μ μ¬μ©ν΄μΌ ν¨.
2. @NonNullλ‘ null μ²΄ν¬ νμ.
- βοΈ
@NonNullνλλ₯Ό μ¬μ©νμ§ μμΌλ©΄ null κ°μ΄ λ€μ΄κ°λ μμΈκ° λ°μνμ§ μμ.
π μ 리.
- βοΈ
@RequiredArgsConstructorλ μμ±μ μ£Όμ μ κ°κ²°νκ² νκ³ , λΆλ³μ±μ μ μ§νλ©΄μ μ½λλ₯Ό κΉλνκ² μμ±ν μ μλλ‘ λμμ€. - βοΈ Springκ³Ό Lombokμ ν¨κ» μ¬μ©ν λ κ°μ₯ λ§μ΄ μ°μ΄λ Lombok μ΄λ Έν μ΄μ μ€ νλμ.