OOP ( Object Oriented Programming )
OOP μ΄μ μ νλ‘κ·Έλλ° λ°©μμ?
- μ μ°¨μ νλ‘κ·Έλλ° λ°©μ
μ λ ₯μ λ°μ λͺ μλ μμλλ‘λ§ μ²λ¦¬νκ³ κ²°κ³Όλ₯Ό λ΄λ λ°©μ
- ꡬ쑰μ νλ‘κ·Έλλ° λ°©μ
μ μ°¨μ νλ‘κ·Έλλ° λ°©μμ κ°μ λ νν
νλ‘κ·Έλ¨μ ν¨μλ¨μλ‘ λλκ³ ν¨μλΌλ¦¬ νΈμΆνλ λ°©μ
ν° λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ λ¬Έμ λ₯Ό μμ λ¨μλ€λ‘ λλμ΄ ν΄κ²°νλ λ°©μ
Top-Down λ°©μμ΄λΌκ³ λ νλ€.
- κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ° λ°©μ
ꡬ쑰μ νλ‘κ·Έλλ° λ°©μμ κ°μ λ νν
ν° λ¬Έμ λ₯Ό μκ² μͺΌκ°λ κ²μ΄ μλλΌ, μμ λ¬Έμ λ€μ ν΄κ²°νλ κ°μ²΄λ₯Ό λ§λ λ€.
κ°μ²΄λ€μ μ‘°ν©ν΄ ν° λ¬Έμ λ₯Ό ν΄κ²°νλ Bottom-Up λ°©μ
OOPμ μ₯μ κ³Ό λ¨μ
μ₯μ μ½λμ μ¬μ¬μ©μ±μ΄ λμμ§λ€. μ μ§λ³΄μκ° μ½λ€. μ½λκ° κ°κ²°ν΄μ§λ€. |
λ¨μ μ²λ¦¬ μκ°μ΄ λΉκ΅μ μ€λ κ±Έλ¦°λ€. νλ‘κ·Έλ¨μ μ€κ³ν λ λ§μ κ³ λ―Όκ³Ό μκ°μ ν¬μν΄μΌνλ€. |
OOPμ 5μμΉ (SOLID)
< Clean Code >μ μ μ, λ‘λ²νΈ λ§ν΄μ΄ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ° λ° μ€κ³μ λ€μ― κ°μ§ κΈ°λ³Έ μμΉμ λ§μ΄ν΄ ν¨λμ€κ° SOLIDλΌλ μ½μ΄λ‘ μκ°ν κ²!
S (SRP : Single Responsibility Principle)
ν ν΄λμ€λ νλμ μ± μλ§ κ°μ ΈμΌ νλ€.
O (OCP : Open/Closed Principle)
νμ₯μλ μ΄λ €(Open) μμΌλ, λ³κ²½μλ λ«ν(Closed)μμ΄μΌ νλ€.
L (LSP : Liskov’s Substitution Principle)
νλ‘κ·Έλ¨μ κ°μ²΄λ νλ‘κ·Έλ¨μ μ νμ±μ κΉ¨λ¨λ¦¬μ§ μμΌλ©΄μ νμ νμ μ μΈμ€ν΄μ€λ‘ λ°κΏ μ μμ΄μΌ νλ€.
I (ISP : Interface Segregation Principle)
νΉμ ν΄λΌμ΄μΈνΈλ₯Ό μν μΈν°νμ΄μ€ μ¬λ¬ κ°κ° λ²μ© μΈν°νμ΄μ€ νλλ³΄λ€ λ«λ€.
D (DIP : Dependency Inversion Principle)
μΆμνμ μμ‘΄νλ€. ꡬ체νμ μμ‘΄νλ©΄ μλλ€.
κ°μ²΄ ( Object )
ꡬ체μ , μΆμμ λ°μ΄ν°μ λ¨μ
1. κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ° - Object oriented programming
κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ μ»΄ν¨ν° νλ‘κ·Έλ¨μ λͺ λ Ήμ΄μ λͺ©λ‘μΌλ‘ 보λ μκ°μμ λ²μ΄λ μ¬λ¬ κ°μ λ 립λ λ¨μ, μ¦ "κ°μ²΄"λ€μ λͺ¨μμΌλ‘ νμ νκ³ μ νλ κ²μ΄λ€. κ°κ°μ κ°μ²΄λ λ©μμ§λ₯Ό μ£Όκ³ λ°κ³ , λ°μ΄ν°λ₯Ό μ²λ¦¬ν μ μλ€. κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ νλ‘κ·Έλ¨μ μ μ°νκ³ λ³κ²½μ΄ μ©μ΄νκ² λ§λ€κΈ° λλ¬Έμ λκ·λͺ¨ μννΈμ¨μ΄ κ°λ°μ λ§μ΄ μ¬μ©νκ³ μννΈμ¨μ΄ κ°λ°κ³Ό 보μλ₯Ό κ°νΈνκ² νλ©°, λ³΄λ€ μ§κ΄μ μΈ μ½λλΆμμ κ°λ₯νκ² νλ μ₯μ μ κ°κ³ μλ€.
- νλ‘κ·Έλ¨μ ꡬνμ μκ°μ νλ¦μμ΄ μλ κ°μ²΄κ°μ κ΄κ³μ νλ ₯μ κΈ°λ°μΌλ‘ νλ‘κ·Έλ¨ νλ κ²
- Object oriented programming(OOP) // ( cf. μ μ°¨ μ§ν₯ νλ‘κ·Έλλ° proedural programming )
- μ¬μ© νλ μΈμ΄ : Java, C++, C#, Python, JavaScript, Ruby λ± λ€μ
μ μ°¨ μ§ν₯κ³Ό κ°μ²΄ μ§ν₯
- μ μ°¨ μ§ν₯
μ μ°¨ μ§ν₯ λͺ¨λΈλ§μ νλ‘κ·Έλ¨μ κΈ°λ₯μ€μ¬μΌλ‘ λ°λΌλ³΄λ λ°©μμΌλ‘ "무μμ μ΄λ€ μ μ°¨λ‘ ν κ²μΈκ°?"κ° ν΅μ¬μ΄ λλ€. μ¦, μ΄λ€ κΈ°λ₯μ μ΄λ€ μμλ‘ μ²λ¦¬νλκ°μ μ΄μ μ λ§μΆλ€.
- κ°μ²΄ μ§ν₯
κ°μ²΄ μ§ν₯ λͺ¨λΈλ§μ κΈ°λ₯μ΄ μλ κ°μ²΄κ° μ€μ¬μ΄ λλ©° "λκ° μ΄λ€ μΌμ ν κ²μΈκ°?"κ° ν΅μ¬μ΄ λλ€. μ¦, κ°μ²΄λ₯Ό λμΆνκ³ κ°κ°μ μν μ μ μν΄ λκ°λ κ²μ μ΄μ μ λ§μΆλ€.
- μ μ°¨ μ§ν₯ VS κ°μ²΄ μ§ν₯
- λν νλ‘κ·Έλλ°μ κ²½μ° κ°μ²΄ μ§ν₯μ΄ μ ν© κ° κ°μ²΄κ° νλ μν μ΄ λ§μλ, λ§μ μν μ κ°μ²΄λ‘ λ¬Άμ μ μκΈ° λλ¬Έ
- μν νλ‘κ·Έλλ°μ κ²½μ° μ μ°¨ μ§ν₯μ΄ μ ν© μμ κΈ°λ₯μ κ°μ²΄λ³λ‘ λλ κ²½μ°, μ€νλ € 볡μ‘ν΄μ§ μ μκΈ° λλ¬Έ
κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ νΉμ§
1. μΆμν(abstraction)
κ°μ²΄λ€μ 곡ν΅μ μΈ νΉμ§(κΈ°λ₯, μμ±)μ λμΆνλ κ²
κ°μ²΄μ§ν₯μ κ΄μ μμλ ν΄λμ€λ₯Ό μ μνλ κ²μ μΆμνλΌκ³ ν μ μλ€.
(ν΄λμ€κ° μλ κ°μ²΄μ§ν₯ μΈμ΄λ μ‘΄μ¬ ex. JavaScript)
2. μΊ‘μν(encapsulation)
μ€μ λ‘ κ΅¬νλλ λΆλΆμ μΈλΆμ λλ¬λμ§ μλλ‘ νμ¬ μ 보λ₯Ό μλν μ μλ€.
κ°μ²΄κ° λ
립μ μΌλ‘ μν μ ν μ μλλ‘ λ°μ΄ν°μ κΈ°λ₯μ νλλ‘ λ¬Άμ΄ κ΄λ¦¬νλ κ²,
μ½λκ° λ¬Άμ¬μμ΄μ μ€λ₯κ° μμ΄ νΈλ¦¬νλ€.
λ°μ΄ν°λ₯Ό 보μ΄μ§ μκ³ μΈλΆμ μνΈμμ©μ ν λλ λ©μλλ₯Ό μ΄μ©νμ¬ ν΅μ μ νλ€.
3. μμμ±(inheritance)
νλμ ν΄λμ€κ° κ°μ§ νΉμ§(ν¨μ, λ°μ΄ν°)μ λ€λ₯Έ ν΄λμ€κ° κ·Έλλ‘ λ¬Όλ €λ°λ κ²
μ΄λ―Έ μμ±λ ν΄λμ€λ₯Ό λ°μμ μλ‘μ΄ ν΄λμ€λ₯Ό μμ±νλ κ²
κΈ°μ‘΄ μ½λλ₯Ό μ¬νμ©ν΄μ μ¬μ©ν¨μΌλ‘μ¨ κ°μ²΄μ§ν₯ λ°©λ²μ μ€μν κΈ°λ₯ μ€ νλμ μνλ€.
4. λ€νμ±(polymorphism)
μμκ³Ό μ°κ΄μ΄ μλ κ°λ
μΌλ‘ ν κ°μ²΄κ° λ€λ₯Έ μ¬λ¬νν(κ°μ²΄)λ‘ μ¬κ΅¬μ± λλ κ²
μ€λ²λΌμ΄λ©(Overriding) - λΆλͺ¨ν΄λμ€μ λ©μλμ κ°μ μ΄λ¦μ μ¬μ©νλ©° 맀κ°λ³μλ κ°λ λ΄λΆ μμ€λ₯Ό μ¬μ μνλ κ²
μ€λ²λ‘λ©(Overloading) - κ°μ μ΄λ¦μ ν¨μλ₯Ό μ¬λ¬ κ° μ μν ν 맀κ°λ³μλ₯Ό λ€λ₯΄κ² νμ¬ κ°μ μ΄λ¦μ κ²½μ°μ λ°λΌ νΈμΆνμ¬ μ¬μ©νλ κ²
5. λμ λ°μΈλ©(Dynamic Binding)
κ°μ ν¨μλ₯Ό νΈμΆνλ μ½λλ₯Ό μ»΄νμΌν λ, λ°μΈλ©μ μ€νμκ°μ κ²°μ νλ κ².
νμ ν΄λμ€μ κ°μ²΄μ λν΄, κΈ°λ³Έ ν΄λμ€μ ν¬μΈν°λ‘ κ°μ ν¨μκ° νΈμΆλ λ μΌμ΄λλ€.
ν¨μλ₯Ό νΈμΆνλ©΄ λμ λ°μΈλ©μ ν΅ν΄ νμ ν΄λμ€μ μ€λ²λΌμ΄λ© λ ν¨μκ° μ€ν
νλ‘κ·Έλλ°μ μ μ°μ±μ λμ¬μ£Όλ©° νμ ν΄λμ€μμ μ¬μ μν ν¨μμ νΈμΆμ 보μ₯(λ€ν κ°λ
μ€ν)