κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°(OOP)
- μ»΄ν¨ν° νλ‘κ·Έλ¨μ λͺ λ Ήμ΄μ λͺ©λ‘μΌλ‘ 보λ μκ°μμ λ²μ΄λ μ¬λ¬ κ°μ λ 립λ λ¨μ, μ¦ “κ°μ²΄”λ€μ λͺ¨μμΌλ‘ νμ νκ³ μ νλ κ².
- κ°κ°μ κ°μ²΄λ λ©μμ§λ₯Ό μ£Όκ³ λ°κ³ λ°μ΄ν°λ₯Ό μ²λ¦¬ν μ μλ€. (νλ ₯)
- νλ‘κ·Έλ¨μ μ μ°νκ³ λ³κ²½μ΄ μ©μ΄νκ² λ§λ€κΈ° λλ¬Έμ λκ·λͺ¨ SW κ°λ°μ λ§μ΄ μ¬μ©λλ€.
π‘ μ μ°νκ³ λ³κ²½μ΄ μ©μ΄? λ κ³ λΈλ 쑰립νλ―, μ»΄ν¨ν° λΆν κ°μ λΌμ°λ―, ν€λ³΄λ/λ§μ°μ€ λ°κΎΈλ― μ»΄ν¬λνΈλ₯Ό μ½κ³ μ μ°νκ² λ³κ²½νλ©΄μ κ°λ°ν μ μλ λ°©λ²
μν κ³Ό ꡬνμ λΆλ¦¬
- ν΄λΌμ΄μΈνΈ
- λμμ μν (μΈν°νμ΄μ€)λ§ μλ©΄ λ¨
- ꡬν λμμ λ΄λΆ ꡬ쑰λ₯Ό λͺ°λΌλ λ¨
- ꡬν λμμ λ΄λΆ κ΅¬μ‘°κ° λ³κ²½λμ΄λ μν₯μ λ°μ§ μμ
- ꡬν λμ μ체λ₯Ό λ³κ²½ν΄λ μν₯μ λ°μ§ μμ
- μλ° μΈμ΄μ λ€νμ±μ νμ©
κ°μ²΄λ₯Ό μ€κ³ν λ μν κ³Ό ꡬνμ λͺ νν λΆλ¦¬ → μν μ λ¨Όμ λΆμ¬νκ³ μν μ μννλ ꡬν κ°μ²΄ λ§λ€κΈ°- μν : μΈν°νμ΄μ€ [ꡬνλ³΄λ€ μ€μ]
- ꡬν : μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€, ꡬν κ°μ²΄
- κ°μ²΄λ₯Ό μ€κ³ν λ μν κ³Ό ꡬνμ λͺ νν λΆλ¦¬
λ€νμ±μ λ³Έμ§
- μΈν°νμ΄μ€λ₯Ό ꡬνν κ°μ²΄ μΈμ€ν΄μ€λ₯Ό μ€ν μμ μ μ μ°νκ² λ³κ²½ν μ μλ€.
→ λ€νμ±μ λ³Έμ§μ μ΄ν΄νλ €λ©΄ νλ ₯μ΄λΌλ κ°μ²΄ μ¬μ΄μ κ΄κ³μμ μμν΄μΌ ν¨! - ν΄λΌμ΄μΈνΈλ₯Ό λ³κ²½νμ§ μκ³ , μλ²μ ꡬν κΈ°λ₯μ μ μ°νκ² λ³κ²½ν μ μλ€.
νκ³μ
μν (μΈν°νμ΄μ€) μμ²΄κ° λ³νλ©΄ ν΄λΌμ΄μΈνΈ, μλ² λͺ¨λμ ν° λ³κ²½μ΄ λ°μνλ€.
→ μΈν°νμ΄μ€κ° λ³κ²½λμ§ μλλ‘ μ ꡬννλ κ²μ΄ μ€λ ₯ μ’μ κ°λ°μ.
- Example
- μλμ°¨λ₯Ό λΉνκΈ°λ‘ λ³κ²½νλ€λ©΄?
- λλ³Έ μμ²΄κ° λ³κ²½λλ€λ©΄?
- USB μΈν°νμ΄μ€κ° λ³κ²½λλ€λ©΄?
SOLID
ν΄λ¦°μ½λλ‘ μ λͺ ν λ‘λ²νΈ λ§ν΄μ΄ μ’μ κ°μ²΄ μ§ν₯ μ€κ³μ 5κ°μ§ μμΉμ μ 리ν κ²
SRP(Single Responsibility Principle) : λ¨μΌ μ± μ μμΉ
- ν ν΄λμ€λ νλμ μ±
μλ§ κ°μ ΈμΌ νλ€.
λ³κ²½μ΄ μμ λ νλμ μ§μ λ§ λ³κ²½ν μ μλ€λ©΄ SRPκ° μ μ§μΌμ§ κ².
OCP(Open-Closed Principle) : κ°λ°©-νμ μμΉ
- μννΈμ¨μ΄ μμλ νμ₯μλ μ΄λ €μμΌλ, λ³κ²½μλ λ«νμμ΄μΌ νλ€.
νμ₯μ νλ €λ©΄ μΈν°νμ΄μ€λ₯Ό ꡬνν μλ‘μ΄ ν΄λμ€λ₯Ό νλ λ§λ€μ΄μ μλ‘μ΄ κΈ°λ₯μ ꡬν. - λ¬Έμ μ : λ€νμ±μ νμ©νμ¬ κ΅¬νν΄λ OCPκ° μ§μΌμ§μ§ μλ λ¬Έμ λ°μ
→ κ°μ²΄λ₯Ό μμ±νκ³ μ°κ΄κ΄κ³λ₯Ό λ§Ίμ΄μ£Όλ λ³λμ 쑰립, μ€μ μκ° νμν¨ (Springμ μν )MemberRepository m = new MemoryMemberRepository(); //κΈ°μ‘΄ μ½λ MemberRepository m = new JdbcMemberRepository(); //λ³κ²½ μ½λ
- MemberService ν΄λΌμ΄μΈνΈκ° ꡬν ν΄λμ€λ₯Ό μ§μ μ νν¨μΌλ‘μ ꡬν κ°μ²΄λ₯Ό λ³κ²½νλ €λ©΄ ν΄λΌμ΄μΈνΈ μ½λλ₯Ό λ³κ²½ν΄μΌ νλ λ¬Έμ κ° λ°μνλ€. (λ³κ²½μ λ«νμμ§ μμ)
LSP(Liskov Substitution Principle) : 리μ€μ½ν μΉν μμΉ
- κ°μ²΄λ νλ‘κ·Έλ¨μ μ νμ±μ κΉ¨λ¨λ¦¬μ§ μμΌλ©΄μ νμ νμ μ μΈμ€ν΄μ€λ‘ λ°κΏ μ μμ΄μΌ νλ€.
λ€νμ±μμ νμ ν΄λμ€λ μΈν°νμ΄μ€ κ·μ½μ λ€ μ§μΌμΌ νλ€λ κ², λ€νμ±μ μ§μνκΈ° μν μμΉ, μΈν°νμ΄μ€λ₯Ό ꡬνν ꡬν체λ λ―Ώκ³ μ¬μ©νλ €λ©΄ μ΄ μμΉμ΄ νμνλ€. → λ¨μν ‘μ»΄νμΌμ μ±κ³΅νλ κ²’μ λμ΄μλ μ΄μΌκΈ°. μ»΄νμΌμ μ±κ³΅νκ³ λ§κ³ λ 무κ΄ν¨
- EX) μλμ°¨ μΈν°νμ΄μ€μ μμ μ ‘μμΌλ‘ κ°λΌ’λ κΈ°λ₯. λ€λ‘ κ°κ² ꡬννλ©΄ LSP μλ°μ΄λ―λ‘ λ리λλΌλ μμΌλ‘ κ°μΌν¨.
ISP(Interface Segregation Principle) : μΈν°νμ΄μ€ λΆλ¦¬ μμΉ
- νΉμ ν΄λΌμ΄μΈνΈλ₯Ό μν μΈν°νμ΄μ€ μ¬λ¬ κ°κ° λ²μ© μΈν°νμ΄μ€κ° νλλ³΄λ€ λ«λ€.
- μλμ°¨ μΈν°νμ΄μ€ : μ΄μ /μ λΉλ‘ λΆλ¦¬
- μ¬μ©μ ν΄λΌμ΄μΈνΈ : μ΄μ μ/μ λΉμ¬λ‘ λΆλ¦¬
λΆλ¦¬μ μ λΉ μΈν°νμ΄μ€ μμ²΄κ° λ³ν΄λ μ΄μ μ ν΄λΌμ΄μΈνΈμ μν₯μ μ£Όμ§ μμ.
→ μΈν°νμ΄μ€κ° λͺ νν΄μ§κ³ , λ체 κ°λ₯μ±μ΄ λμμ§λ€.
DIP(Dependency Inversion Principle) : μμ‘΄κ΄κ³ μμ μμΉ
- νλ‘κ·Έλλ¨Έλ μΆμνμ μμ‘΄ν΄μΌμ§, ꡬ체νμ μμ‘΄νλ©΄ μλλ€.
ꡬν ν΄λμ€μ μμ‘΄νμ§ λ§κ³ μΈν°νμ΄μ€μ μμ‘΄. (μμ‘΄μ± μ£Όμ μ ν΅ν΄ μμΉμ μ§ν¬ μ μμ) → ‘μν μ μμ‘΄νκ² ν΄μΌ νλ€’μ κ°μ κ°λ . κ°μ²΄ μΈμλ ν΄λΌμ΄μΈνΈκ° μΈν°νμ΄μ€μ μμ‘΄ν΄μΌ ꡬν체λ₯Ό μ μ°νκ² λ³κ²½ν μ μλ€. ꡬν체μ μμ‘΄νλ©΄ λ³κ²½μ΄ μ΄λ €μμ§κΈ° λλ¬Έ
- λ¬Έμ μ : OCPμ λμΌνκ² MemberServiceλ μΈν°νμ΄μ€μ μμ‘΄νμ§λ§ ꡬν체μλ μμ‘΄ν¨
- // MemberServiceλ MemberRepositoryμ MemoryMemberRepository λͺ¨λλ₯Ό μκ³ μμ MemberRepository m = new MemoryMemberRepository();
μ€νλ§κ³Ό κ°μ²΄ μ§ν₯
λ€νμ±μ κ·Ήλννμ¬ μ΄μ©ν μ μκ² λμμ£Όλ―λ‘, λ€νμ±μ΄ κ°μ₯ μ€μν¨.
- μ μ΄μ μμ (IoC), μμ‘΄κ΄κ³ μ£Όμ (DI) : λ€νμ±μ νμ©νμ¬ μν κ³Ό ꡬνμ νΈλ¦¬νκ² λ€λ£° μ μλλ‘ μ§μ
- λ κ³ λΈλ 쑰립νλ― κ΅¬νμ νΈλ¦¬νκ² λ³κ²½ν μ μμ
κ·Έλ°λ°, λ€νμ± λ§μΌλ‘λ OCP, DIPλ₯Ό μ§ν¬ μ μλ€. (ꡬν κ°μ²΄λ₯Ό λ³κ²½ν λ ν΄λΌμ΄μΈνΈ μ½λλ ν¨κ» λ³κ²½λκΈ° λλ¬Έ)
μ€νλ§μ μλ κΈ°μ λ‘ λ€νμ± + OCP, DIPλ₯Ό κ°λ₯νκ² μ§μνλ€.
- DI(Dependency Injection) : μμ‘΄κ΄κ³, μμ‘΄μ± μ£Όμ
- DI 컨ν μ΄λ μ 곡
→ ν΄λΌμ΄μΈνΈ μ½λμ λ³κ²½ μμ΄ κΈ°λ₯μ νμ₯ν μ μλ€. (λ§μΉ λΆνμ κ΅μ²΄νλ―μ΄ κ°λ° κ°λ₯)
β οΈ μΈν°νμ΄μ€μ μ¬μ©μ΄ 무쑰건 μ’μ κ²λ§μ μλλ€. μΈν°νμ΄μ€λ₯Ό λμ νλ©΄ μΆμνλΌλ λΉμ©μ΄ λ°μνλ€. (κ°λ°μκ° λ°νμ > μΈν°νμ΄μ€ > ꡬν체λ₯Ό μμλλ‘ μ°Ύμ νμΈνλ λ±) λλ¬Έμ κΈ°λ₯μ νμ₯ν κ°λ₯μ±μ΄ μλ€λ©΄ ꡬ체 ν΄λμ€λ₯Ό μ§μ μ¬μ©νκ³ ν₯ν κΌ νμν λ 리ν©ν λ§μ ν΅ν΄ μΈν°νμ΄μ€λ₯Ό λμ νλ κ²λ λ°©λ²μ΄λ€.
'π» Language > Java : μλ°' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] μ½λ© ν μ€νΈλ₯Ό μν Java μ μΆλ ₯ ν¨μ (0) | 2024.11.15 |
---|---|
[Java] μλ£κ΅¬μ‘° - λ°°μ΄, μ°κ²°λ¦¬μ€νΈ, μ€ν, ν, ν, νΈλ¦¬, κ·Έλν, ν΄μ (0) | 2024.11.12 |
[Java] Java Platform(Java SE/EE/ME/FX)μ΄λ? (0) | 2023.07.28 |
[Java] EJB(Enterprise Java Beans)λ? (0) | 2023.07.27 |
[E] org.eclipse.swt.SWTError: No more handles (0) | 2023.06.09 |