κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°(OOP)μ νμ€ μΈκ³μ λͺ¨λΈμ νλ‘κ·Έλ¨μΌλ‘ νννλ νλ‘κ·Έλλ° ν¨λ¬λ€μμ λλ€. pythonμ μ΄λ₯Ό μν΄ ν΄λμ€(Class)μ κ°μ²΄(Object)λΌλ κ°λ μ μ 곡ν©λλ€. μ΄λ² ν¬μ€ν μμλ python ν΄λμ€μ λν΄ μμΈν μμλ³΄κ² μ΅λλ€.
β£ λͺ©μ°¨
1. κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°π§¬
κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ λ¬Έμ λ₯Ό μκ² λλκ³ κ°μ²΄λ₯Ό λ§λ€λ©°, μ΄λ₯Ό μ‘°ν©νμ¬ λ¬Έμ λ₯Ό ν΄κ²°νλ λ°©μμ
λλ€. μ΄λ¬ν μ κ·Ό λ°©μμ 볡μ‘ν λ¬Έμ λ₯Ό μ²λ¦¬νλ λ° μ μ©νλ©°, κΈ°λ₯μ κ°μ νκ³ λ°μ μν¬ λλ ν΄λΉ ν΄λμ€λ§ μμ νλ©΄ λλ―λ‘ μ μ§λ³΄μμ ν¨μ¨μ μ
λλ€.
ν΅μ¬ κ°λ
- λ¬Έμ λΆν΄: κ°μ²΄ μ¬ν₯ νλ‘κ·Έλλ°μμλ ν° λ¬Έμ λ₯Ό μμ λ¬Έμ λ‘ λλμ΄ ν΄κ²°ν©λλ€. κ° λ¬Έμ λ κ°μ²΄λ‘ ννλλ©°, μ΄λ¬ν κ°μ²΄λ νΉμ κΈ°λ₯μ μννκ³ μ 보λ₯Ό μ μ₯ν©λλ€.
- κ°μ²΄ μμ±: κ°μ²΄λ ν΄λμ€μ μΈμ€ν΄μ€μ λλ€. ν΄λμ€λ κ°μ²΄λ₯Ό μμ±νκΈ° μν νλ‘, μμ±(λ°μ΄ν°)κ³Ό λ©μλ(κΈ°λ₯)λ₯Ό ν¬ν¨ν©λλ€. κ°μ²΄λ ν΄λμ€μ μ μλ μμ±κ³Ό λ©μλλ₯Ό μ΄μ©νμ¬ νΉμ ν λμμ μνν©λλ€.
- κ°μ²΄ μ‘°ν©: κ°μ²΄λ€μ μλ‘ μ°κ²°λμ΄ μμ μ μννλ©°, μ΄λ₯Ό ν΅ν΄ μ 체 μμ€ν μ΄ μλν©λλ€. λ€μν κ°μ²΄λ€μ μ‘°ν©νμ¬ λ³΅μ‘ν λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ΅λλ€.
μ₯μ
- μ μ§λ³΄μ μ©μ΄: κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ μ½λλ₯Ό λͺ¨λν νκ³ μ¬μ¬μ©μ±μ λμ¬ μ μ§λ³΄μλ₯Ό μ©μ΄νκ² λ§λλλ€. νΉμ ν΄λμ€μ μμ μ΄ ν΄λΉ ν΄λμ€λ₯Ό μ¬μ©νλ λ€λ₯Έ λΆλΆμ μν₯μ λ―ΈμΉμ§ μμ΅λλ€.
- νμ₯μ±: κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ κΈ°λ₯μ μΆκ°νκ±°λ λ³κ²½ν λ μ μ°μ±μ μ 곡ν©λλ€. μλ‘μ΄ ν΄λμ€λ₯Ό μμ±νκ±°λ κΈ°μ‘΄ ν΄λμ€λ₯Ό μμνμ¬ κΈ°λ₯μ νμ₯ν μ μμ΅λλ€.
- μ½λ κ°λ μ±: κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ μ½λλ₯Ό λΆλ¦¬νμ¬ κ° κ°μ²΄κ° νΉμ κΈ°λ₯μ μννλ―λ‘ μ½λμ κ°λ μ±μ΄ λμμ§λλ€. μ΄λ μ½λλ₯Ό μ΄ν΄νκ³ μ μ§λ³΄μνλ λ° λμμ΄ λ©λλ€.
μ¦ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ 볡μ‘ν λ¬Έμ λ₯Ό ν΄κ²°νλ λ° ν¨κ³Όμ μΈ λ°©λ²μ λλ€. κ°μ²΄λ₯Ό μ€μ¬μΌλ‘ μ½λλ₯Ό ꡬμ±ν¨μΌλ‘μ¨ μ μ§λ³΄μμ±μ λμ΄κ³ νμ₯μ±μ κ°μΆλ©°, μ½λμ κ°λ μ±μ λμ¬ κ°λ°κ³Ό μ μ§λ³΄μλ₯Ό λ³΄λ€ ν¨μ¨μ μΌλ‘ μνν μ μμ΅λλ€.
2. ν΄λμ€μ κ°μ²΄π
ν΄λμ€λ κ°μ²΄λ₯Ό μμ±νκΈ° μν νμ΄λ©°, κ°μ²΄λ ν΄λΉ ν΄λμ€μ μΈμ€ν΄μ€μ λλ€. ν΄λμ€μ κ°μ²΄λ μλ‘ κΈ΄λ°νκ² μ°κ²°λμ΄ μμΌλ©°, ν΄λμ€λ κ°μ²΄λ₯Ό μμ±νκΈ° μν μ²μ¬μ§μΌλ‘ λ³Ό μ μμ΅λλ€. ν΄λμ€λ μμ±κ³Ό λ©μλλ‘ κ΅¬μ±λμ΄ μμΌλ©°, κ°μ²΄μ μνμ νλμ μ μν©λλ€.
- ν΄λμ€(class): ν΄λμ€λ λκ°μ 무μμΈκ°λ₯Ό κ³μν΄μ λ§λ€μ΄ λΌ μ μλ μ€κ³λλ‘ μκ°ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, κ³Όμνμ΄λ λΆμ΄λΉ΅ νκ³Ό κ°μ΅λλ€. μ΄ μ€κ³λλ₯Ό ν΅ν΄ κ°μ²΄λ₯Ό μμ±ν μ μμ΅λλ€.
- κ°μ²΄(object): κ°μ²΄λ ν΄λμ€μ μΈμ€ν΄μ€λ‘, ν΄λμ€μμ λ§λ€μ΄μ§ ꡬ체μ μΈ κ°μ²΄μ λλ€. λΆμ΄λΉ΅ νμμ λ§λ€μ΄μ§ μ€μ λΆμ΄λΉ΅κ³Ό κ°μ κ²μΌλ‘, κ°κ°μ κ°μ²΄λ κ³ μ μ νΉμ±μ κ°μ§κ³ μμ΅λλ€. νμ΄μ¬μμλ λ¬Έμ, μ μ, μ€μ, ν¨μ λ± λͺ¨λ κ°μ²΄μ λλ€.
- μΈμ€ν΄μ€(instance): μΈμ€ν΄μ€λ νΉμ κ°μ²΄κ° μ΄λ€ ν΄λμ€μ κ°μ²΄μΈμ§λ₯Ό κ΄κ³ μμ£Όλ‘ μ€λͺ ν λ μ¬μ©λ©λλ€. ν΄λμ€μ μ°κ΄νμ¬ κ°μ²΄λ₯Ό μ§μΉν λ μΈμ€ν΄μ€λΌκ³ ν©λλ€. μ¦, ν΄λμ€λ‘λΆν° μμ±λ κ°μ²΄λ₯Ό μλ―Έν©λλ€.
- λ©μλ(method): λ©μλλ ν΄λμ€ μμμ ꡬνλ ν¨μλ‘, νΉμ ν κΈ°λ₯μ μνν©λλ€. μ΄λ κ°μ²΄μ λμμ μ μνλ λ° μ¬μ©λ©λλ€.
μλ νμμ κΈ°λ°μΌλ‘ νλ©΄ ν΄λμ€μ κ°μ²΄λ₯Ό μ½κ² μ μνκ³ μ¬μ©ν μ μμ΅λλ€.
3.ν΄λμ€ μ μνκΈ°π©π³
ν΄λμ€λ κ°μ²΄λ₯Ό λ§λ€κΈ° μν μ€κ³λμ
λλ€. μ΄ μ€κ³λμλ μμ±κ³Ό λ©μλλ‘ κ΅¬μ±λμ΄ μμ΅λλ€.
ν΄λμ€κ° μ μλλ κ³Όμ μ λ€μκ³Ό κ°μ΅λλ€.
ν΄λμ€ μ μ νμ:
- ν΄λμ€λ class ν€μλλ‘ μμνμ¬ class ν΄λμ€μ΄λ¦: κ³Ό κ°μ΄ μ μλ©λλ€.
- νμ΄μ¬μμλ ν΄λμ€ μ΄λ¦μ μΌλ°μ μΌλ‘ 첫 κΈ μλ₯Ό λλ¬Έμλ‘ νλ μΉ΄λ©μΌμ΄μ€λ₯Ό μ¬μ©ν©λλ€.
λ©μλ μ μ:
- ν΄λμ€ λ΄λΆμλ λ©μλ(ν¨μ)κ° μ μλ©λλ€.
- λ©μλλ def λ©μλμ΄λ¦(self, 맀κ°λ³μ): μ κ°μ΄ μ μλ©λλ€.
- λ©μλμ 첫 λ²μ§Έ 맀κ°λ³μλ selfλ‘ λ©μλλ₯Ό νΈμΆν κ°μ²΄(μΈμ€ν΄μ€)κ° μλμΌλ‘ μ λ¬λ©λλ€.
- λ©μλ λ΄λΆμμλ μΈμ€ν΄μ€ λ³μλ₯Ό μ μνκ±°λ λ€μν μμ μ μνν μ μμ΅λλ€.
μΈμ€ν΄μ€ μμ± νμ:
- ν΄λμ€λ₯Ό μ΄μ©νμ¬ μ€μ κ°μ²΄(μΈμ€ν΄μ€)λ₯Ό μμ±ν©λλ€.
- μΈμ€ν΄μ€ μμ±μ μΈμ€ν΄μ€μ΄λ¦ = ν΄λμ€μ΄λ¦()κ³Ό κ°μ΄ μνλ©λλ€.
- μ΄λ ν΄λμ€ μ΄λ¦μ νΈμΆνλ κ²μ ν΄λΉ ν΄λμ€μ μμ±μλ₯Ό νΈμΆνλ κ²κ³Ό μ μ¬ν©λλ€.
- ν΄λμ€λ₯Ό λΆμ΄λΉ΅ νμ΄λΌκ³ κ°μ νμ λ μΈμ€ν΄μ€λ₯Ό μμ±νλ κ²μ λΆμ΄λΉ΅μ κ΅½λ νμμ μ μ¬ν©λλ€.
μΈμ€ν΄μ€ νΈμΆ νμ:
- μΈμ€ν΄μ€λ₯Ό ν΅ν΄ ν΄λμ€μ λ©μλλ₯Ό νΈμΆν μ μμ΅λλ€.
- λ©μλ νΈμΆμ μΈμ€ν΄μ€.λ©μλμ΄λ¦()κ³Ό κ°μ΄ μνλ©λλ€.
- μ΄λ λ©μλ νΈμΆ μμλ μΈμ€ν΄μ€ μμ²΄κ° λ©μλμ 첫 λ²μ§Έ 맀κ°λ³μμΈ selfλ‘ μλμΌλ‘ μ λ¬λ©λλ€.
- λ©μλ νΈμΆμ κ°μ²΄κ° κ°μ§λ κΈ°λ₯μ μ€ννλ κ²κ³Ό μ μ¬ν©λλ€.
# ν΄λμ€ μ μ νμ
class ν΄λμ€μ΄λ¦: # νμ΄μ¬μμλ ν΄λμ€μ΄λ¦μ μ£Όλ‘ λλ¬Έμλ‘ μμ
def λ©μλμ΄λ¦(self, 맀κ°λ³μ):
# self -> λ©μλλ₯Ό νΈμΆν κ°μ²΄κ° μλμΌλ‘ μ λ¬λλ 맀κ°λ³μ
self.μμ± = κ° # μΈμ€ν΄μ€ λ³μ
# μΈμ€ν΄μ€ μμ± νμ
μΈμ€ν΄μ€μ΄λ¦ = ν΄λμ€μ΄λ¦() # μΈμ€ν΄μ€(κ°μ²΄) μμ± -> λΆμ΄λΉ΅ κ΅½λ νμ
# λ©μλ νΈμΆ νμ
μΈμ€ν΄μ€μ΄λ¦.λ©μλμ΄λ¦() # λ©μλ (ν¨μ) νΈμΆ
# ν΄λμ€ μ μ νμ
class Car: # ν΄λμ€ μ΄λ¦μ μ£Όλ‘ λλ¬Έμλ‘ μμ
def set_model(self, model):
"""
μλμ°¨ λͺ¨λΈμ μ€μ νλ λ©μλ
:param model: μ€μ ν μλμ°¨ λͺ¨λΈ
"""
self.model = model # μΈμ€ν΄μ€ λ³μ μ€μ
# μΈμ€ν΄μ€ μμ± νμ
my_car = Car() # μλμ°¨ κ°μ²΄ μμ± -> λΆμ΄λΉ΅ κ΅½λ νμ
# λ©μλ νΈμΆ νμ
my_car.set_model("Samsung") # μλμ°¨ λͺ¨λΈ μ€μ λ©μλ νΈμΆ
ν΄λμ€ λ΄λΆμλ ν΄λμ€ λ©€λ²μ μΈμ€ν΄μ€ λ©€λ²λ₯Ό μ μν μ μμ΅λλ€.
- ν΄λμ€ λ©€λ²: ν΄λμ€ λ΄λΆμμ μ μλ λ³μλ‘, λͺ¨λ μΈμ€ν΄μ€μμ 곡μ λ©λλ€.
- μΈμ€ν΄μ€ λ©€λ²: κ° μΈμ€ν΄μ€λ§λ€ κ³ μ ν κ°μ κ°μ§λ λ³μλ‘, μ£Όλ‘ μμ±μλ₯Ό ν΅ν΄ μ΄κΈ°νλ©λλ€.
class MyClass:
class_variable = 0 # ν΄λμ€ λ©€λ²
def __init__(self, instance_variable):
self.instance_variable = instance_variable # μΈμ€ν΄μ€ λ©€λ²
# ν΄λμ€ λ©€λ²μ μ κ·Ό
print("ν΄λμ€ λ©€λ²μ μ κ·Ό:")
print("MyClass.class_variable:", MyClass.class_variable)
# μΈμ€ν΄μ€ μμ± λ° μΈμ€ν΄μ€ λ©€λ²μ μ κ·Ό
print("\nμΈμ€ν΄μ€ μμ± λ° μΈμ€ν΄μ€ λ©€λ²μ μ κ·Ό:")
obj1 = MyClass(1)
obj2 = MyClass(2)
print("obj1.instance_variable:", obj1.instance_variable)
print("obj2.instance_variable:", obj2.instance_variable)
# ν΄λμ€ λ©€λ² λ³κ²½
print("\nν΄λμ€ λ©€λ² λ³κ²½:")
MyClass.class_variable = 10
print("MyClass.class_variable:", MyClass.class_variable)
print("obj1.class_variable:", obj1.class_variable) # μΈμ€ν΄μ€μμλ ν΄λμ€ λ©€λ²μ μ κ·Ό κ°λ₯
print("obj2.class_variable:", obj2.class_variable)
# μΈμ€ν΄μ€ λ©€λ² λ³κ²½
print("\nμΈμ€ν΄μ€ λ©€λ² λ³κ²½:")
obj1.instance_variable = 100
print("obj1.instance_variable:", obj1.instance_variable)
print("obj2.instance_variable:", obj2.instance_variable)
class Car: # ν΄λμ€ μ μ
count = 0 # ν΄λμ€ λ³μ μ μ
def __init__(self, name, speed): # μμ±μ
self.name = name # μΈμ€ν΄μ€ λ³μ
self.speed = speed # μΈμ€ν΄μ€ λ³μ
Car.count += 1 # ν΄λμ€ λ³μλ₯Ό 1 μ¦κ°μν΄
def info(self): # μΈμ€ν΄μ€ λ©μλ μ μ
"""
μλμ°¨μ μ 보μ νμ¬ μμ°λ μλμ°¨ μλ₯Ό μΆλ ₯νλ λ©μλ
"""
print(f'{self.name}μ νμ¬ μλ : {self.speed}km')
print(f'μμ°λ μλμ°¨ μ : {Car.count}λ')
print('--------------------------------')
car1 = Car('λΆλΆμΉ΄', 0) # μΈμ€ν΄μ€(κ°μ²΄) μμ±(μμ±μλ νΈμΆ)
car1.info() # μΈμ€ν΄μ€ λ©μλ νΈμΆ
μμ±μ(constructor)λ κ°μ²΄κ° μμ±λ λ μλμΌλ‘ νΈμΆλμ΄ μ΄κΈ°ν μμ
μ μννλ λ©μλμ
λλ€. κ°μ²΄μμ μ΄κΉκ°μ μ€μ ν΄μΌ ν νμκ° μμ λ μ£Όλ‘ μ¬μ©λ©λλ€. νμ΄μ¬μμλ μμ±μλ‘ __init__ λ©μλλ₯Ό μ¬μ©νλ©°, μ΄λ μ€μΌμ
λ©μλ(λ§€μ§ λ©μλ)λ‘ μλ€λ‘ λ κ°μ λ°μ€μ΄ λΆμ΅λλ€. μμ±μλ₯Ό μ¬μ©νμ§ μμ μμ μ μ¬μ©ν μμ λ₯Ό λΉκ΅ν΄ μμ±μμ λν΄ μμΈν μ΄ν΄λ³΄κ² μ΅λλ€. λ¨Όμ μμ±μλ₯Ό μ¬μ©νμ§ μμ μμ λ₯Ό νμΈν΄ λ³΄κ² μ΅λλ€.
class Candy:
def set_info(self, shape, color): # μΈμ€ν΄μ€ λ©μλ μ μ
self.shape = shape # μΈμ€ν΄μ€ λ³μ
self.color = color
def print_info(self): # μΈμ€ν΄μ€ λ©μλ μ μ
print(self.shape)
print(self.color)
satang = Candy() # μΈμ€ν΄μ€(κ°μ²΄) μμ±
satang.set_info('circle', 'brown') # μΈμ€ν΄μ€ λ©μλ νΈμΆ
satang.print_info() # μΈμ€ν΄μ€ λ©μλ νΈμΆ
class Candy2:
def __init__(self, shape, color): # μμ±μ
self.shape = shape
self.color = color
def print_info(self):
print(self.shape)
print(self.color)
satang2 = Candy2('circle', 'red') # κ°μ²΄ μμ±κ³Ό λμμ μμ±μλ₯Ό νΈμΆ
satang2.print_info() # μΈμ€ν΄μ€ λ©μλ νΈμΆ
satang3 = Candy2('oval', 'pink')
satang3.print_info()
μμ±μλ₯Ό μ¬μ©νλ©΄ κ°μ²΄κ° μμ±λ λ μ΄κΈ°κ°μ μ€μ ν μ μμ΄μ μ½λμ κ°λ
μ±μ λμ΄κ³ , κ°μ²΄ μμ± κ³Όμ μ λ¨μνν μ μμ΅λλ€.
4.ν΄λμ€ λ©μλμ μΈμ€ν΄μ€ λ©μλπ°
ν΄λμ€ λ©μλ(Class Method)μ μΈμ€ν΄μ€ λ©μλ(Instance Method)λ νμ΄μ¬μμ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ ν λ μ€μν μν μ νλ λ κ°μ§ μ’ λ₯μ λ©μλμ λλ€.
- ν΄λμ€ λ©μλ
- ν΄λμ€ λ©μλλ ν΄λμ€μ μν λ©μλλ‘, ν΄λμ€ λλ μΈμ€ν΄μ€λ₯Ό ν΅ν΄ νΈμΆλ μ μμ΅λλ€.
- @classmethod λ°μ½λ μ΄ν°λ₯Ό ν΅ν΄ νμλ©λλ€.
- 첫 λ²μ§Έ 맀κ°λ³μλ‘ clsλ₯Ό μ¬μ©νλ©°, ν΄λμ€ μ체λ₯Ό κ°λ¦¬ν΅λλ€.
- ν΄λμ€ λ©μλλ ν΄λμ€ λ³μλ₯Ό μ¬μ©νκ±°λ ν΄λμ€ μμ€μ μμ μ μνν λ μ£Όλ‘ νμ©λ©λλ€.
- μΈμ€ν΄μ€ λ©μλ
- μΈμ€ν΄μ€ λ©μλλ νΉμ μΈμ€ν΄μ€μ μν λ©μλλ‘, ν΄λΉ μΈμ€ν΄μ€λ₯Ό ν΅ν΄ νΈμΆλ©λλ€.
- μΌλ°μ μΌλ‘ κ°μ²΄μ μνλ₯Ό μ‘°μνκ±°λ κ°μ²΄ μμ€μ μμ μ μνν λ μ¬μ©λ©λλ€.
- λ©μλμ 첫 λ²μ§Έ 맀κ°λ³μλ‘ selfλ₯Ό μ¬μ©νλ©°, ν΄λΉ λ©μλλ₯Ό νΈμΆν μΈμ€ν΄μ€λ₯Ό κ°λ¦¬ν΅λλ€.
μλ₯Ό λ€μ΄, μλμ°¨ ν΄λμ€μμ start() λ©μλκ° μμ κ²½μ°:
- ν΄λμ€ λ©μλλ‘ μ μλ κ²½μ°, λͺ¨λ μλμ°¨μ μλμ κ±Έκ±°λ λ λ μ¬μ©ν μ μμ΅λλ€.
- μΈμ€ν΄μ€ λ©μλλ‘ μ μλ κ²½μ°, νΉμ μλμ°¨μ μλμ κ±Έκ±°λ λ λ μ¬μ©λ©λλ€.
class Car:
# ν΄λμ€ λ³μ
car_count = 0
def __init__(self, brand, model):
# μΈμ€ν΄μ€ λ³μ
self.brand = brand
self.model = model
Car.car_count += 1
@classmethod
def start_all(cls):
"""
λͺ¨λ μλμ°¨μ μλμ κ±Έ λ μ¬μ©λλ ν΄λμ€ λ©μλ
"""
print("μλμ κ±Έμμ΅λλ€.")
# μ¬κΈ°μμ λͺ¨λ μλμ°¨μ μλμ 건λ€κ³ κ°μ νκ³ λμμ μμ±νλ€.
def start(self):
"""
νΉμ μλμ°¨μ μλμ κ±Έ λ μ¬μ©λλ μΈμ€ν΄μ€ λ©μλ
"""
print(f"{self.brand} {self.model}μ μλμ κ±Έμμ΅λλ€.")
# μ¬κΈ°μμ νΉμ μλμ°¨μ μλμ 건λ€κ³ κ°μ νκ³ λμμ μμ±νλ€.
# ν΄λμ€ λ©μλ νΈμΆ
Car.start_all()
# μΈμ€ν΄μ€ μμ±
car1 = Car("νλ", "μλν")
car2 = Car("κΈ°μ", "K5")
# μΈμ€ν΄μ€ λ©μλ νΈμΆ
car1.start()
car2.start()
ν΄λμ€ λ©μλμ μΈμ€ν΄μ€ λ©μλλ κ°κ°μ μ©λμ λ§κ² μ μ ν μ¬μ©λμ΄μΌ ν©λλ€. ν΄λμ€ λ©μλλ ν΄λμ€ μ λ°μ μΈ μμ
μ μ¬μ©λκ³ , μΈμ€ν΄μ€ λ©μλλ μΈμ€ν΄μ€λ³λ‘ λ€λ₯Έ μμ
μ μ¬μ©λ©λλ€.
5.μμπͺ
μμμ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ μ€μν κ°λ
μΌλ‘, μμμ μ¬μ©νλ©΄ κΈ°μ‘΄ ν΄λμ€μ λͺ¨λ μμ±κ³Ό λ©μλλ₯Ό μλ‘μ΄ ν΄λμ€μμ μ¬μ¬μ©ν μ μμ΅λλ€. μ΄λ μ½λμ μ€λ³΅μ μ€μ΄κ³ , μ½λλ₯Ό λ κ°κ²°νκ³ μ μ°νκ² λ§λ€μ΄μ€λλ€. λν, μμμ ν΅ν΄ ν΄λμ€ κ°μ κ΄κ³λ₯Ό λͺ
νν νμ¬ μ½λμ μ΄ν΄μ μ μ§λ³΄μλ₯Ό μ½κ² λ§λ€μ΄μ€λλ€.
νμ΄μ¬μμλ ν΄λμ€ μ μ μ κ΄νΈ μμ μμλ°μ ν΄λμ€μ μ΄λ¦μ λ£μ΄μ μμμ ꡬνν©λλ€. μλ₯Ό λ€μ΄ class SubClass(SuperClass): μ κ°μ΄ μμ±νμ¬ SubClassκ° SuperClassλ₯Ό μμλ°λλ‘ ν©λλ€.
class SuperClass:
# λΆλͺ¨ ν΄λμ€μ μμ±κ³Ό λ©μλ μ μ
pass
class SubClass(SuperClass):
# SubClassμ κ³ μ ν μμ±κ³Ό λ©μλ μ μ
pass
μμμ μ΄μ©ν μμ λ₯Ό ν΅ν΄ μ΄ν΄λ³΄κ² μ΅λλ€.
class Person: # μνΌ ν΄λμ€(λΆλͺ¨ ν΄λμ€)
def __init__(self, name): # μμ±μ
"""
Person ν΄λμ€μ μμ±μμ
λλ€.
:param name: μ΄λ¦
"""
self.name = name
def eat(self, food): # μΈμ€ν΄μ€ λ©μλ μ μ
"""
μμμ λ¨Ήλ λ©μλμ
λλ€.
:param food: λ¨Ήμ μμ
"""
print(f'{self.name}κ° {food}λ₯Ό λ¨Ήμ΅λλ€.')
class Student(Person): # μλΈ ν΄λμ€(μμ ν΄λμ€)
def __init__(self, name, school): # μμ±μ
"""
Student ν΄λμ€μ μμ±μμ
λλ€.
:param name: μ΄λ¦
:param school: νκ΅
"""
super().__init__(name) # μνΌ(λΆλͺ¨) ν΄λμ€μ μμ±μλ₯Ό νΈμΆ
self.school = school
def study(self): # μΈμ€ν΄μ€ λ©μλ μ μ
"""
곡λΆνλ λ©μλμ
λλ€.
"""
print(f'{self.name}λ {self.school}μμ 곡λΆλ₯Ό ν©λλ€.')
potter = Student('ν΄λ¦¬ν¬ν°', 'νΈκ·ΈμνΈ')
potter.eat('μ €λ¦¬') # μμλ°μ λ©μλ νΈμΆ
potter.study() # μΈμ€ν΄μ€ λ©μλ νΈμΆ
class Coffee: # μνΌ ν΄λμ€(λΆλͺ¨ ν΄λμ€)
def __init__(self, bean): # μμ±μ
"""
Coffee ν΄λμ€μ μμ±μμ
λλ€.
:param bean: μλ
"""
self.bean = bean
def coffee_info(self): # μΈμ€ν΄μ€ λ©μλ μ μ
"""
μ»€νΌ μ 보λ₯Ό μΆλ ₯νλ λ©μλμ
λλ€.
"""
print('μλ: {}'.format(self.bean))
class Espresso(Coffee): # μλΈ ν΄λμ€(μμ ν΄λμ€)
def __init__(self, bean, water): # μμ±μ
"""
Espresso ν΄λμ€μ μμ±μμ
λλ€.
:param bean: μλ
:param water: λ¬Όμ μ
"""
super().__init__(bean) # λΆλͺ¨μ μμ±μλ₯Ό νΈμΆ
self.water = water
def espresso_info(self): # μΈμ€ν΄μ€ λ©μλ μ μ
"""
μμ€νλ μ μ 보λ₯Ό μΆλ ₯νλ λ©μλμ
λλ€.
"""
super().coffee_info() # λΆλͺ¨ ν΄λμ€μ λ©μλλ₯Ό νΈμΆ
print('λ¬Ό: {}ml'.format(self.water))
coffee = Espresso('μ½λ‘¬λΉμ', 30) # μΈμ€ν΄μ€(κ°μ²΄) μμ±
coffee.espresso_info() # μΈμ€ν΄μ€ λ©μλ νΈμΆ
coffee2 = Espresso('μκ°μ²΄ν', 50)
coffee2.espresso_info()
μμμ κΈ°μ‘΄ ν΄λμ€μ μμ±κ³Ό λ©μλλ₯Ό μλ‘μ΄ ν΄λμ€μμ μ¬μ¬μ©ν μ μλ κ°λ ₯ν λꡬμ
λλ€. κ·Έλ¬λ λ€μ€ μμμ μ¬μ©ν λμλ μ£Όμν΄μΌ ν©λλ€. λ€μ€ μμμ ν ν΄λμ€κ° μ¬λ¬ κ°μ λΆλͺ¨ ν΄λμ€λ‘λΆν° μμμ λ°λ κ²μ μλ―Έν©λλ€. νμ΄μ¬μ λ€μ€ μμμ μ§μνμ§λ§, μ΄μλ λͺ κ°μ§ μ£Όμν μ μ΄ μμ΅λλ€.
λ€μ€ μμμ μ¬μ©νλ©΄ μ½λμ 볡μ‘μ±μ΄ μ¦κ°ν μ μκ³ , ν΄λμ€ κ°μ μμ‘΄μ±μ΄ λμμ Έμ μ½λλ₯Ό μ΄ν΄νκΈ° μ΄λ €μμ§ μ μμ΅λλ€. λν, λ€μ΄μλͺ¬λ μμκ³Ό κ°μ νΉμ μν©μμλ λ©μλ μΆ©λμ΄ λ°μν μ μμ΅λλ€. μ΄λ¬ν μ΄μ λ‘ λ€μ€ μμμ μ¬μ©ν λμλ μ μ€νκ² κ³ λ €ν΄μΌ ν©λλ€. κ°λ₯ν κ²½μ° λ¨μΌ μμμ μ¬μ©νκ³ , νμν κ²½μ°μλ§ λ€μ€ μμμ μ¬μ©νλ κ²μ΄ μ’μ΅λλ€.
π μ¬κΈ°μ μ κΉ
λ€μ΄μλͺ¬λ μμμ΄λ?
λ€μ΄μλͺ¬λ μμμ λ€μ€ μμ ꡬ쑰μμ νΉμ ν΄λμ€κ° λ κ° μ΄μμ μμ ν΄λμ€λ‘λΆν° μμμ λ°μ λ λ°μνλ λ¬Έμ λ₯Ό λ§ν©λλ€. μ΄λ λ€μκ³Ό κ°μ μμ ꡬ쑰μμ λ°μν©λλ€.
A
/ \
B C
\ /
D
μ¬κΈ°μ ν΄λμ€ Dκ° ν΄λμ€ Bμ ν΄λμ€ Cλ‘λΆν° μμμ λ°κ³ , ν΄λμ€ Bμ ν΄λμ€ Cλ λͺ¨λ ν΄λμ€ Aλ‘λΆν° μμμ λ°λ κ²½μ°λ₯Ό κ³ λ €ν΄ λ΄ μλ€. μ΄λ° ꡬ쑰μμ ν΄λμ€ Dλ ν΄λμ€ Aμ μμ±κ³Ό λ©μλλ₯Ό μ€λ³΅μΌλ‘ μμλ°κ² λ©λλ€. μ΄λ‘ μΈν΄ λ©μλ μΆ©λμ΄ λ°μν μ μκ³ , ν΄λμ€ κ°μ μμ‘΄μ±μ΄ λμμ Έμ μ½λλ₯Ό μ΄ν΄νκΈ° μ΄λ €μμ§ μ μμ΅λλ€.
λ€μ΄μλͺ¬λ μμμ κ·Έ λͺ¨μμ΄ λ€μ΄μλͺ¬λμ μ μ¬νμ¬ μ΄λ κ² λΆλ¦¬λ©°, μ΄λ¬ν μμ ꡬ쑰λ₯Ό λ§λλ©΄ λ©μλ μΆ©λ λ±μ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ μ μ ν λ°©λ²μΌλ‘ λ€μ€ μμμ μ¬μ©ν΄μΌ ν©λλ€.