파이썬

Python 기초 강의: #6 파이썬 클래스 - 상속과 다형성

TitediosKW 2024. 6. 27. 19:00
반응형

파이썬에서 클래스의 상속과 다형성은 객체지향 프로그래밍(OOP)의 핵심 개념입니다. 상속과 다형성을 함께 사용하면 코드의 재사용성을 높이고 유지 관리를 용이하게 하며, 프로그램의 확장성을 향상시킬 수 있습니다. 이번 포스팅에서는 상속과 다형성에 대해 알아보고, 이를 활용한 예제를 통해 개념을 더욱 명확히 이해해보겠습니다.


계승 아이콘 제작자: Freepik - Flaticon

1. 상속 (Inheritance)

상속은 객체 지향 프로그래밍의 기본적인 개념으로, 한 클래스(부모 클래스)가 가지고 있는 속성과 메서드를 다른 클래스(자식 클래스)에 물려주는 것을 의미합니다. 이를 통해 코드의 재사용성을 높이고 새로운 클래스의 작성을 간소화할 수 있습니다. 상속을 통해 부모 클래스(슈퍼 클래스)의 기능을 자식 클래스(서브 클래스)에서 사용할 수 있습니다.

 

부모 클래스에 추상화된 개념 및 기능을 포함하고 자식 클래스에서 실제 구현을 하거나 구체적인 동작을 하는 방식으로 구현합니다. 실무에서는 UML 등으로 설계작업 등을 수행 시 상속의 개념을 활용합니다. 파이썬을 구현하여 프로그래밍을 할 경우 반드시 상속을 이용하여 기능 구현을 할 필요는 없지만 대부분의 좋은 코드나 실무적 코드는 상속을 활용하기 때문에 상속의 개념을 잘 이해할 필요가 있습니다.

# 부모 클래스 (슈퍼 클래스)
class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        pass

# 자식 클래스 (서브 클래스)
class Dog(Animal): # Animal (부모 클래스) 상속
    def speak(self):
        return f"{self.name} says Woof!"

class Cat(Animal): # Animal (부모 클래스) 상속
    def speak(self):
        return f"{self.name} says Meow!"

dog = Dog("멍멍")
cat = Cat("냐옹")

print(dog.speak())  # 멍멍 says Woof!
print(cat.speak())  # 냐옹 says Meow!

 

위 예제에서 Dog와 Cat 클래스는 Animal 클래스를 상속받고 있습니다. Animal 클래스의 init 메서드를 통해 name 속성을 상속받고, speak 메서드는 각 자식 클래스에서 오버라이드(재정의)되었습니다.

2. 다형성 (Polymorphism)

다형성은 같은 메서드가 다양한 클래스에서 다르게 동작할 수 있는 능력을 말합니다. 이는 메서드 오버라이딩을 통해 구현됩니다. 다형성은 상속을 기반으로 하여 동일한 인터페이스를 사용하면서도 상황에 맞게 다른 동작을 수행할 수 있게 합니다.

 

이전의 상속 챕터에서 제가 부모 클래스의 추상화된 기능을 자식 클래스에서 실제 동작으로 구현한다고 말씀드렸었죠? ㅎㅎㅎ 이제 실제 구현에 대한 이야기입니다. 자식 클래스에서 부모 클래스의 추상화된 기능을 상속받았습니다. 이후에 실제 구현을 해야합니다. 이 때에 자식 클래스마다 다른 기능을 구현할 수 있습니다. 이것이 바로 다형성입니다. 아래 예제를 통해 다형성에 대하여 알아보겠습니다.

class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        pass

class Dog(Animal):
    def speak(self):
        return f"{self.name} says Woof!"

class Cat(Animal):
    def speak(self):
        return f"{self.name} says Meow!"

# 다형성을 활용한 함수
def make_animal_speak(animal):
    print(animal.speak())

dog = Dog("멍멍")
cat = Cat("냐옹")

make_animal_speak(dog)  # 멍멍 says Woof!
make_animal_speak(cat)  # 냐옹 says Meow!

 

위 예제에서 make_animal_speak 함수는 Animal 타입의 객체를 매개변수로 받아 speak 메서드를 호출합니다. 이 함수는 Dog 객체와 Cat 객체를 모두 처리할 수 있습니다. Animal이라는 같은 부모 밑에서 태어난 Dog와 Cat은 부모 객체의 대체가 가능하고 내부의 speak를 호출함으로써 자식 객체의 speak를 호출하는 구조입니다. 이는 각각의 클래스에서 speak 메서드가 다르게 구현되었기 때문에 가능하며, 이를 통해 다형성을 구현할 수 있습니다.

결론

상속을 통해 코드의 재사용성을 높이고 새로운 클래스를 쉽게 작성할 수 있습니다.
다형성을 통해 동일한 메서드가 다양한 클래스에서 다른 동작을 수행하게 할 수 있습니다.

파이썬에서 상속과 다형성을 이해하고 활용해보세요. 이를 통해 객체지향 프로그래밍의 강력함을 경험할 수 있을 것입니다.

 

이번 포스팅에서는 상속과 다형성에 대하여 알아보았습니다. 지금까지 클래스를 공부해왔습니다. 클래스는 객체 지향 프로그램의 뼈대와 같은 개념이고 또 실무에서도 많이 활용됨은 물론 개발자의 필수 소양과 같습니다. 느리더라도 차근차근 숙지하시어 즐거운 개발이 되시면 좋겠습니다.

 

감사합니다.

반응형