π μ€νλ§μμ μ±κΈν€μ μ¬μ©νλ μ΄μ
μμ ν¬μ€ν
μμ μ€νλ§ μ»¨ν
μ΄λκ° μμ‘΄κ΄κ³λ₯Ό μ£Όμ
ν κ°μ²΄λ₯Ό μμ±νκ³ κ΄λ¦¬νλ€κ³ νμλ€.
κ·Έλ λ€λ©΄ λκ·λͺ¨ νΈλν½ μ²λ¦¬λ₯Ό μꡬνλ μ ν리μΌμ΄μ
μμ 맀 μμ²λ§λ€ μλ‘μ΄ λΉ(Bean)μ λ§λ λ€κ³ μκ°ν΄λ³΄μ. μ΄ μ ν리μΌμ΄μ
μ 1μ΄μ 1μ²λ²μ μμ²μ΄ μ¨λ€κ³ νλ©΄ 1λΆμλ 6λ§λ²μ μλ‘μ΄ κ°μ²΄κ° μμ±λλ νμμ΄ λ°μνκ² λλ€. μ΄λ μ±λ₯μ λΆνκ° μκΈΈ μ μλ€.
μμ κ°μ μν©μ²λΌ λκ·λͺ¨ νΈλν½μ μ²λ¦¬ν μ μκ² μ€νλ§μμλ μ΄λ―Έ λ§λ€μ΄μ§ κ°μ²΄(1κ°)λ₯Ό 곡μ ν΄μ ν¨μ¨μ μΌλ‘ μ¬μ©ν μ μκ² ν΄μ€λ€.
β μ΄λ»κ² κ°μ²΄ μΈμ€ν΄μ€λ₯Ό νλλ§ λ§λ€κΉ?
κ·Έλ λ€λ©΄ μ€νλ§μμλ μ΄λ»κ² νλμ μΈμ€ν΄μ€λ§ μμ±λλλ‘ ν΄μ€κΉ? κΈ°λ³Έμ μΌλ‘ μκ°ν μ μλ μ±κΈν€ ν¨ν΄μ JavaμΈμ΄λ‘ ꡬννλ λ°©λ²μ μκ° ν μ μλ€. νμ§λ§ μ΄ λ°©λ²μ λ€μκ³Ό κ°μ λ¬Έμ μ λ€μ΄ μλ€.
- μΈλΆμμ κ°μ²΄ μμ±μ νμ§ λͺ»νλλ‘ private μμ±μλ₯Ό κ°μ§κ² λλλ° μ΄λ‘μΈν΄ μμμ΄ λΆκ°λ₯νλ€.
- μΈμ€ν΄μ€λ₯Ό 미리 μμ±ν ν, μ μ λ©μλ(static method)λ₯Ό ν΅ν΄ νΈμΆνλλ° μ΄λ‘μΈν΄ ν΄λΌμ΄μΈνΈκ° ꡬν ν΄λμ€μ μμ‘΄νκ² λλ€. (DIP μλ°)
- ν΄λΌμ΄μΈνΈκ° ꡬ체 ν΄λμ€μ μμ‘΄νκΈ° λλ¬Έμ μμ μ¬νμ΄ λ°μνλ©΄ OCPλ₯Ό μλ°νκ² λλ€.
- μ±κΈν€ ν¨ν΄μ μΈμ€ν΄μ€λ μμμ 곡μ νκΈ° λλ¬Έμ λ¨μ ν μ€νΈμ μ ν©νμ§ μλ€.
μμ κ°μ λ¬Έμ μ λ€λ‘ μ€νλ§μμλ μ§μ μ±κΈν€ ννμ μ€λΈμ νΈλ₯Ό λ§λ€κ³ κ΄λ¦¬νλ κΈ°λ₯μ μ 곡νλ€.
μ΄λ κ² μ±κΈν€ κ°μ²΄λ₯Ό μμ±νκ³ κ΄λ¦¬νλ κΈ°λ₯μ μ±κΈν€ λ μ§μ€νΈλ¦¬λΌκ³ νλ©° μ€νλ§ μ»¨ν
μ΄λκ° μ΄ μν μ νλ€.
β μ±κΈν€ λ μ§μ€νΈλ¦¬ μ₯μ
μ€νλ§ μ»¨ν μ΄λκ° λμ ν΄μ κ°μ²΄λ₯Ό κ΄λ¦¬νκΈ° λλ¬Έμ (μ μ΄μ μμ ,Inversion Of Control) μ΄λ₯Ό ν΅ν΄μ νλ²ν κ°μ²΄λ νλμ μΈμ€ν΄μ€λ§ μ‘΄μ¬νλ κ²μ΄ κ°λ₯νλ€. μ΄λ‘μΈν΄ λ€μκ³Ό κ°μ μ΄μ μ μ»μ μ μλ€.
- ν¨ν΄μ ꡬννκΈ° μν΄ μΆκ°μ μΈ μ½λλ₯Ό μμ±ν νμκ° μλ€.
- μ μ λ©μλ(static method)λ private μμ±μλ₯Ό μ¬μ©νμ§ μκ³ , λμ΄μ ꡬν ν΄λμ€μ μμ‘΄νμ§ μκΈ° λλ¬Έμ κ°μ²΄ μ§ν₯μ μΈ νλ‘κ·Έλλ°μ ν μ μλ€.
- ν μ€νΈμ μ©μ΄νλ€.
β μ±κΈν€ λ°©μμ μ£Όμμ
μ΄μ―€λλ©΄ μ€νλ§ μ»¨ν μ΄λκ° λ§λ€μ΄ μ£Όλ κ°μ²΄λ λ§λ₯μΌλ‘ 보μΈλ€. νμ§λ§ μ€νλ§ μ»¨ν μ΄λκ° λ§λ€μ΄μ£Όλ λ°©μ λν νλμ μΈμ€ν΄μ€λ₯Ό μμ±ν΄ 곡μ νλ κ²μ΄κΈ° λλ¬Έμ 무μν(stateless)λ‘ μ€κ³ν΄μΌ νλ€. μ΄ λ§μ κ°μ²΄κ° νΉμ μμ λ§λ€ κ°μ§κ³ μλ μ λ³΄κ° λ¬λΌμ μλλ€λ μλ―Έμ΄λ€.
(μνλ, νΉμ μμ μ κ°μ²΄κ° κ°μ§κ³ μλ μ 보μ μ§ν©μΌλ‘ κ°μ²΄μ ꡬ쑰μ νΉμ§μ νννλ€. κ°μ²΄μ μνλ κ°μ²΄μ μ‘΄μ¬νλ μ μ μΈ νλ‘νΌν°μ λμ μΈ νλ‘νΌν° κ°μΌλ‘ ꡬμ±λλ€. κ°μ²΄μ νλ‘νΌν°λ λ¨μκ°μΈ μμ±κ³Ό λ€λ₯Έ κ°μ²΄λ₯Ό μ°Έμ‘°νλ λ§ν¬λ‘ ꡬλΆν μ μλ€.)
무μνλ‘ μ€κ³νκΈ° μν΄μλ,
- νΉμ ν΄λΌμ΄μΈνΈμ μμ‘΄μ μΈ νλκ° μμΌλ©΄ μλλ€.
- νΉμ ν΄λΌμ΄μΈνΈκ° κ°μ λ³κ²½ν μ μλ νλκ° μμΌλ©΄ μλλ€.
- κ°κΈμ μ½κΈ°λ§ κ°λ₯ν΄μΌ νλ€.
- νλ λμ μ μλ°μμ 곡μ λμ§ μλ, μ§μλ³μ, νλΌλ―Έν°, ThreadLocal λ±μ μ¬μ©ν΄μΌ νλ€.
μλμ κ°μ΄ μ€νλ§ λΉμ μνλ₯Ό μ μ§νλ νλκ° μμΌλ©΄, μνλ κ°μ΄ μλμ€κ±°λ μ₯μ λ₯Ό λ°μμν¬ κ²μ΄λ€.
public class StatefulService {
private int price; // μνλ₯Ό μ μ§νλ νλ
public void order(int price) {
this.price = price; // μ΄λκ°μμ νλκ°μ λ³κ²½ν μ μλ λ¬Έμ κ° μκΈ΄λ€.
}
...
}
μ€νλ§ μ»¨ν μ΄λκ° κ°μ²΄ μΈμ€ν΄μ€λ₯Ό νλλ§ μμ±νκ² ν΄ μ£Όλ μ±κΈν€ λ μ§μ€νΈλ¦¬ λΌλ μ¬μ€μ μ 리νμλ€. μ΄λ‘μ¨ μ€νλ§ λΉμ΄ λ°λμ μ±κΈν€μΌλ‘ μμ±λλ κ²μ 보μ₯ν΄ μ€λ€κ³ λ³Ό μ μλλ° μ΄λ»κ² 보μ₯ν΄ μ£Όλμ§μ λν λ΄μ©μ΄ μλ€. μ΄ λ΄μ©μ μ€νλ§ λΉμ λ±λ‘νκΈ° μν μ΄λ Έν μ΄μ (@Bean , @Configuration, @Component)κ³Ό κ΄λ ¨μ΄ μκΈ° λλ¬Έμ λ€λ₯Έ ν¬μ€ν μμ λ€λ£¨λλ‘ νκ² λ€.
μ°Έκ³ λ° μΈμ©: μ€νλ§ ν΅μ¬ μ리 - κΈ°λ³ΈνΈ (μΈνλ°, κΉμν μ§μ곡μ μ)
'Backend > Spring' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
ν¬μ€ν μ΄ μ’μλ€λ©΄ "μ’μμβ€οΈ" λλ "ꡬλ ππ»" ν΄μ£ΌμΈμ!