κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°(OOP, Object-Oriented Programming)
κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ κ°μ²΄λ€μ μ§ν©μΌλ‘ νλ‘κ·Έλ¨μ μνΈ μμ©μ νννλ©° λ°μ΄ν°λ₯Ό κ°μ²΄λ‘ μ·¨κΈνμ¬ κ°μ²΄ λ΄λΆμ μ μΈλ λ©μλλ₯Ό νμ©νλ λ°©μμ λ§νλ€.
μ€κ³μ λ§μ μκ°μ΄ μμλλ©° μ²λ¦¬ μλκ° λ€λ₯Έ νλ‘κ·Έλλ° ν¨λ¬λ€μμ λΉν΄ μλμ μΌλ‘ λ리λ€.
νΉμ§
κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ μΆμν, μΊ‘μν, μμμ±, λ€νμ±μ΄λΌλ 4κ°μ§ νΉμ§μ΄ μλ€.
1. μΆμν (abstraction)
μΆμνλ 볡μ‘ν μμ€ν μΌλ‘λΆν° ν΅μ¬μ μΈ κ°λ λλ κΈ°λ₯μ κ°μΆλ €λ΄λ κ²μ μλ―Ένλ€.
μλ₯Ό λ€μ΄ μ¬λμ΄λΌλ κ°μ²΄κ° μλ€κ³ κ°μ μ ν΄λ³΄μ. μ¬λμ λͺ¨λ λ°₯μ λ¨Ήκ³ , μ μ μλ€. νμ§λ§ μ΄μ μ νλ건 μ±μΈλ§ κ°λ₯νλ€κ³ νλ©΄ μΆμνλ₯Ό ν΅ν΄ λ°₯μ λ¨Ήλλ€, μ μ μλ€λΌλ κΈ°λ₯μ ꡬννκ³ μ¬λ μλμ μ±μΈμ΄λΌλ κ°μ²΄λ₯Ό μμ±νμ¬ μ±μΈ κ°μ²΄μ μ΄μ μ νλ€λΌλ κΈ°λ₯μ ꡬννλ©΄ λλ κ²μ΄λ€.
2. μΊ‘μν (encapsulation)
μΊ‘μνλ κ°μ²΄μ μμ±κ³Ό λ©μλλ₯Ό νλλ‘ λ¬Άκ³ μΌλΆλ₯Ό μΈλΆμ κ°μΆ° μλνλ κ²μ λ§νλ€.
κ°μ²΄μ νλλ privateλ‘ μ μΈνκ³ Getter/Setterλ₯Ό ν΅ν΄ νλμ μ κ·Όν μ μλλ‘ νλκ²μ΄ λνμ μΈ λ°©λ²μ΄λ€.
Getter/Setterλ₯Ό μ°μ§ λ§λΌλ λ§μ΄ λ§μλ°, ν΄λΉ λ΄μ©μ λμ€μ μμΈν λ€λ€λ³΄λ €κ³ νλ€. (κ°μ²΄μ§ν₯ μν체쑰μμΉ μ°Έκ³ )
3. μμμ± (inheritance)
μμμ±μ μμ ν΄λμ€μ νΉμ±μ νμ ν΄λμ€κ° μ΄μ΄λ°μμ μ¬μ¬μ©νκ±°λ μΆκ°, νμ₯νλ κ²μ λ§νλ€.
μ½λμ μ¬μ¬μ©, κ³μΈ΅μ μΈ κ΄κ³ μμ±, μ μ§λ³΄μμ± μΈ‘λ©΄μμ μ€μνλ€.
4. λ€νμ± (polymorphism)
λ€νμ±μ νλμ λ©μλλ ν΄λμ€κ° λ€μν λ°©λ²μΌλ‘ λμνλ κ²μ λ§νλ€. λνμ μΌλ‘ μ€λ²λ‘λ©, μ€λ²λΌμ΄λ©μ΄ μλ€.
μ€λ²λ‘λ©μ 맀κ°λ³μλ₯Ό λ€λ₯΄κ² νμ¬ κ°μ μ΄λ¦μ λ©μλλ₯Ό μ¬λ¬ κ° μμ±νλ κ²μ λ§νλ€.
μ€λ²λΌμ΄λ©μ μμλ°μ λ©μλλ₯Ό μ¬μ μνλ κ²μ λ§νλ€.
μ€λ²λ‘λ©κ³Ό μ€λ²λΌμ΄λ©μ μ°¨μ΄λ μΆνμ λ°λ‘ μμΈν μ 리νλ €κ³ νλ€.
μ€κ³ μμΉ
κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ μ€κ³ν λλ SOLID μμΉμ μ§μΌμΌνλ€. S : λ¨μΌ μ± μ μμΉ, O : κ°λ°©-νμ μμΉ, L : 리μ€μ½ν μΉν μμΉ, I : μΈν°νμ΄μ€ λΆλ¦¬ μμΉ, D : μμ‘΄ μμ μμΉ μ΄ 5κ°μ μμΉμ μκΈμλ₯Ό λ°μ SOLIDλΌκ³ λΆλ₯Έλ€.
1. λ¨μΌ μ± μ μμΉ (SRP, Single Responsibility Principle)
λ¨μΌ μ± μ μμΉμ λͺ¨λ ν΄λμ€λ κ°κ° νλμ μ± μλ§ κ°μ ΈμΌ νλ μμΉμ΄λ€.
μλ₯Ό λ€μ΄ μλμ κ·Έλ¦Όκ³Ό κ°μ΄ WorkerλΌλ ν΄λμ€κ° μλ€.
Worker ν΄λμ€λ μ§κΈ νμκΈ°μ¬κ° νλ μν μΈ drive, μκ°κ° νλ μν μΈ write, νκ°κ° νλ μν μΈ drawλ₯Ό λͺ¨λ ν¬ν¨νκ³ μλ€.
μ΄λ λ¨μΌ μ± μ μμΉμ μλ°°νκΈ° λλ¬Έμ μλμ κ°μ΄ μν μ λΆλ¦¬ν΄μ€μΌ νλ€.
2. κ°λ°©-νμ μμΉ
κ°λ°©-νμ μμΉμ μ μ§λ³΄μ μ¬νμ΄ μκΈ΄λ€λ©΄ μ½λλ₯Ό μ½κ² νμ₯ν μ μλλ‘ νκ³ , μμ ν λλ λ«ν μμ΄μΌ νλ€λ μμΉμ΄λ€.
μ¦, κΈ°μ‘΄ μ½λλ λ³κ²½νμ§ μκ³ νμ₯μ ν μ μμ΄μΌ νλ€λ λ»μ΄λ€.
ν΄λΉ μμΉμ μ°λ¦¬κ° μΆμνλ₯Ό λ°°μ°λ©΄μ μμ°μ€λ½κ² λ°°μ΄ μμΉμ΄λ€. κ·Έλ¦¬κ³ ν΄λΉ μμΉμ λνμ μΈ μμλ‘ JDBCκ° μλ€.
μ°λ¦¬κ° λ§μ½ μ΄ν리μΌμ΄μ μ κ°λ°νκ³ μλλ° κΈ°μ‘΄μ MySQLμ μ¬μ©νκ³ μλ€κ° Oracleλ‘ λ³κ²½ν΄μΌ νλ€κ³ κ°μ ν΄λ³΄μ. μ΄ λ μ°λ¦¬λ JDBCλ₯Ό μ¬μ©νκ³ μκΈ° λλ¬Έμ λ€μ μ½λ©ν νμμμ΄ Connection λΆλΆλ§ κ΅μ²΄ν΄μ£Όλ©΄ λλ€. μ΄λ OCP μμΉμ λ°λ₯΄κ³ μλ JDBCκ° λ°μ΄ν°λ² μ΄μ€ νμ₯μ λν΄ μ΄λ €μκΈ° λλ¬Έμ κ°λ₯ν κ²μ΄λ€.
3. 리μ€μ½ν μΉν μμΉ (LSP, Liskov Substitution Principle)
리μ€μ½ν μΉν μμΉμ νλ‘κ·Έλ¨μ κ°μ²΄λ νλ‘κ·Έλ¨μ μ νμ±μ κΉ¨νΈλ¦¬μ§ μμΌλ©΄μ νμ νμ μ μΈμ€ν΄μ€λ‘ λ°κΏμ μμ΄μΌ νλ€λ μμΉμ΄λ€.
μ¦, λΆλͺ¨ ν΄λμ€ νμ μ μΈμ€ν΄μ€λ₯Ό μ¬μ©νλ λΆλΆμμ μμ ν΄λμ€ νμ μ μΈμ€ν΄μ€λ‘ λ체νμ λ λΆλͺ¨ ν΄λμ€μ μλλλ‘ λμν΄μΌνλ€λ λ»μ΄λ€. μ΄λ μμμ μ€λͺ ν λ€νμ±κ³Ό κ΄λ ¨λμ΄ μλ€.
ν΄λΉ μμΉμ λνμ μΈ μμλ‘λ 컬λ μ νλ μμν¬(Collection Framework)κ° μλ€.
컬λ μ νλ μμν¬ μ€ Listλ₯Ό μλ‘ λ€μ΄λ³΄λλ‘ νμ.
λΆλͺ¨λ List μΈν°νμ΄μ€κ° λ κ²μ΄κ³ , μμ ν΄λμ€μΈ ArrayListλ₯Ό μ΄μ©νμ¬ μμ λ₯Ό λ§λ€μ΄λ³΄λ €κ³ νλ€.
List<String> list = new ArrayList<>();
list.add("LSP");
list.add("LSP2");
list.remove(1);
λ³μμ νμ μ λΆλͺ¨μΈ List μΈν°νμ΄μ€λ‘ μ μΈνμκ³ , μΈμ€ν΄μ€λ₯Ό μμ ν΄λμ€μΈ ArrayListλ‘ μμ±νμλ€.
μ€νν΄λ³΄λ©΄ μκ² μ§λ§ λ¬Έμ μμ΄ λμν κ²μ΄λ€. μ΄λ LSPλ₯Ό μ μ§μΌ°κΈ° λλ¬Έμ΄λΌκ³ ν μ μλ€.
LSPλ₯Ό μλ°νλ κ²½μ°λ μλ§ μμ ν΄λμ€μμ μ€λ²λΌμ΄λ©ν λ μ λ©λλ‘ λ§λλ κ²½μ°κ° μμ κ² κ°λ€.
4. μΈν°νμ΄μ€ λΆλ¦¬ μμΉ (ISP, Interface Segregation Principle)
μΈν°νμ΄μ€ λΆλ¦¬ μμΉμ νλμ μΈν°νμ΄μ€λ³΄λ€ μΈν°νμ΄μ€λ₯Ό λͺ©μ μ λ§κ² κ°κ° λΆλ¦¬ν΄μΌνλ€λ μμΉμ΄λ€.
μ¦, μΈν°νμ΄μ€λ₯Ό λΆλ¦¬ν¨μΌλ‘μ¨ ν΄λΌμ΄μΈνΈμκ² λͺ©μ μ λ§λ μΈν°νμ΄μ€λ§μ μ 곡νλ€λ μλ―Έμ΄λ€.
ν΄λΉ μμΉμ μμμ μ€λͺ ν λ¨μΌ μ± μ μμΉκ³Ό λΉμ·ν΄λ³΄μΈλ€. λ¨μΌ μ± μ μμΉμ κ°μ²΄κ° νλμ μ± μλ§μ κ°λλ‘ νλ€λ©΄ μΈν°νμ΄μ€ λΆλ¦¬ μμΉμ μΈν°νμ΄μ€λ₯Ό νλμ μ± μλ§ κ°κ²νλΌλ μλ―Έκ°λ€.
5. μμ‘΄ μμ μμΉ(DIP, Dependency Inversion Principle)
μμ‘΄ μμ μμΉμ μΆμνλ μΈν°νμ΄μ€λ μμ ν΄λμ€λ₯Ό λμ΄ μμ‘΄μ ν΄μΌμ§ ꡬ체νμ μμ‘΄νμ§ λ§λΌλ μμΉμ΄λ€.
μ½κ² μ€λͺ νλ©΄ μμ κ΄κ³λ‘ μ΄λ£¨μ΄μ§ λͺ¨λμ μ¬μ©ν λ, νμ λͺ¨λμ μ§μ μΈμ€ν΄μ€λ‘ μμ±νμ¬ μ°μ§ λ§λΌλ λ»μ΄λ€. κ·Έ μ΄μ λ λ§μ½ νμ λͺ¨λμ μ§μ μ¬μ©νλ€λ©΄ νμ λͺ¨λμ λ³νκ° μμ λλ§λ€ ν΄λΌμ΄μΈνΈλ μμ λͺ¨λμ μμ£Ό μμ ν μ μκΈ° λλ¬Έμ΄λ€.
3. 리μ€μ½ν μΉν μμΉμ μμ€ μμ λ₯Ό 보면 ArrayListλ₯Ό μ¬μ©ν λ, μμ λͺ¨λμΈ List μΈν°νμ΄μ€λ‘ λ³μλ₯Ό μμ±ν κ²μ λ³Ό μ μλ€.
List<String> list = new ArrayList();
μ΄ λν, DIPλ₯Ό μ§ν€λ μ½λλΌκ³ λ΄λ λλ€. μμ λͺ¨λμ΄λΌκ³ νλ©΄ λ³΄ν΅ μΈν°νμ΄μ€λ λΆλͺ¨ ν΄λμ€κ° ν΄λΉ λλλ°, ν λ² μκ°μ ν΄λ³΄μ.
μΈν°νμ΄μ€λ λΆλͺ¨ ν΄λμ€λ₯Ό μμ λ°λ νμ λͺ¨λ(ꡬν체)κ° λ λ§μ΄ μμ λ κΉ? μΆμνλ μΈν°νμ΄μ€λ λΆλͺ¨ ν΄λμ€κ° λ λ§μ΄ μμ λ κΉ?
λ³΄ν΅ κ΅¬νμ²΄μΈ νμλͺ¨λμ΄ λ λ§μ΄ μμ λ κ²μ΄λ€. κ·Έλμ λ³νμ§ μμ κ°λ₯μ±μ΄ λ λμ μμ λͺ¨λμ μμ‘΄νλΌλ κ²μ΄λ€.
μ°Έκ³
'π₯οΈ CS' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ€νΈμν¬] NIC, 리νΌν°, AP (0) | 2023.06.13 |
---|---|
[λ€νΈμν¬] L2 μ€μμΉ (0) | 2023.06.13 |
[λ€νΈμν¬] λΌμ°ν° (0) | 2023.06.12 |
[λ€νΈμν¬] L7 μ€μμΉ (0) | 2023.06.12 |
νλ‘κ·Έλλ° ν¨λ¬λ€μ (ν¨μν νλ‘κ·Έλλ°, μ μ°¨ν νλ‘κ·Έλλ°) (0) | 2023.06.05 |