-
μ€νλ§μ΄λ?, SOLID, IoC, DI, 컨ν μ΄λSpring 2022. 3. 24. 15:41
πΉ μ€νλ§
: μλ° μΈμ΄ κΈ°λ°μ νλ μμν¬
β νλ μμν¬
μ ν리μΌμ΄μ μ κ°λ° νλλ° μμ΄ κΈ°λ³Έμ μΌλ‘ νμν ꡬ쑰μ ꡬμ±μ κ°μΆκ³ μμ΄ κ°λ°μκ° κΈ°λ₯ ꡬνμ μ§μ€ν μ μλλ‘ νλ€.
μ΄κ²λ§μΌλ‘ νλ‘κ·Έλ¨μ΄ λμνλκ²μ΄ μλλΌ λΌλλ₯Ό μ 곡νκ³ κ·Έ μμ κ°λ°μκ° μ½λλ₯Ό μ¬λ € λμνκ²νλ€.
νλ μμν¬κ° μ 곡νλ λΌλμ κ°μ΄λμ λ§κ² μ€κ³νκ³ κ°λ°ν¨μΌλ‘μ¨ μμ€ν μ ν΅ν©, μΌκ΄μ±μ μ μ§ν μ μκ² λλ€.
: μλ° μΈμ΄μ κ°μ₯ ν° νΉμ§ - κ°μ²΄ μ§ν₯ μΈμ΄
: κ°μ²΄ μ§ν₯ μΈμ΄κ° κ°μ§ κ°λ ₯ν νΉμ§μ μ΄λ €λ΄λ νλ μμν¬
: μ’μ κ°μ²΄ μ§ν₯ μ ν리μΌμ΄μ μ κ°λ°ν μ μκ² λμμ£Όλ νλ μμν¬
: λ€νμ±μ κ·Ήλνν΄μ μ΄μ©ν μ μκ² λμμ€λ€
: μ μ΄μ μμ (IoC), μμ‘΄κ΄κ³ μ£Όμ (DI)μ λ€νμ±μ νμ©ν΄μ μν κ³Ό ꡬνμ νΈλ¦¬νκ² λ€λ£° μ μλλ‘ μ§μνλ€
: μ€νλ§μ μ¬μ©νλ©΄ λ§μΉ λ κ³ λΈλ 쑰립νλ―μ΄! κ³΅μ° λ¬΄λμ λ°°μ°λ₯Ό μ ννλ―μ΄! ꡬνμ νΈλ¦¬νκ² λ³κ²½ν μ μλ€
πΉ κ°μ²΄ μ§ν₯ νΉμ§
: μΆμν
: μΊ‘μν
: μμ
: λ€νμ±
β κ°μ²΄ μ€κ³ν λ μν κ³Ό ꡬνμΌλ‘ κ΅¬λΆ -> λ¨μν΄μ§κ³ μ μ°ν΄μ§λ©° λ³κ²½λ νΈλ¦¬ν΄μ§λ€.
-> ν΄λΌμ΄μΈνΈλ λμμ μν (μΈν°νμ΄μ€)λ§ μλ©΄ λλ€.
=> ν΄λΌλ¦¬μΈνΈλ₯Ό λ³κ²½νμ§ μκ³ , μλ²μ ꡬν κΈ°λ₯μ μ μ°νκ² λ³κ²½ν μ μλ€.
πΉ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°
: μ»΄ν¨ν° νλ‘κ·Έλ¨μ λͺ λ Ήμ΄μ λͺ©λ‘μΌλ‘ 보λ μκ°μμ λ²μ΄λ μ¬λ¬κ°μ λ 립λ λ¨μ,
μ¦ "κ°μ²΄"λ€μ λͺ¨μμΌλ‘ νμ νκ³ μ νλ κ²
: κ°κ°μ κ°μ²΄λ λ©μμ§λ₯Ό μ£Όκ³ λ°κ³ , λ°μ΄ν°λ₯Ό μ²λ¦¬ν μ μλ€
: νλ‘κ·Έλ¨μ μ μ°νκ³ λ³κ²½μ΄ μ©μ΄νκ² λ§λ€κΈ° λλ¬Έμ λκ·λͺ¨ μννΈμ¨μ΄ κ°λ°μ λ§μ΄ μ¬μ©λλ€
πΉ μ’μ κ°μ²΄ μ§ν₯ μ€κ³μ 5κ°μ§ μμΉ(SOLID)
- SRP : λ¨μΌ μ± μ μμΉ (Single Responsibility Principle)
- OCP : κ°λ°©-νμ μμΉ (Open/Closed Principle)
- LSP : 리μ€μ½ν μΉν μμΉ (Liskov Substitution Principle)
- ISP : μΈν°νμ΄μ€ λΆλ¦¬ μμΉ (Interface Segregation Principle)
- DIP : μμ‘΄κ΄κ³ μμ μμΉ (Dependency Inversion Principle)
πΈ SRP λ¨μΌ μ± μ μμΉ
: ν ν΄λμ€λ νλμ μ± μλ§ κ°μ ΈμΌ νλ€
: μ€μν κΈ°μ€μ λ³κ²½μ΄λ€, λ³κ²½μ΄ μμ λ νκΈ ν¨κ³Όκ° μ μΌλ©΄ λ¨μΌ μ± μ μμΉμ μ λ°λ₯Έ κ²
ex) UI λ³κ²½, κ°μ²΄μ μμ±κ³Ό μ¬μ©μ λΆλ¦¬
πΈ OCP κ°λ°©-νμ μμΉβ¨
: μννΈμ¨μ΄ μμλ νμ₯μλ μ΄λ € μμΌλ λ³κ²½μλ λ«ν μμ΄μΌ νλ€
: λ€νμ±μ νμ©
: μΈν°νμ΄μ€λ₯Ό ꡬνν μλ‘μ΄ ν΄λμ€λ₯Ό νλ λ§λ€μ΄μ μλ‘μ΄ κΈ°λ₯μ ꡬν
πΈ LSP 리μ€μ½ν μΉν μμΉ
: νλ‘κ·Έλ¨μ κ°μ²΄λ νλ‘κ·Έλ¨μ μ νμ±μ κΉ¨λ¨λ¦¬μ§ μμΌλ©΄μ νμ νμ μ μΈμ€ν΄μ€λ‘ λ°κΏ μ μμ΄μΌ νλ€
: λ€νμ±μμ νμ ν΄λμ€λ μΈν°νμ΄μ€ κ·νμ λ€ μ§μΌμΌ νλ€, λ€νμ±μ μ§μνκΈ° μν μμΉ, μΈν°νμ΄μ€λ₯Ό ꡬνν ꡬν체λ λ―Ώκ³ μ¬μ©νλ €λ©΄, μ΄ μμΉμ΄ νμνλ€
ex) μλμ°¨ μΈν°νμ΄μ€μ μμ μ μμΌλ‘ κ°λΌλ κΈ°λ₯, λ€λ‘ κ°λλ‘ κ΅¬ννλ©΄ LSP μλ°, λ리λλΌλ μμΌλ‘ κ°μΌνλ€
πΈ ISP μΈν°νμ΄μ€ λΆλ¦¬ μμΉ
: νΉμ ν΄λΌμ΄μΈνΈλ₯Ό μν μΈν°νμ΄μ€ μ¬λ¬ κ°κ° λ²μ© μΈν°νμ΄μ€ νλλ³΄λ€ λ«λ€
: μλμ°¨ μΈν°νμ΄μ€ -> μ΄μ μΈν°νμ΄μ€, μ λΉ μΈν°νμ΄μ€λ‘ λΆλ¦¬
: μ¬μ©μ ν΄λΌμ΄μΈνΈ -> μ΄μ μ ν΄λΌμ΄μΈνΈ, μ λΉμ¬ ν΄λΌμ΄μΈνΈλ‘ λΆλ¦¬
: λΆλ¦¬νλ©΄ μ λΉ μΈν°νμ΄μ€ μμ²΄κ° λ³ν΄λ μ΄μ μ ν΄λΌμ΄μΈνΈμ μν₯μ μ£Όμ§ μλλ€
: μΈν°νμ΄μ€κ° λͺ νν΄μ§κ³ , λ체 κ°λ₯μ±μ΄ λμμ§λ€
πΈ DIP μμ‘΄κ΄κ³ μμ μμΉβ¨
: ꡬν ν΄λμ€μ μμ‘΄νμ§ λ§κ³ , μΈν°νμ΄μ€μ μμ‘΄ν΄λΌ
: μν μ μμ‘΄νκ² ν΄μΌνλ€
: κ°μ²΄ μΈμλ ν΄λΌμ΄μΈνΈκ° μΈν°νμ΄μ€μ μμ‘΄ν΄μΌ μ μ°νκ² κ΅¬ν체λ₯Ό λ³κ²½ν μ μλ€, ꡬν체μ μμ‘΄νκ² λλ©΄ λ³κ²½μ΄ μ΄λ €μμ§λ€
=> μ 리
: κ°μ²΄ μ§ν₯μ ν΅μ¬μ λ€νμ±
: λ€νμ± λ§μΌλ‘λ μ½κ² λΆνμ κ°μ λΌμ°λ―μ΄ κ°λ°ν μ μλ€
: λ€νμ± λ§μΌλ‘λ ꡬν κ°μ²΄λ₯Ό λ³κ²½ν λ ν΄λΌμ΄μΈνΈ μ½λλ ν¨κ» λ³κ²½λλ€
: λ€νμ± λ§μΌλ‘λ OCP, DIPλ₯Ό μ§ν¬ μ μλ€
: λκ° λ νμνλ€
πΉ μ€νλ§
: μ€νλ§μ λ€μ κΈ°μ λ‘ λ€νμ± + OCP,DIP λ₯Ό κ°λ₯νκ² μ§μ
- DI : μμ‘΄κ΄κ³ , μμ‘΄μ± μ£Όμ
- DI 컨ν μ΄λ μ 곡
: ν΄λΌμ΄μΈνΈ μ½λμ λ³κ²½ μμ΄ κΈ°λ₯ νμ₯
: μ½κ² λΆνμ κ΅μ²΄νλ―μ΄ κ°λ°
=> μ΄μ 리
: λͺ¨λ μ€κ³μ μν κ³Ό ꡬνμ λΆλ¦¬νμ
: μ ν리μΌμ΄μ μ€κ³ λν 곡μ°μ μ€κ³ νλ―μ΄ λ°°μλ§ λ§λ€μ΄λκ³ ,
λ°°μ°λ μΈμ λ μ§ μ μ°νκ² λ³κ²½ν μ μλλ‘ λ§λλ κ²μ΄ μ’μ κ°μ²΄ μ§ν₯ μ€κ³λ€
: μ΄μμ μΌλ‘λ λͺ¨λ μ€κ³μ μΈν°νμ΄μ€λ₯Ό λΆμ¬νμ
πΉ μ μ΄μ μμ IoC (Inversion of Control)
: νλ‘κ·Έλ¨μ μ μ΄ νλ¦μ μ§μ μ μ΄νλ κ²μ΄ μλλΌ μΈλΆμμ κ΄λ¦¬νλ κ²μ μ μ΄μ μμ IoCλΌκ³ νλ€
ex) AppConfig <- μ΄λ€ κ°μ²΄λ€μ΄ μ¬μ©λ κ²μΈμ§ μμ± & μ°κ²° λ΄λΉ
πΈ νλ μμν¬ vs λΌμ΄λΈλ¬λ¦¬
: λ΄κ° μμ±ν μ½λλ₯Ό μ μ΄νκ³ , λμ μ€ννλ©΄ => κ·Έκ²μ νλ μμν¬ (JUnit)
: λ΄κ° μμ±ν μ½λκ° μ§μ μ μ΄μ νλ¦μ λ΄λΉνλ€λ©΄ => λΌμ΄λΈλ¬λ¦¬
πΉ μμ‘΄κ΄κ³ μ£Όμ DI (Dependency Injection)
: μ μ μΈ ν΄λμ€ μμ‘΄κ΄κ³ / μ€νμμ μ κ²°μ λλ κ°μ²΄(μΈμ€ν΄μ€) μμ‘΄κ΄κ³ λμ λΆλ¦¬ν΄μ μκ°ν΄μΌ νλ€
πΈ μ μ μΈ ν΄λμ€ μμ‘΄κ΄κ³
: ν΄λμ€κ° μ¬μ©νλ import μ½λλ§ λ³΄κ³ μμ‘΄κ΄κ³λ₯Ό μ½κ² νλ¨ν μ μλ€
: μ ν리μΌμ΄μ μ μ€ννμ§ μμλ λΆμν μ μλ€
πΈ λμ μΈ κ°μ²΄ μΈμ€ν΄μ€ μμ‘΄κ΄κ³
: μ ν리μΌμ΄μ μ€ν μμ μ μ€μ μμ±λ κ°μ²΄ μΈμ€ν΄μ€μ μ°Έμ‘°κ° μ°κ²°λ μμ‘΄ κ΄κ³λ€
* μ€νμμ (λ°νμ)μ μΈλΆμμ μ€μ ꡬν κ°μ²΄λ₯Ό μμ±νκ³ ν΄λΌμ΄μΈνΈμ μ λ¬ν΄μ ν΄λΌμ΄μΈνΈμ μλ²μ μ€μ μμ‘΄κ΄κ³ κ° μ°κ²°λλ κ²μ "μμ‘΄κ΄κ³ μ£Όμ "μ΄λΌ νλ€
: κ°μ²΄ μΈμ€ν΄μ€λ₯Ό μμ±νκ³ , κ·Έ μ°Έμ‘°κ°μ μ λ¬ν΄μ μ°κ²°λλ€
: μμ‘΄κ΄κ³ μ£Όμ μ μ¬μ©νλ©΄ ν΄λΌμ΄μΈνΈ μ½λλ₯Ό λ°κΎΈμ§ μκ³ , ν΄λΌμ΄μΈνΈκ° νΈμΆνλ λμμ νμ μΈμ€ν΄μ€ λ³κ²½ κ°λ₯
: λν, μ μ μΈ ν΄λμ€ μμ‘΄κ΄κ³λ₯Ό λ³κ²½νμ§ μκ³ , λμ μΈ κ°μ²΄ μΈμ€ν΄μ€ μμ‘΄κ΄κ³λ₯Ό μ½κ² λ³κ²½ν μ μλ€
πΉ IoC 컨ν μ΄λ, DI 컨ν μ΄λ
: AppConfigμ²λΌ κ°μ²΄λ₯Ό μμ±νκ³ κ΄λ¦¬νλ©΄μ μμ‘΄κ΄κ³λ₯Ό μ°κ²°ν΄ μ£Όλ κ²
: μ£Όλ‘ DI컨ν μ΄λ == μ΄μλΈλ¬, μ€λΈμ νΈ ν©ν 리
'Spring' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
μ±κΈν€ 컨ν μ΄λ (0) 2022.04.12 μ€νλ§ μ»¨ν μ΄λμ μ€νλ§ λΉ (0) 2022.04.12 Spring ν΅μ¬ (0) 2022.04.11 MVC, API μ리 (0) 2022.03.22 νλ‘μ νΈ μμ± (0) 2022.03.17