μ€νλ§μ΄ λμ€κΈ° μ μ EJB(Enterprise java Beans)λΌλ μ»΄ν¬λνΈ κΈ°μ μ μ¬μ©νμμ΅λλ€.
λ§μ μ΄μ©μμλ₯Ό κ°λΉν μ μλ€λ μ₯μ μ κ°μ§κ³ μμ§λ§, λ§€μ° λ¬΄κ²κΈ°λλ¬Έμ μ€ννλλ₯Ό λ°κΎΈλ €κ³ ν΄λ μμ€λ₯Ό μ°ΎκΈ° μ΄λ ΅κ³ , μλ²λ₯Ό νλ² λ΄λ Έλ€κ° μ¬λ¦¬λλ° 10λΆμ΄μμ΄ κ±Έλ¦¬κΈ° λλ¬Έμ κ°λ°μκ° λ§μ΄ νλ€μλ€κ³ ν©λλ€.π₯
μ΄λ° EJBμ λ¨μ μ ν΄κ²°νκΈ° μν΄ λ‘λμ‘΄μ¨μ EJBκ° μμ΄λ μΆ©λΆν νμ₯ κ°λ₯ν μΉ μ ν리μΌμ΄μ μ κ°λ°ν μ μμμ 보μ¬μ£Όλ μμ μ½λλ₯Ό λ°ννκ²λκ³ , κ·Έμ μ± μ μ½κ³ κ°λͺ λ°μ μ κ²ν΄λ¬μ μμΉ΄λ‘ν μ£Όλλ‘ μ€νμμ€λ₯Ό λ§λ€μ΄λ³΄μ!!νκ²μ΄ Spring μ λλ€.πΌ
κ·Έλ λ€λ©΄ springμ μμΈκΉ? Spring frameworkλ μ’μ κ°μ²΄μ§ν₯μ€κ³μ 5κ°μ§ μμΉμ λ°λ₯΄κ³ μμ΄ κ°μ²΄μ§ν₯ νΉμ§μ μ΄λ¦΄μ μκΈ° λλ¬Έμ λλ€. μ€λμ κ·Έ κ°μ²΄μ§ν₯μ€κ³μ 5κ°μ§ μμΉμ΄ 무μμΈμ§ μμλ³΄κ³ μ ν©λλ€.
ν΄λμ€λ₯Ό λ³κ²½νλ μ΄μ λ λ¨ ν κ°μ§μ¬μΌ νλ€. ( λ‘λ²νΈ C. λ§ν΄)
μννΈμ¨μ΄ μν°ν°(ν΄λμ€, λͺ¨λ, ν¨μ λ±)λ νμ₯μ λν΄μλ μ΄λ € μμ΄μΌ νμ§λ§ λ³κ²½μ λν΄μλ λ«ν μμ΄μΌ νλ€. ( λ‘λ²νΈ C. λ§ν΄)
μ΄λ κ²λ§ λ§νλ©΄ μ΄ν΄νκΈ°κ° μ΄λ €μ°λ μμλ₯Ό νλ² μ΄ν΄λ΄ λλ€.
public class MemberService{
private MemberRepository memberreRepository = new MemoryMemberRepository();
// ---------------- -------------------------
// λΆλͺ¨ν΄λμ€ or μΈν°νμ΄μ€ λ©λͺ¨λ¦¬μλ€ μ μ₯νλ ꡬν체
}
μκ°μ΄ νλ¬ μ΄μ λΆν°λ DBμλ€κ° μ μ₯νλ ννλ‘ λ°κΎΈκΈ°λ‘ νμ΅λλ€. μ΄μ κ°λ°μκ° μμ νλ €κ³ νκ² μ£ ? μλλ λ³κ²½ν μ½λμ λλ€
public class MemberService{
private MemberRepository memberRepository = new JdbcMemberRepository();
}
μ¬κΈ°μ 보면 λ± MemoryMemberRepository()λ₯Ό JdbcMemberRepository()λ‘ ν΄λμ€μ΄λ¦μ΄ λ°λμμ΅λλ€.
λ€νμ±μ μ¬μ©νλλ° (= νμ₯μνμ§λ§) μ½λμ λ³κ²½μ΄ μΌμ΄λ μνμ λΌμ κ°λ°© νμμ μμΉ μλ°°λλ€κ³ λ³Ό μ μμ΅λλ€.
Sκ° Tμ νμ μ νμ΄λ©΄ νλ‘κ·Έλ¨μμ μλ£ν Tμ κ°μ²΄λ ν΄λΉ νλ‘κ·Έλ¨μ μνλ μμ±μ λ³κ²½νμ§ μκ³ μλ£ν Sμ κ°μ²΄λ‘ κ΅μ²΄(μΉν)ν μ μμ΄μΌ νλ€. - λ°λ°λΌ 리μ€μ½ν(Babara Liskov)
μμ ν΄λμ€λ λΆλͺ¨ ν΄λμ€λ₯Ό λ체ν μ μμ΄μΌ νλ€. - λ‘λ²νΈ Cλ§ν΄
νλ‘κ·Έλ¨μ κ°μ²΄λ νλ‘κ·Έλ¨μ μ νμ±μ κΉ¨λ¨λ¦¬μ§ μμΌλ©΄μ νμ νμ
μ μΈμ€ν΄μ€λ‘ λ°κΏ μ μ
μ΄μΌ ν¨
λ€νμ±μμ νμ ν΄λμ€λ μΈν°νμ΄μ€ κ·μ½μ λ€ μ§μΌμΌ νλ€λ κ², λ€νμ±μ μ§μνκΈ° μν μ
μΉ, μΈν°νμ΄μ€λ₯Ό ꡬνν ꡬν체λ λ―Ώκ³ μ¬μ©νλ €λ©΄ μ΄ μμΉμ΄ νμν©λλ€.
ν΅μ¬μ λΆλͺ¨ ν΄λμ€λ₯Ό μ¬μ©νλ μμΉμ μμ ν΄λμ€λ₯Ό λμ μ¬μ©νμ λ μ½λκ° μλ μλλλ‘ μλν΄μΌ νλ€λ κ²μ μλ―Έν©λλ€.
λͺ¨λ νμν΄λμ€κ° μμ ν΄λμ€μ λμΌν λ°©μμΌλ‘ λμν΄μΌ ν©λλ€.
μλ°μ¬λ‘ μμ) μ§μ¬κ°νμ μμν μ μ¬κ°ν ν΄λμ€ : Rectangle κ°μ²΄λ₯Ό Squearλ‘ λ체νλ©΄, μ μ¬κ°ν νΉμ§λλ¬Έμ λμ΄ κ²°κ³Όκ° λ€λ₯΄κ² λμ¬ μ μμ΅λλ€. μ μ¬κ°νμ μ§μ¬κ°νμΌ μ μμ§λ§ Squere κ°μ²΄λ Rectangle κ°μ²΄κ° μλλλ€. μ΄λ Square κ°μ²΄μ λμμ΄ Rectangle κ°μ²΄μ λμκ³Ό μΌμΉνμ§ μκΈ° λλ¬Έμ
λλ€.
ν΄λΌμ΄μΈνΈλ μ¬μ©νμ§ μλ μΈν°νμ΄μ€μ κ°μ λ‘ μμ‘΄ν΄μλ μλλ€. -λ‘λ²νΈ C. λ§ν΄
1. νΉμ ν΄λΌμ΄μΈνΈλ₯Ό μν μΈν°νμ΄μ€ μ¬λ¬ κ°κ° λ²μ© μΈν°νμ΄μ€ νλλ³΄λ€ λ«λ€.
μΈν°νμ΄μ€νλλ₯Ό λ°κΎΈλ €λ©΄ νμ ν΄λμ€κ° λͺ¨λ λ°λμ¬μΌνκΈ° λλ¬Έμ κΈ°λ₯μ΄ μ¬λ¬κ°λ©΄ μΈν°νμ΄μ€λ₯Ό λλλκ² μ’λ€.
ISPλ μΈν°νμ΄μ€κ° μμ§λ ₯ μΈ‘λ©΄μμ μκ² λΆν νμ¬ ν΄λμ€κ° νμν μμ
λ§ μ€ννλλ‘ νλ κ²μ λͺ©νλ‘ ν©λλ€.
ISPλ λ¨μΌ μ±
μ μμΉ(SRP)μ κ±°μ λΉμ·ν λͺ©νλ₯Ό κ°μ§κ³ μμ΅λλ€.
λμ μ°¨μ΄μ μ SRPλ ν΄λμ€μ κ΄λ ¨λ λ°λ©΄ ISPλ μΈν°νμ΄μ€μ κ΄λ ¨λμ΄ μλ€λ κ²μ
λλ€.
- μμ λͺ¨λμ νμ λͺ¨λμ μμ‘΄ν΄μλ μ λκ³ λ λ€ μΆμνμ μμ‘΄ν΄μΌ νλ€.
- μΆμνλ μΈλΆ μ¬νμ μμ‘΄ν΄μλ μ λκ³ μΈλΆμ¬ν(ꡬ체μ μΈ κ΅¬ν)μ μΆμνμ μμ‘΄ν΄μΌ νλ€. -λ‘λ²νΈ C.λ§ν΄
μΆμνμ μμ‘΄ν΄μΌνκ³ , ꡬ체νμ μμ‘΄νλ©΄ μλ¨
ꡬν ν΄λμ€μ μμ‘΄νμ§ λ§κ³ , μΈν°νμ΄μ€μ μμ‘΄
μλ₯Ό λ€λ©΄ μ€μ μν©μμ νμν λ
κΈ°νμ:" λ¨μμκ²λ§ λ©μΌμμ€ν
μΌ λ³΄λ΄λ³ΌκΉ?"
κ°λ°μμ:"μ΄κ±° νλ €λ©΄ λ€λ―μ΄κ³ μ³μΌν΄!"
μ΄λ κ² λλ©΄ μλλ€λ λ»μ
λλ€.
μ΄λ€κΈ°λ₯μ λ°κΏμ ν΄λ³΄μ λΌκ³ ν λ μ΄λ€ μΈν°νμ΄μ€μ ν΄λμ€λ₯Ό λΌλ€ μμ νκ±Έ λ£μμλ μ μμ μΌλ‘ λμνλλ‘ λ§λ€μ΄μΌ ν©λλ€.
νΉμ ν΄λμ€κ° λ무 μμ‘΄μ μ΄λΌ λ€λ₯Έ κ²μ μμ ν΄μΌνλ€λ©΄ μμ‘΄μ± μμ μμΉμ μλ°°λ©λλ€.
DIPλ μμ λͺ¨λμ ꡬ체μ μΈ κ΅¬νμ΄ μλ μΆμν(μΈν°νμ΄μ€)μ μ’
μμ μΌλ‘ λ§λ€μ΄ νμ λͺ¨λμ λν μμ λͺ¨λμ μ’
μμ±μ μ€μ΄λ κ²μ λͺ©νλ‘ ν©λλ€.
DIPλ₯Ό μ§ν€λ©΄ μ’
μμ±μ μ€μΌ μ μκΈ° λλ¬Έμ μ μ§κ΄λ¦¬ λ° μμ μ΄ μ¬μ΄ μ½λλ₯Ό μμ±ν μ μκ² λ©λλ€.
β λ€νμ± λ§μΌλ‘λ OCP, DIPλ₯Ό μ§ν¬ μ μμ
β λ€νμ± λ§μΌλ‘λ ꡬν κ°μ²΄λ₯Ό λ³κ²½ν λ ν΄λΌμ΄μΈνΈ μ½λλ ν¨κ» λ³κ²½
β λ€νμ± λ§μΌλ‘λ μ½κ² λΆνμ κ°μ λΌμ°λ―μ΄ κ°λ° ν μ μμ
πͺ μ’μ κ°μ²΄μ§ν₯ κ°λ°μ νκΈ°μν΄ μ¬λ¬κ°μ§ νλ‘κ·Έλ¨μ κ²½ννλ©΄μ(EJB) OCP, DIPλ₯Ό μ§ν€λ©΄μκ°λ°μ νλλ κ²°κ΅μ spring frameworkκ° λ§λ€μ΄ μ§λλΌ!