πΎ [CS] κ°μ²΄μ§ν₯ μ€κ³(Object-Oriented Design, OOD)λ 무μμΌκΉμ?
- κ°μ²΄μ§ν₯ μ€κ³(Object-Oriented Design, OOD)λ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°(Object-Oriented Programming, OOP)μ μμΉκ³Ό κ°λ μ λ°νμΌλ‘, νλ‘κ·Έλ¨μ κ°μ²΄λΌλ λ 립μ μΈ λ¨μλ‘ μ€κ³νλ λ°©λ²μ μλ―Έν©λλ€.
- κ°μ²΄μ§ν₯ μ€κ³(Object-Oriented Design, OOD)λ νλ‘κ·Έλ¨μ κ΅¬μ± μμλ₯Ό ν΄λμ€μ κ°μ²΄λ‘ λλκ³ , μ΄λ€ κ°μ κ΄κ³λ₯Ό μ μνμ¬ ν¨μ¨μ μ΄κ³ μ¬μ¬μ© κ°λ₯νλ©° μ μ§λ³΄μνκΈ° μ¬μ΄ μννΈμ¨μ΄λ₯Ό λ§λλ κ²μ λͺ©νλ‘ ν©λλ€.
πββοΈ κ°μ²΄μ§ν₯ μ€κ³(Object-Oriented Design, OOD)λ 무μμΌκΉμ?
1οΈβ£ κ°μ²΄μ§ν₯ μ€κ³μ ν΅μ¬ κ°λ .
1οΈβ£ κ°μ²΄(Object)
- κ°μ²΄λ λ°μ΄ν°(μμ±, μν)μ μ΄ λ°μ΄ν°λ₯Ό μ‘°μνλ λ©μλ(λμ)κ° κ²°ν©λ λ 립μ μΈ λ¨μμ λλ€.
- νμ€ μΈκ³μ μ¬λ¬Όμ΄λ κ°λ μ λͺ¨λΈλ§νμ¬ νλ‘κ·Έλ¨ λ΄μμ μ¬μ©ν μ μλ ννλ‘ λ§λ€κΈ° λλ¬Έμ, μ§κ΄μ μΌλ‘ μ΄ν΄νκ³ μ€κ³ν μ μμ΅λλ€.
2οΈβ£ ν΄λμ€(Class)
- ν΄λμ€λ κ°μ²΄λ₯Ό μμ±νκΈ° μν μ²μ¬μ§ λλ μ€κ³λμ
λλ€.
- κ°μ²΄κ° κ°μ§λ μμ±κ³Ό λ©μλλ₯Ό μ μν©λλ€.
- ν΄λμ€λ κ°μ²΄μ νΉμ±(μμ±)κ³Ό νλ(λ©μλ)μ μ μνμ¬, κ°μ ννμ κ°μ²΄λ₯Ό λ€μ μμ±ν μ μκ² ν©λλ€.
3οΈβ£ κ°μ²΄ κ°μ κ΄κ³.
- κ°μ²΄μ§ν₯ μ€κ³(Object-Oriented Design, OOD)μμλ κ°μ²΄ κ°μ κ΄κ³λ₯Ό μ μνλ κ²μ΄ μ€μν©λλ€.
- μ΄λ¬ν κ΄κ³λ λ€μκ³Ό κ°μ΄ λλ©λλ€.
- μ°κ΄ κ΄κ³(Association)
- μ§ν© κ΄κ³(Aggregation)
- κ΅¬μ± κ΄κ³(Composition)
- μμ κ΄κ³(Inheritance)
- μ΄λ¬ν κ΄κ³λ λ€μκ³Ό κ°μ΄ λλ©λλ€.
1οΈβ£ μ°κ΄ κ΄κ³(Association)
- λ κ°μ²΄κ° μλ‘ κ΄λ ¨λ κ΄κ³μ
λλ€.
- μ:
νμ
κ°μ²΄μμμ
κ°μ²΄κ° μλ‘ μ°κ²°λ μ μμ.
- μ:
2οΈβ£ μ§ν© κ΄κ³(Aggregation)
- κ°μ²΄κ° λ€λ₯Έ κ°μ²΄μ μΌλΆλ‘ ν¬ν¨λλ κ΄κ³μ΄μ§λ§, λΆλΆ κ°μ²΄λ λ
립μ μΌλ‘ μ‘΄μ¬ν μ μμ΅λλ€.
- μ:
ν
κ³Όνμ
.
- μ:
3οΈβ£ κ΅¬μ± κ΄κ³(Composition)
- λΆλΆ κ°μ²΄κ° μ 체 κ°μ²΄μ μμ ν μμλμ΄ μμΌλ©°, μ 체 κ°μ²΄κ° μ¬λΌμ§λ©΄ λΆλΆ κ°μ²΄λ ν¨κ» μ¬λΌμ§λλ€.
- μ:
μ§
κ³Όλ°©
.
- μ:
4οΈβ£ μμ κ΄κ³(Inheritance)
- κ°μ²΄κ° λ€λ₯Έ κ°μ²΄μ νΉμ±μ μμλ°λ κ΄κ³μ
λλ€.
- μ:
λλ¬Ό
ν΄λμ€κ° μκ³ , μ΄λ₯Ό μμλ°μκ°
,κ³ μμ΄
ν΄λμ€λ₯Ό μ μ.
- μ:
2οΈβ£ κ°μ²΄μ§ν₯ μ€κ³μ μμΉ(SOLID)
- κ°μ²΄μ§ν₯ μ€κ³(Object-Oriented Design, OOD)μμλ SOLID μμΉμ΄ μμ£Ό μΈκΈλλ©°, μ΄λ μ μ°νκ³ μ μ§λ³΄μνκΈ° μ’μ μννΈμ¨μ΄ μ€κ³λ₯Ό μν μ€μν μ§μΉ¨μ λλ€.
πββοΈ SOLID μμΉ.
1οΈβ£ λ¨μΌ μ± μ μμΉ(Single Responsibility Principle, SRP)
- ν΄λμ€λ νλμ μ± μλ§ κ°μ ΈμΌ νλ©°, κ·Έ μ± μμ μλ²½νκ² μννλλ‘ μ€κ³ν΄μΌ ν©λλ€.
- μ¦, ν΄λμ€κ° λ³κ²½λλ μ΄μ λ νλμ μ΄μ μ¬μΌ ν©λλ€.
- μ:
Order
ν΄λμ€κ° μ£Όλ¬Έ μ²λ¦¬μ μ£Όλ¬Έ λ°μ΄ν° μ μ₯μ λͺ¨λ μννλ κ²μ΄ μλλΌ, μ£Όλ¬Έ μ²λ¦¬ λ‘μ§μ λ΄λΉνλOrder
ν΄λμ€μ μ£Όλ¬Έ λ°μ΄ν°λ₯Ό μ μ₯νλOrderRespository
ν΄λμ€λ‘ λλλ κ²μ΄ μ’μ΅λλ€.
2οΈβ£ κ°λ°©-νμ μμΉ(Open-Closed Principle, OCP)
- ν΄λμ€λ νμ₯μλ μ΄λ € μκ³ , μμ μλ λ«ν μμ΄μΌ ν©λλ€.
- μ¦, κΈ°μ‘΄ μ½λλ₯Ό μμ νμ§ μκ³ λ κΈ°λ₯μ μΆκ°ν μ μμ΄μΌ ν©λλ€.
- μ: μλ‘μ΄ κΈ°λ₯μ μΆκ°ν λ κΈ°μ‘΄ ν΄λμ€μ μ½λλ₯Ό μμ νμ§ μκ³ λ μμμ΄λ μΈν°νμ΄μ€ ꡬνμ ν΅ν΄ κΈ°λ₯μ νμ₯ν μ μμ΄μΌ ν©λλ€.
3οΈβ£ 리μ€μ½ν μΉν μμΉ(Liskov Substitution Principle, LSP)
- μλΈ ν΄λμ€λ μΈμ λ κΈ°λ° ν΄λμ€λ‘ λ체ν μ μμ΄μΌ ν©λλ€.
- μ¦, μμ ν΄λμ€μ κ°μ²΄λ₯Ό μ¬μ©νλ μ½λμμ νμ ν΄λμ€μ κ°μ²΄λ₯Ό μ¬μ©ν μ μμ΄μΌ νλ©°, νλ‘κ·Έλ¨μ΄ μ μμ μΌλ‘ λμν΄μΌ ν©λλ€.
- μ:
Bird
ν΄λμ€μ νμ ν΄λμ€μΈPenguin
μ΄fly()
λ©μλλ₯Ό ꡬννμ§λ§, νμ€μμλ νκ·μ΄ λ μ§ λͺ»νκΈ° λλ¬Έμ μ΄ μμΉμ μλ°ν μ μμ΅λλ€. μ΄λ¬ν κ²½μ° μ€κ³λ₯Ό λ€μ κ³ λ €ν΄μΌ ν©λλ€.
4οΈβ£ μΈν°νμ΄μ€ λΆλ¦¬ μμΉ(Interface Segregation Principle, ISP)
- ꡬννμ§ μλ λ©μλκ° μλ μΈν°νμ΄μ€λ₯Ό μ¬μ©νμ§ μλλ‘, μκ³ κ΅¬μ²΄μ μΈ μΈν°νμ΄μ€λ‘ λλμ΄μΌ ν©λλ€.
- νλμ ν° μΈν°νμ΄μ€λ³΄λ€λ μ¬λ¬ κ°μ μμ μΈν°νμ΄μ€λ₯Ό μ€κ³νμ¬, νμν κΈ°λ₯λ§ κ΅¬ννλλ‘ ν©λλ€.
- μ:
Printer
μΈν°νμ΄μ€κ°print()
,scan()
,fax()
λ₯Ό ν¬ν¨νκ³ μμ λ, νλ¦°ν°λ§ νμν κ²½μ°μλ μ€μΊλμ ν©μ€ κΈ°λ₯μ ꡬνν΄μΌ νλ€λ©΄,Printable
,Scannable
,Faxable
κ³Ό κ°μ΄ μΈν°νμ΄μ€λ₯Ό λλλ κ²μ΄ μ’μ΅λλ€.
5οΈβ£ μμ‘΄ μμ μμΉ(Dependency Inversion Principle, DIP)
- μμ λͺ¨λμ νμ λͺ¨λμ μμ‘΄ν΄μλ μλλ©°, λ λ€ μΆμνμ μμ‘΄ν΄μΌ ν©λλ€.
- ꡬ체μ μΈ ν΄λμ€κ° μλ, μΆμνλ μΈν°νμ΄μ€μ μμ‘΄νλλ‘ μ€κ³νμ¬ μ μ°ν μ½λλ₯Ό μμ±ν μ μμ΅λλ€.
- μ:
Service
ν΄λμ€κ°Repository
μΈν°νμ΄μ€λ₯Ό μ¬μ©νκ³ , μ€μ λ°μ΄ν° μ μ₯ λ‘μ§μFileRepository
λDatabaseRepository
κ°μ ν΄λμ€μμ ꡬνν μ μλλ‘ μ€κ³ν©λλ€.
3οΈβ£ κ°μ²΄μ§ν₯ μ€κ³μ μ₯μ .
1οΈβ£ μ¬μ¬μ©μ±.
- κ°μ²΄μ§ν₯ μ€κ³(Object-Oriented Design, OOD)μ λͺ¨λμ± λλΆμ, νλμ κ°μ²΄λ₯Ό λ€μν νλ‘κ·Έλ¨μμ μ¬μ¬μ©ν μ μμ΅λλ€.
- μ΄λ μ½λλ₯Ό μ¬μ¬μ© κ°λ₯νκ² νμ¬ κ°λ° μκ°μ μ€μ΄κ³ λΉμ©μ μ κ°ν μ μμ΅λλ€.
2οΈβ£ μ μ§λ³΄μμ±.
-
κ° κ°μ²΄κ° λ
립μ μ΄κΈ° λλ¬Έμ, λ¬Έμ κ° λ°μνμ λ ν΄λΉ κ°μ²΄λ§ μμ νλ©΄ λ©λλ€.
- λ€λ₯Έ κ°μ²΄μ λ―ΈμΉλ μν₯μ μ΅μνν μ μμ΄, μ μ§λ³΄μκ° μ©μ΄ν©λλ€.
3οΈβ£ νμ₯μ±.
- κ°μ²΄μ§ν₯ μ€κ³(Object-Oriented Design, OOD)λ μλ‘μ΄ κΈ°λ₯μ μΆκ°ν λ κΈ°μ‘΄ μ½λλ₯Ό μμ νμ§ μκ³ λ νμ₯ν μ μλλ‘ μ μ°ν ꡬ쑰λ₯Ό μ 곡ν©λλ€.
- μλ‘μ΄ ν΄λμ€λ λ©μλλ₯Ό μΆκ°ν¨μΌλ‘μ¨ κΈ°λ₯μ νμ₯ν μ μμ΄, λ³ννλ μꡬ μ¬νμ μ½κ² λμν μ μμ΅λλ€.
4οΈβ£ μΊ‘μν.
- κ°μ²΄μ§ν₯ μ€κ³(Object-Oriented Design, OOD)λ μΊ‘μν(Encapsulation)λ₯Ό ν΅ν΄ κ°μ²΄ λ΄λΆ μνλ₯Ό 보νΈνκ³ , μΈλΆμμ μ κ·Όν μ μλ λ°©λ²μ μ νν©λλ€.
- μ΄λ λ°μ΄ν°μ 무결μ±μ μ μ§νκ³ , μ½λμ 볡μ‘μ±μ μ€μ΄λ λ° λμμ΄ λ©λλ€.
π λ°μ΄ν°μ 무결μ±(Data Integrity)
λ°μ΄ν°κ° μ ννκ³ μΌκ΄λλ©° μ λ’°ν μ μλ μνλ₯Ό μ μ§νλ κ²μ μλ―Έν©λλ€.
μ΄λ λ°μ΄ν°μ μ νμ±, μΌκ΄μ±, μ ν¨μ±μ 보μ₯νκΈ° μν κ°λ μΌλ‘, λ°μ΄ν°κ° μ μ₯, μ²λ¦¬, μ μ‘λλ λμ μμ, λ³μ‘°, μ μ€ λ±μ΄ λ°μνμ§ μλλ‘ νλ κ²μ λͺ©νλ‘ ν©λλ€.
λ°μ΄ν° 무결μ±(Data Integrity)μ λ°μ΄ν°λ² μ΄μ€ μμ€ν μ λΉλ‘―ν λ€μν μννΈμ¨μ΄ μμ€ν μμ λ§€μ° μ€μν κ°λ μΌλ‘, λ°μ΄ν°μ νμ§μ μ μ§νλ ν΅μ¬ μμμ λλ€.
4οΈβ£ κ°μ²΄μ§ν₯ μ€κ³μ μ.
1οΈβ£ Car
ν΄λμ€ μ€κ³ μ.
public class Car {
private Engine engine; // μΊ‘μνλ μμ§ κ°μ²΄
public Car(Engine engine) { // μμ‘΄μ± μ£Όμ
this.engine = engine;
}
public void start() {
engine.start();
}
}
- μ μ€κ³μμλ
Car
ν΄λμ€κ°Engine
κ°μ²΄λ₯Ό μ¬μ©νμ§λ§,Engine
ν΄λμ€μ ꡬ체μ μΈ κ΅¬νμ μμ‘΄νμ§ μκ³ ,Engine
μΈν°νμ΄μ€λ₯Ό ν΅ν΄ λμν©λλ€. - λ§μ½ μ κΈ° μμ§μ΄λ κ°μλ¦° μμ§μ μ¬μ©νκ³ μΆλ€λ©΄,
Engine
μΈν°νμ΄μ€λ₯Ό ꡬνν μλ‘μ΄ ν΄λμ€λ§ μΆκ°νλ©΄ λ©λλ€.- μ΄λ μμ‘΄ μμ μμΉ(Dependency Inversion Principle, DIP)μ μ μ©ν μμ λλ€.
5οΈβ£ μμ½.
- κ°μ²΄μ§ν₯ μ€κ³(Object-Oriented Design, OOD)λ κ°μ²΄μ ν΄λμ€λ₯Ό μ€μ¬μΌλ‘ νλ‘κ·Έλ¨μ μ€κ³νμ¬, μ¬μ¬μ©μ±κ³Ό μ μ§λ³΄μμ±μ΄ λμ μννΈμ¨μ΄λ₯Ό λ§λλ λ°©λ²μ λλ€.
- κ°μ²΄μ§ν₯ μ€κ³(Object-Oriented Design, OOD)λ SOLID μμΉμ ν΅ν΄ ν¨μ¨μ μ΄κ³ μ μ°ν μμ€ν ꡬ쑰λ₯Ό μ 곡νλ©°, μΊ‘μν, μμ, λ€νμ±, μΆμνμ κ°μ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ κ°λ μ μ κ·Ή νμ©ν©λλ€.
- μ΄λ₯Ό ν΅ν 볡μ‘ν μμ€ν μ λ μ½κ² μ΄ν΄νκ³ κ΄λ¦¬ν μ μμΌλ©°, λ³ννλ μꡬ μ¬νμλ μ μ°νκ² λμν μ μμ΅λλ€.