β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)
μΆμνμ μμ‘΄νλ€. ꡬ체νμ μμ‘΄νλ©΄ μλλ€.
π¨OOPμ 4κ°μ§ νΉμ§
1. μΊ‘μν
- μ€μ λ‘ κ΅¬ν λΆλΆμ μΈλΆμ λλ¬λμ§ μλλ‘ νλ κ²
- λ³μμ λ©μλλ₯Ό νλλ‘ λ¬Άμ
- λ°μ΄ν°λ₯Ό μΈλΆμμ μ§μ μ κ·Όνμ§ μκ³ ν¨μλ₯Ό ν΅ν΄μλ§ μ κ·Ό
- ex) public, private, protected
public : ν΄λμ€ μΈλΆμμ μ κ·Ό κ°λ₯
private : ν΄λμ€ λ΄λΆμμλ§ μ κ·Ό κ°λ₯
protected : μμλ°μ μμ ν΄λμ€μμλ§ μ κ·Ό κ°λ₯
2. μμ
- μμ ν΄λμ€κ° λΆλͺ¨ ν΄λμ€μ νΉμ±κ³Ό κΈ°λ₯μ λ¬Όλ €λ°λ κ²
- κΈ°λ₯μ μΌλΆλΆμ λ³κ²½νλ κ²½μ° μμ ν΄λμ€μμ μμλ°μ μμ λ° μ¬μ©ν¨
- μμμ μΊ‘μνλ₯Ό μ μ§, ν΄λμ€μ μ¬μ¬μ©μ΄ μ©μ΄νλλ‘ ν΄ μ€λ€.
3. μΆμν
- μΈν°νμ΄μ€λ‘ ν΄λμ€λ€μ 곡ν΅μ μΈ νΉμ±(λ³μ, λ©μλ)λ€μ λ¬Άμ΄ νννλ κ²
4. λ€νμ±
- μ΄λ€ λ³μ,λ©μλκ° μν©μ λ°λΌ λ€λ₯Έ κ²°κ³Όλ₯Ό λ΄λ κ²
* μ€λ²λ‘λ©(Overloading) : νλμ ν΄λμ€μμ λ©μλμ μ΄λ¦μ΄ κ°μ§λ§, νλΌλ©ν°κ° λ€λ₯Έ κ²
* μ€λ²λΌμ΄λ©(Overriding) : λΆλͺ¨ ν΄λμ€μ λ©μλλ₯Ό μμ ν΄λμ€μ μ©λμ λ§κ² μ¬μ μνμ¬ μ½λμ μ¬μ¬μ©μ±μ λμ
πDRY μμΉ
Don't Repeat Yourself
λ°λ³΅νμ§ λ§λΌ!
κ°μ¬ν μ½μμ΅λλ€.