λ°μν
Object-Oriented Programming (κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°, OOP)μ μ΄ν΄
κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°(Object-Oriented Programming, OOP)μ μ€μΈκ³μ μ¬λ¬Όμ΄λ κ°λ μ κ°μ²΄λ‘ λͺ¨λΈλ§νμ¬ μννΈμ¨μ΄λ₯Ό κ°λ°νλ νλ‘κ·Έλλ° ν¨λ¬λ€μμ λλ€.
- μ΄ μ κ·Ό λ°©μμ λ°μ΄ν°(μμ±)μ κ·Έ λ°μ΄ν°λ₯Ό μ²λ¦¬νλ λ° νμν κΈ°λ₯(ν¨μ λλ λ©μλ)μ νλμ λ¨μλ‘ λ¬Άμ΄μ μκ°ν©λλ€.
- μλ₯Ό λ€μ΄μ CarλΌλ κ°μ²΄κ° μμλ?
μμ±: fuel: μ°¨λμ μ°λ£ μ, speed: μ°¨λμ νμ¬ μλ, steering wheel: νΈλ€μ μμΉ, coordinate: μ°¨λμ νμ¬ μμΉ
ν¨μ: accelerate(): μ°¨λμ μλλ₯Ό μ¦κ°μν΅λλ€. takeLeft(): μ°¨λμ μΌμͺ½μΌλ‘ μ‘°ν₯ν©λλ€. takeRight(): μ°¨λμ μ€λ₯Έμͺ½μΌλ‘ μ‘°ν₯ν©λλ€.
Object-Oriented Programming (κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°)
Object(κ°μ²΄)
κ°μ²΄(object)λ νλ‘κ·Έλ¨μ ꡬμ±νλ κΈ°λ³Έ λ¨μλ‘, μ€μΈκ³μ μ¬λ¬Όμ΄λ κ°λ μ μΆμννμ¬ ννν©λλ€.
- κ° κ°μ²΄λ κ·Έ κ°μ²΄λ§μ μμ±(μν)κ³Ό νμ(λ©μλ)λ₯Ό κ°μ§λ©°, νλ‘κ·Έλ¨μ μ΄λ¬ν κ°μ²΄λ€μ μνΈ μμ©μ ν΅ν΄ μνλ κΈ°λ₯μ μνν©λλ€.
- λν κ°μ²΄λ λ€λ₯Έ κ°μ²΄μ μνΈ μμ©μ νλ©° λͺ©μ μ λ¬μ±ν©λλ€.
- μλ₯Ό λ€μ΄ κ°μ²΄ Personκ³Ό Carλ νλ‘κ·Έλ¨ λ΄ κ°κ°μ κ°μ²΄μ§λ§ Personμ Carλ₯Ό μ΄μ©ν μ μμ΅λλ€.
- νλ‘κ·Έλ¨μΌλ‘ 무μΈκ°λ₯Ό ꡬνν λ κ·Έ μΈκ³κ΄ λ΄λΆμ μλ―Έ μλ μ 보μ λ¨μλ€, μ΄λ° κ°λ μ λλ€.
Example: Object-Oriented Programming (κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°):
- μλ₯Ό λ€μ΄ OOPλ‘ IoTκΈ°λ°μ 첨λ¨μ»€νΌμ μ΄μμ λν Scopeλ₯Ό ꡬννλ€κ³ μκ°ν΄ λ³΄κ² μ΅λλ€.
- ν μ΄λΈ, μ₯λΉ(μμ΄μ»¨, λμ₯κ³ , TVλ±), μν, μ¬κ³ κ΄λ¦¬, κ³μ°λμ κ°μ κ²λ€μ΄ κ°μ²΄λ‘ ννν μ μλ λ¨μλ‘ μκ°ν μ μμ΅λλ€.
- μΆμν ν λλ μ€μ λμ 보μ΄λ 물리μ μΈ κ°μ²΄κ° μλ μΆμμ μΈ κ°μ²΄λ‘ μκ°ν΄μΌ ν©λλ€.
Class(ν΄λμ€)
ν΄λμ€λ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°(OOP)μμ μ€μ¬μ μΈ μν μ νλ κ°λ μ λλ€
- ν΄λμ€λ κ°μ²΄λ₯Ό μμ±νκΈ° μν 'ν' λλ 'μ€κ³λ'λ‘μ, νΉμ μ νμ κ°μ²΄λ€μ΄ 곡ν΅μ μΌλ‘ κ°μ ΈμΌ ν μμ±(Attributes)κ³Ό νλ(Methods)μ μ μν©λλ€.
- ν΄λμ€λ μμ±κ³Ό νλμ ν¬ν¨νλ κ°μ²΄λ₯Ό μ μν©λλ€.
Attributes(μμ±)
- ν΄λμ€ λ΄μμ μ μλ λ³μλ€λ‘, κ°μ²΄μ μνλ₯Ό λνλ΄λ λ°μ΄ν°λ₯Ό μ μ₯ν©λλ€. λν μμ±μ λ°μ΄ν°μ μμμ΄κ³ ν¨μλ νΉμ μμ μ μνν©λλ€.
- μλ₯Ό λ€μ΄, Personν΄λμ€μλ name, age, genderμ κ°μ μμ±μ ν¬ν¨λ μ μμ΅λλ€.
Method(λ©μλ)
- ν΄λμ€ λ΄μμ μ μλ ν¨μλ€λ‘, κ°μ²΄μ νλ(νμ)λ₯Ό λνλ λλ€.
- λ©μλλ ν΄λμ€μ μμ±μ μ¬μ©νκ±°λ μμ νλ μν μ νλ©°, κ°μ²΄ κ°μ μνΈμμ©μ ꡬννμ¬ Taskλ₯Ό μννλλ° μ¬μ©λ©λλ€.
Object-Oriented Programming, OOPμ μ£ΌμκΈ°λ₯
μΊ‘μν
μΊ‘μνλ κ°μ²΄μ μν(λ°μ΄ν°)μ νμ(λ©μλ)λ₯Ό νλλ‘ λ¬Άκ³ , κ°μ²΄μ μΌλΆ ꡬν μΈλΆ μ¬νμ μΈλΆλ‘λΆν° μ¨κΈ°λ κ²μ λλ€.
- μΊ‘μνμ μ£Όλ λͺ©μ μ κ°μ²΄μ λ΄λΆ ꡬνμ 보νΈνκ³ , μΈλΆμ λΆνμν μ κ·ΌμΌλ‘λΆν° κ°μ²΄λ₯Ό 보νΈνλ κ²μ λλ€.
- μ¬μ©μλ κ°μ²΄μ λ΄λΆ ꡬ쑰 λ° μνλ₯Ό μ§μ μμ ν μ μκ³ λμ μμ μ μμ²ν μ μμ΅λλ€.
- μμ²μ μ’ λ₯μ λ°λΌ κ°μ²΄λ getter, setterμ κ°μ νΉμ ν¨μλ₯Ό μ¬μ©νμ¬ λ΄λΆ μνλ₯Ό λ³κ²½ν©λλ€.
- pythonμλ public, private, protected(C++, Java)μ κ°μ μΊ‘μνμ νμν μ κ·Ό μ μ΄ ν€μλκ° μκΈ° λλ¬Έμ μΊ‘μν κ°λ μ΄ μ‘΄μ¬νμ§ μμ΅λλ€.
λ€νμ± (Polymerphism)
λ€νμ±μ λμΌν μΈν°νμ΄μ€λ λ©μλ νΈμΆμ΄ λ€μν κ°μ²΄λ€μ μν΄ μλ‘ λ€λ₯Έ λ°©μμΌλ‘ μλ΅ν μ μκ² νλ κΈ°λ₯μ λλ€
- λ€νμ±(Polymerphism)μλ 2κ°μ§ μλ―Έκ° μμ΅λλ€.
- κ°μ²΄λ ν¨μ μΈμμ λ°λΌ λ€λ₯Έ κΈ°λ₯μ μνν©λλ€.
- λμΌν μΈν°νμ΄μ€λ₯Ό μ¬λ¬ νμμ κ°μ²΄λ€μ΄ 곡μ ν©λλ€.
- Pythonμ λ€νμ±μ μ§μνλ μΈμ΄μ΄λ©°, μλ₯Ό λ€μ΄ + μ°μ°μλ λ μ μλ₯Ό λνλ κ²λ κ°λ₯ν©λλ€.
- λ€λ§, λ¬Έμμ΄μ νΌμ°μ°μλ‘ μ¬μ©νλ©΄ λ¬Έμμ΄μ΄ ν©μ³μ§λ κΈ°λ₯μ΄ μνλ©λλ€.
μμ(Inheritance)
μμμ ν ν΄λμ€(λΆλͺ¨ ν΄λμ€)μ μμ±κ³Ό λ©μλλ₯Ό λ€λ₯Έ ν΄λμ€(μμ ν΄λμ€)κ° λ°μ μ¬μ©ν μ μκ² νλ κΈ°λ₯μ λλ€.
- μ΄λ€ ν΄λμ€μ κΈ°λ₯μ΄ λΆλͺ¨ ν΄λμ€λ‘λΆν° νμλλκ²μ μλ―Έν©λλ€.
- κ·Έλ¦¬κ³ , λΆλͺ¨ ν΄λμ€μμ μ μλ ν¨μλ₯Ό μ¬μ¬μ© ν μ μκ³ , κΈ°λ³ΈκΈ°λ₯μ νμ₯ν μ μμ΅λλ€.
- λν Pythonμμλ λ€μ€ μμμ μ§μνλ©°, ν΄λμ€κ° κ³μΈ΅ ꡬ쑰λ₯Ό νμ±νλ©°, μ½λλ₯Ό μ¬μ¬μ© ν μ μμ΅λλ€.
# μμ μμ μ½λ
class A():
def a1(self):
print('a1')
class B(A):
def b1(self):
print('B')
b = B()
b.a1()
μΆμν (Abstraction)
μΆμν(Abstraction)λ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°(OOP)μ λ λ€λ₯Έ ν΅μ¬ κ°λ μ λλ€.
μ΄λ 볡μ‘ν νμ€ μΈκ³λ₯Ό λ κ°λ¨νκ² νννκΈ° μν΄ νμμ μΈ μμ±μ΄λ νλλ§μ μΆμΆνμ¬ λͺ¨λΈλ§νλ κ³Όμ μ λ§ν©λλ€.
- μμ½νλ©΄, 곡ν΅μ μΈ μμ±μ λ¬Άμ΄μ μ μ νλ κ²μ μΆμν(abstraction)λΌκ³ ν©λλ€.
- κ·Έλ¦¬κ³ κ³΅ν΅μ μΈ μμ±μ λ°λ‘ λ§λ€κ³ , μμμ κ°λ μΌλ‘ μ μκ° κ°λ₯ν©λλ€.
- κ·Έλ¦¬κ³ κ° κΈ°κΈ°μ μμ‘΄λλ μμ±λ€μ μν΄ λ€λ₯Έ ν΄λμ€λ‘ μ μ νλκ²μ΄ μ’μ΅λλ€.
μ»΄ν¬μ§μ (Composition)
ν ν΄λμ€κ° λ€λ₯Έ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό ν¬ν¨νμ¬ κ·Έ κΈ°λ₯μ νμ©νλ λ°©μμ λ§ν©λλ€.
- κ°μ²΄λ ν΄λμ€λ₯Ό λ 볡μ‘ν μλ£ κ΅¬μ‘°λ λͺ¨λλ‘ λ¬Άλ νμμ λλ€.
- μ»΄ν¬μ§μ μ ν΅ν΄ νΉμ κ°μ²΄λ λ€λ₯Έ λͺ¨λμ ν¨μλ₯Ό νΈμΆ ν μ μμ΅λλ€.
- μ¦, μμ μμ΄ μΈλΆ κΈ°λ₯μ μ¬μ© κ°λ₯ ν©λλ€.
Loose Coupling(λμ¨ν κ²°ν©): μμ€ν λ΄ μ¬λ¬ λΆλΆμ΄ λ 립μ μΌλ‘ μ‘΄μ¬νλ©°, λ³κ²½μ¬νμ΄ ν λΆλΆμ μν₯μ λ―ΈμΉμ§ μμ
λ°μν
'πΊοΈ Design Pattern' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Design Pattern] Factory Method Pattern - ν©ν 리 λ©μλ ν¨ν΄ (0) | 2024.04.08 |
---|---|
[Design Pattern] Factory Pattern - ν©ν 리 ν¨ν΄ (0) | 2024.04.08 |
[Design Pattern] Unified Modeling Language (UML) (0) | 2024.03.28 |
[Design Pattern] Solid Principles (μ리λ μμΉ) (0) | 2024.03.28 |
[Design Pattern] Design Pattern (0) | 2024.03.21 |