π© μμ±μ μμ‘΄μ± μ£Όμ [ DI ] μ μ¨μΌνλ μ΄μ
μ λ² κΈμμ μμ‘΄μ± μ£Όμ μ λν΄ μ€λͺ νμλ€. νλ μ£Όμ , μμ μ μ£Όμ , μμ±μ μ£Όμ μ μ€λͺ νμλλ° μ΄ μ€ μμ±μ μ£Όμ μ μ¨μΌνλ μ΄μ λ₯Ό μ€λͺ ν κ²μ΄λ€.
μμ±μ μ£Όμ (Constructor Injection)μ μμ±μλ₯Ό ν΅ν΄ μμ‘΄ κ΄κ³λ₯Ό μ£Όμ νλ λ°©λ²μ΄λ€.
@Controller
public class ControllerTest{
IServiceTest service;
@Autowired
public Controller(IServiceTest service){
this.service = service;
}
μ μμ±μ μ£Όμ μ μ¬μ©ν΄μΌ ν κΉ?
μμ±μ μ£Όμ μ μμ±μμ νΈμΆ μμ μ 1ν νΈμΆ λλ κ²μ΄ 보μ₯λλ€. κ·Έλ¬λ―λ‘ μ£Όμ λ°μ κ°μ²΄κ° λ³νμ§ μκ±°λ λ°λμ κ°μ²΄μ μ£Όμ μ΄ νμν κ²½μ°μ κ°μ νκΈ° μν΄ μ¬μ©ν μ μλ€. κ·Έλ¦¬κ³ Spring νλ μμν¬ 4.x λ²μ μμλ μμ±μκ° 1κ° μμκ²½μ° @Autowiredλ₯Ό μλ΅ν΄λ μ£Όμ μ΄ κ°λ₯νλ€.
@Service
public class UserService{
private IUserRepository userRepository;
private IProductService productService;
// @Autowired μλ΅ κ°λ₯
public UserService(IUserRepository userRepository, IProductService productService){
this.userRepository = userRepository;
this.productService = productService;
}
μμ μ½λλ μμ±μλ₯Ό ν΅ν μμ‘΄μ± μ£Όμ μ½λμ΄λ€.
μ΄μ κ°μ μ½λλ₯Ό μ¬μ©ν΄μΌ νλ κ°μ₯ ν° μ΄μ λ μλ¬λ₯Ό λ°©μ§ν μ μκΈ° λλ¬Έμ΄λ€.
κ·Έ μΈμλ κ°μ²΄μ λΆλ³μ± ν보, ν μ€νΈ μ½λ μμ±, final ν€μλ μμ± λ° Lombok κ³Όμ κ²°ν©, μν μ°Έμ‘° μλ¬ λ°©μ§ λ±μ΄ μλ€.
1. κ°μ²΄μ λΆλ³μ± ν보
μ€μ κ°λ°μ νλ€ λ³΄λ©΄ μμ‘΄ κ΄κ³μ λ³κ²½μ΄ νμν μν©μ κ±°μ μλ€. νμ§λ§ μμ μ μ£Όμ μ΄λ μΌλ° λ©μλ μ£Όμ μ μ΄μ©νλ©΄ λΆνμνκ² μμ μ κ°λ₯μ±μ μ΄μ΄λμ΄ μ μ§λ³΄μμ±μ λ¨μ΄λ¨λ¦°λ€. μ¦ κ°λ°μμ μλμλ κ΄κ³μμ΄ μμ λλ μν©μ΄ λ°μν μ μλ€λ κ²μ΄λ€. κ·Έλ¬λ―λ‘ μμ±μ μ£Όμ μ ν΅ν΄ λ³κ²½μ κ°λ₯μ±μ λ°°μ νκ³ λΆλ³μ±μ 보μ₯νλ κ²μ΄ μ’λ€.
2. ν μ€νΈ μ½λ μμ±
ν μ€νΈκ° νΉμ νλ μμν¬μ μμ‘΄νλ κ²μ μ’μ§ μλ€. κ·Έλ¬λ―λ‘ κ°λ₯ν μλ°λ‘ ν μ€νΈλ₯Ό νλ κ²μ΄ κ°μ₯ μ’μλ°, μμ±μ μ£Όμ μ΄ μλ λ€λ₯Έ μ£Όμ μΌλ‘ μμ±λ μ½λλ μμν μλ° μ½λλ‘ λ¨μ ν μ€νΈλ₯Ό μμ±νκΈ° μ΄λ ΅λ€.
3. final ν€μλμ Lombokμ κ²°ν©
μμ±μ μ£Όμ μ μ¬μ©νλ©΄ νλ κ°μ²΄μ final ν€μλλ₯Ό μ¬μ©ν μ μλ€. λ°λΌμ μ΄λ μ»΄νμΌ μμ μ λλ½λ μμ‘΄μ±μ νμΈν μ μλ€.
λ°λ©΄ λ€λ₯Έ μ£Όμ λ°©λ²λ€μ κ°μ²΄μ μμ±(μμ±μ νΈμΆ) μ΄νμ νΈμΆλλ―λ‘ final ν€μλλ₯Ό μ¬μ©ν μ μλ€. λν final ν€μλλ₯Ό λΆμ΄λ©΄ Lombokκ³Ό κ²°ν©λμ΄ μ½λλ₯Ό κ°κ²°νκ² μμ±ν μ μλ€. Lombokμλ final λ³μλ₯Ό μν μμ±μλ₯Ό λμ μμ±ν΄μ£Όλ @RequiredArgsConstructorλ₯Ό μ¬μ©νλ€.
μ»΄νμΌ μμ μ λλ½λ μμ‘΄μ±μ νμΈνλ κ²μ΄ λ§€μ° μ€μν μ΄μ μΈλ° μ΄λ μ€μ μ ν리μΌμ΄μ μ λ°°ν¬νκ³ λμ€μ μ€λ₯κ° λ°μνλ€λ©΄ λ§€μ° μνν μν©μ΄λ€. νμ§λ§ μμ±μ μ£Όμ μ ν΅ν΄ μ»΄νμΌ μ μμ‘΄μ±μ νμΈνκ³ λ°νμ μλ¬κ° λμ§ μλλ‘ λ―Έμ°μ λ°©μ§νλ κ²μ΄λ€. κ°λ°μλ μ μ΄ μλκΈ° λλ¬Έμ λΆλͺ ν μ€μλ₯Ό ν μ μκ³ μ΄λ₯Ό μ¬μ μ λ°©μ§νλλ‘ νκΈ° μν λ°©λ²μ΄λΌκ³ λ³Ό μ μλ€.
μλ₯Ό λ€μ΄μ 보μ
@Service
public class UserService{
private IUserRepository userRepository;
@Autowired
public void setIUserRepository(){
// biz()
}
public void hello(){
setIUserRepository~
}
λ λν μ²μμ μ μμ±μ μ£Όμ μ μ¬μ©ν΄μΌνκ³ κ·Έ μ΄μ λ₯Ό μ λͺ°λλ€. νμ§λ§ μμλ₯Ό λ€μ΄μ 보λ€λ³΄λ©΄ μ΄ν΄κ° μ¬μ λ€.
μλ set μΌλ‘ μμ±μ μ£Όμ μ νμλ€. νμ§λ§ μμ μ½λλ helloλΌλ λ©μλκ° μ€νλκΈ° μ μλ μμ‘΄μ±μ μμ§ λͺ»νλ€. λ§μ½ μ΄ν리μΌμ΄μ μ΄ λ°°ν¬κ° λμκ³ λ©°μΉ νμ hello λ©μλκ° μ€νλμλ€κ³ κ°μ νμ. κ·Έλ¬λ©΄ κ·Έ λ λ°μν μ€λ₯λ μ¬μ©μμκ² λμκ°λ κ²μ΄λ€. μ΄λ¬ν μ¬κ³ λ₯Ό λ°©μ§νκΈ° μν΄ μ»΄νμΌ μλ¬λ‘ κΌ μ‘μμ£Όμ΄μΌ νκ³ μ¬μν μ€μκ° λ ν° μν©μ΄ λλ κ²μ λ°©μ§νλλ‘ νλ€.
'π» BackEnd > π’ Spring | SpringBoot' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
π’ [Spring] @RequiredArgsConstructor μμ±μ μ£Όμ (0) | 2023.07.11 |
---|---|
π’ [Spring] Eclipse μ€νλ§(Spring) νλ‘μ νΈ μμ± (0) | 2023.07.10 |
π’ [Spring] μ€νλ§ μμ‘΄μ± μ£Όμ (DI) - [1] (0) | 2023.07.06 |
π’ [Spring] μ€νλ§ νμΌ μ λ‘λ (0) | 2023.06.30 |
π’ [Spring] μ€νλ§ μ€μ νμΌ (XML) (0) | 2023.06.28 |