π[Spring] Springμμ λΉ(Bean)μ μ£Όμ λ°λ λ°©λ²λ€.
- Springμμ λΉ(Bean) μ μ£Όμ λ°λ λ°©λ²μλ μ¬λ¬ κ°μ§κ° μμΌλ©°, μ£Όλ‘ μμ‘΄μ± μ£Όμ (Dependency Injection, DI) μ΄λΌλ κ°λ μ ν΅ν΄ μ΄λ£¨μ΄μ§λλ€.
- Spring IoC 컨ν μ΄λλ κ°μ²΄ κ°μ μμ‘΄μ±μ κ΄λ¦¬νκ³ , νμν κ³³μ μλμΌλ‘ λΉμ μ£Όμ ν©λλ€.
- λΉμ μ£Όμ λ°λ λ°©λ²μλ μμ±μ μ£Όμ , μΈν° μ£Όμ , νλ μ£Όμ μ΄ μμ΅λλ€.
πββοΈ μμ‘΄μ±(Dependency)
πββοΈ Spring 컨ν μ΄λλ₯Ό μ¬μ©νλ μ΄μ
πββοΈ Spring 컨ν μ΄λ
πββοΈ Spring λΉ(Bean)
1οΈβ£ μμ±μ μ£Όμ (Constructor Injection)
- μμ±μ μ£Όμ μ μμ‘΄μ±μ μ£Όμ ν λ μμ±μλ₯Ό ν΅ν΄ λΉμ μ£Όμ νλ λ°©μμ λλ€.
- κ°μ₯ κΆμ₯λλ λ°©μ μ€ νλλ‘, μμ‘΄μ±μ κ°μ νκ³ λΆλ³μ±μ 보μ₯ν μ μμ΅λλ€.
- λν, ν μ€νΈνκΈ° μ©μ΄ν λ°©μμ λλ€.
μμ
@Service
public class UserService {
private final UserRepository userRepository;
@Autowired // Spring 4.3+ μμλ μλ΅ κ°λ₯
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
public void process() {
userRepository.save();
}
}
μ€λͺ .
-
UserService
λUserRepository
λΉμ μμ±μλ₯Ό ν΅ν΄ μ£Όμ λ°μ΅λλ€. -
@Autowired
λ₯Ό ν΅ν΄ μ€νλ§μ΄UserRepository
λΉμ μλμΌλ‘ μ£Όμ νκ² λ©λλ€. -
@Autowired
λ Spring 4.3 μ΄ν μμ±μ μ£Όμ μμλ μλ΅ κ°λ₯νμ§λ§, λͺ μμ μΌλ‘ μ λ κ²½μ°λ μμ΅λλ€.
2οΈβ£ μΈν° μ£Όμ (Setter Injection)
- μΈν° μ£Όμ μ μΈν° λ©μλλ₯Ό ν΅ν΄ λΉμ μ£Όμ νλ λ°©μμ λλ€.
- μ νμ μΈ μμ‘΄μ±μ μ£Όμ ν λ μ μ©νλ©°, μ£Όμ λ°μ λΉμ λ³κ²½ν μ μλ μ μ°μ±μ μ 곡ν©λλ€.
μμ
@Service
public class UserService {
private UserRepository userRepository;
@Autowired
public void setUserRepository(UserRepository userRepository) {
this.userRespository = userRepository;
}
public void process() {
userRepository.sava();
}
}
μ€λͺ .
-
UserSevice
λsetUserRepository
λΌλ μΈν° λ©μλλ₯Ό ν΅ν΄UserRepository
λΉμ μ£Όμ λ°μ΅λλ€.-
@Autowired
μ΄λ Έν μ΄μ μ ν΅ν΄ μ€νλ§μ΄ μ μ ν λΉμ μ£Όμ νκ² λ©λλ€.
-
3οΈβ£ νλ μ£Όμ (Field Injection)
- νλ μ£Όμ
μ μ§μ νλμ
@Autowired
μ΄λ Έν μ΄μ μ λΆμ¬μ λΉμ μ£Όμ νλ λ°©μμ λλ€. - κ°μ₯ κ°λ¨ν λ°©μμ΄μ§λ§, ν μ€νΈνκΈ° μ΄λ €μ΄ ꡬ쑰λ₯Ό λ§λ€ μ μκ³ , μ£Όμ λ νλκ° βfinalβλ‘ μ€μ λμ§ μκΈ° λλ¬Έμ βλΆλ³μ±βμ΄ λ³΄μ₯λμ§ μμ΅λλ€.
- μΌλ°μ μΌλ‘λ μ§μνλ λ°©μμ λλ€.
μμ
@Servicee
public class UserService {
@Autowired
private UserRepository userRepository;
public void process() {
userRepository.save();
}
}
μ€λͺ .
-
UserService
λUserRepository
λΉμ νλμ μ§μ μ£Όμ λ°μ΅λλ€. - νλ μ£Όμ λ°©μμ μ½λκ° κ°κ²°νμ§λ§, ν μ€νΈλ μ μ§λ³΄μ μΈ‘λ©΄μμ λΆλ¦¬ν μ μμ΅λλ€.
4οΈβ£ κ° μ£Όμ λ°©μμ λΉκ΅.
1. μμ±μ μ£Όμ (Constructor Injection)
-
μ₯μ
- μμ‘΄μ±μ΄ νμμ μμ κ°μ ν μ μκ³ , λΆλ³μ±μ 보μ₯νλ©°, ν μ€νΈνκΈ° μ©μ΄ν©λλ€.
- μμ‘΄μ±μ΄ μ£Όμ λμ§ μμΌλ©΄ μ»΄νμΌ νμμ μ€λ₯λ₯Ό λ°κ²¬ν μ μμ΅λλ€.
-
λ¨μ
- ν΄λμ€κ° λ§μ μμ‘΄μ±μ κ°μ§ κ²½μ°, μμ± μΈμκ° λ§μμ§ μ μμ΅λλ€.
2. μΈν° μ£Όμ (Setter Injection)
-
μ₯μ
- μ νμ μΈ μμ‘΄μ± μ£Όμ μ΄ κ°λ₯νλ©°, κ°μ²΄ μμ± νμ μ£Όμ ν μ μμ΄ μ μ°μ±μ μ 곡ν©λλ€.
-
λ¨μ
- μμ‘΄μ±μ΄ μ£Όμ λμ§ μμ μνλ‘ μ¬μ©λ μνμ΄ μ‘΄μ¬νλ©°, κ°μ²΄μ μνκ° λ³κ²½λ μ μμ΅λλ€.
3. νλ μ£Όμ (Field Injection)
-
μ₯μ
- μ½λκ° κ°κ²°νκ³ κ°μ₯ μ½μ΅λλ€.
-
λ¨μ
- ν μ€νΈνκΈ° μ΄λ ΅κ³ , μμ‘΄μ±μ κ°μ νμ§ μμΌλ©°, 리νλ μ μ μ¬μ©νκΈ° λλ¬Έμ λΆλ³μ±μ΄ 보μ₯λμ§ μμ΅λλ€.
- λν, νλμ μ κ·Όνλ λ°©μμ΄κΈ° λλ¬Έμ SRP(Single Responsibility Principle)λ₯Ό μλ°ν κ°λ₯μ±μ΄ λμ΅λλ€.
πββοΈ SOLID μμΉ
5οΈβ£ κ²°λ‘
- μμ±μ μ£Όμ (Constructor Injection) : μμ±μ μ£Όμ (Constructor Injection) μ μμ‘΄μ± κ°μ , λΆλ³μ± 보μ₯, ν μ€νΈ μ©μ΄μ± μΈ‘λ©΄μμ κ°μ₯ κΆμ₯λλ λ°©μμ λλ€.
- μΈν° μ£Όμ (Setter Injection) : μ νμ μμ‘΄μ±μ μ£Όμ ν λ μ μ©νμ§λ§, μΈν° λ©μλκ° κ³΅μ©μΌλ‘ λ ΈμΆλλ€λ λ¨μ μ΄ μμ΅λλ€.
- νλ μ£Όμ (Field Injection) : κ°μ₯ κ°λ¨ν λ°©μμ΄μ§λ§, ν μ€νΈκ° μ΄λ ΅κ³ λΆλ³μ±μ 보μ₯νμ§ μκΈ° λλ¬Έμ μ§μνλ λ°©μμ λλ€.