π[Spring] λΉ(Bean)μ΄λ?
1οΈβ£ λΉ(Bean)μ΄λ?
- μ€νλ§ νλ μμν¬μμ λΉ(Bean) μ΄λ, μ€νλ§ IoC(Inversion of Control) 컨ν μ΄λμ μν΄ κ΄λ¦¬λλ κ°μ²΄λ₯Ό μλ―Έν©λλ€.
- μ€νλ§ λΉμ μ ν리μΌμ΄μ μ λ°μμ μ¬μ©λ μ μλλ‘ μ€νλ§ μ»¨ν μ€νΈμ λ±λ‘λ μΈμ€ν΄μ€μ λλ€.
- λΉμ λ³΄ν΅ μ ν리μΌμ΄μ μ ν΅μ¬ λ‘μ§μ΄λ λΉμ¦λμ€ λ‘μ§μ μννλ κ°μ²΄λ€λ‘, μ€νλ§μ μ΄λ¬ν λΉλ€μ ν¨μ¨μ μΌλ‘ κ΄λ¦¬νκ³ μ£Όμ ν©λλ€.
- λΉμ μ μμ λμμ μ€νλ§μ ν΅μ¬ κ°λ μΈ μμ‘΄μ± μ£Όμ (Dependency Injection, DI) κ³Ό λ°μ ν κ΄λ ¨μ΄ μμ΅λλ€.
2οΈβ£ μ€νλ§ λΉμ μ£Όμ νΉμ§.
-
1. μ±κΈν€(Singleton) μ€μ½ν
- κΈ°λ³Έμ μΌλ‘ μ€νλ§ λΉμ μ±κΈν€ μ€μ½νλ‘ κ΄λ¦¬λ©λλ€.
- μ¦, νΉμ λΉ νμ
μ λν΄ μ€νλ§ μ»¨ν
μ΄λλ νλμ μΈμ€ν΄μ€λ§μ μμ±νκ³ μ ν리μΌμ΄μ
λ΄μμ μ¬μ¬μ©ν©λλ€.
- λ¬Όλ‘ , νμμ λ°λΌ νλ‘ν νμ , μμ², μΈμ λ± λ€λ₯Έ μ€μ½νλ‘ λΉμ μ μν μλ μμ΅λλ€.
- μ¦, νΉμ λΉ νμ
μ λν΄ μ€νλ§ μ»¨ν
μ΄λλ νλμ μΈμ€ν΄μ€λ§μ μμ±νκ³ μ ν리μΌμ΄μ
λ΄μμ μ¬μ¬μ©ν©λλ€.
- κΈ°λ³Έμ μΌλ‘ μ€νλ§ λΉμ μ±κΈν€ μ€μ½νλ‘ κ΄λ¦¬λ©λλ€.
-
2. μμ‘΄μ± κ΄λ¦¬
- μ€νλ§ μ»¨ν
μ΄λλ λΉμ μμ‘΄μ±μ μλμΌλ‘ μ£Όμ
ν©λλ€.
- μ¦, λΉμ΄ μμ±λ λ νμν μμ‘΄μ±(λ€λ₯Έ λΉμ΄λ 리μμ€)μ μ€νλ§μ΄ μλμΌλ‘ μ£Όμ
ν΄μ€λλ€.
- μ΄ κ³Όμ μμ μμ±μ μ£Όμ , μΈν° μ£Όμ , νλ μ£Όμ λ± λ€μν λ°©λ²μ΄ μ¬μ©λ μ μμ΅λλ€.
- μ¦, λΉμ΄ μμ±λ λ νμν μμ‘΄μ±(λ€λ₯Έ λΉμ΄λ 리μμ€)μ μ€νλ§μ΄ μλμΌλ‘ μ£Όμ
ν΄μ€λλ€.
- μ€νλ§ μ»¨ν
μ΄λλ λΉμ μμ‘΄μ±μ μλμΌλ‘ μ£Όμ
ν©λλ€.
-
3. λΌμ΄νμ¬μ΄ν΄ κ΄λ¦¬
- μ€νλ§μ λΉμ μμ±λΆν° μλ©ΈκΉμ§μ λΌμ΄νμ¬μ΄ν΄μ κ΄λ¦¬ν©λλ€.
- λΉμ΄ μμ±λ λ μ΄κΈ°ν μμ
μ νκ±°λ, λΉμ΄ μλ©Έλ λ ν΄λ¦°μ
μμ
μ μνν μ μλλ‘ λ€μν ν
(Hook)μ μ 곡νλ©°, μ΄ κ³Όμ μμ
@PostConstruct
,@PreDestroy
κ°μ μ λ Έν μ΄μ μ μ¬μ©ν μ μμ΅λλ€.
- λΉμ΄ μμ±λ λ μ΄κΈ°ν μμ
μ νκ±°λ, λΉμ΄ μλ©Έλ λ ν΄λ¦°μ
μμ
μ μνν μ μλλ‘ λ€μν ν
(Hook)μ μ 곡νλ©°, μ΄ κ³Όμ μμ
- μ€νλ§μ λΉμ μμ±λΆν° μλ©ΈκΉμ§μ λΌμ΄νμ¬μ΄ν΄μ κ΄λ¦¬ν©λλ€.
-
4. μ€μ λ° κ΅¬μ±
- λΉμ XML μ€μ νμΌμ΄λ μλ° μ€μ ν΄λμ€μμ μ μλ μ μμ΅λλ€.
- λν,
@Component
,@Service
,@PostConstruct
,@PreDestroy
κ°μ μ λ Έν μ΄μ μ μ¬μ©ν μ μμ΅λλ€.
- λν,
- λΉμ XML μ€μ νμΌμ΄λ μλ° μ€μ ν΄λμ€μμ μ μλ μ μμ΅λλ€.
-
5. λμ¨ν κ²°ν©(Loose Coupling)
- μ€νλ§ λΉμ μ¬μ©νλ©΄ κ°μ²΄ κ°μ μμ‘΄μ±μ μ§μ μ€μ νλ κ²μ΄ μλλΌ, μ€νλ§μ΄ κ΄λ¦¬νλ―λ‘ μ½λκ° λμ± μ μ°νκ³ ν
μ€νΈνκΈ° μ¬μμ§λλ€.
- μ΄λ μ ν리μΌμ΄μ μ μ μ§λ³΄μμ±κ³Ό νμ₯μ±μ λμ¬μ€λλ€.
- μ€νλ§ λΉμ μ¬μ©νλ©΄ κ°μ²΄ κ°μ μμ‘΄μ±μ μ§μ μ€μ νλ κ²μ΄ μλλΌ, μ€νλ§μ΄ κ΄λ¦¬νλ―λ‘ μ½λκ° λμ± μ μ°νκ³ ν
μ€νΈνκΈ° μ¬μμ§λλ€.
3οΈβ£ μ€νλ§ λΉμ μ μ μμ.
- λ€μμ λΉμ΄ μ΄λ»κ² μ μλκ³ , μ€νλ§ μ»¨ν
μ΄λκ° μ΄λ₯Ό κ΄λ¦¬νλμ§μ λν κ°λ¨ν μμμ
λλ€.
@Component public class MyService { public void performService() { System.out.println("Service is being performed.") } }
- μ μ½λμμ
@Component
μ λ Έν μ΄μ μ΄ μ μ©λMyService
ν΄λμ€λ μ€νλ§ λΉμΌλ‘ λ±λ‘λ©λλ€.- μ€νλ§ μ»¨ν μ΄λλ μ΄ λΉμ κ΄λ¦¬νκ³ , νμν λ μμ‘΄μ±μ μ£Όμ ν©λλ€.
- λΉμ μ€νλ§ μ»¨ν
μ€νΈμμ κ°μ Έμ μ¬μ©νλ μμλ λ€μκ³Ό κ°μ΅λλ€.
```java
@Autowired
private MyService myService;
public void useService() {
myService.performService();
}
```
- μ¬κΈ°μ
@Autowired
μ λ Έν μ΄μ μMyService
νμ μ λΉμ μ€νλ§ μ»¨ν μ΄λμμ μ£Όμ λ°μuseService
λ©μλμμ μ¬μ©ν μ μλλ‘ ν©λλ€.
κ²°λ‘ μ μΌλ‘, μ€νλ§ λΉμ μ€νλ§ μ ν리μΌμ΄μ μμ ν΅μ¬μ μΈ μν μ νλ κ°μ²΄λ‘, μ€νλ§ μ»¨ν μ΄λκ° κ΄λ¦¬νλ μΈμ€ν΄μ€μ΄λ©°, μ΄λ₯Ό ν΅ν΄ μ ν리μΌμ΄μ μ κ΅¬μ± μμλ€μ΄ μ μ°νκ³ ν¨μ¨μ μΌλ‘ λμνλλ‘ λμ΅λλ€.