Akashic Records

5.3 다형성 본문

Python for Beginners

5.3 다형성

Andrew's Akashic Records 2023. 3. 20. 13:37
728x90

다형성(Polymorphism)은 객체 지향 프로그래밍의 핵심 원칙 중 하나로, 서로 다른 클래스의 객체가 동일한 인터페이스를 사용하여 다양한 동작을 구현하는 것을 말합니다. 파이썬에서 다형성을 구현하는 방법은 여러 가지가 있지만, 주로 상속과 메서드 오버라이딩을 통해 이루어집니다.


다형성의 장점은 다음과 같습니다:

 

  • 코드의 재사용성: 다양한 클래스에서 동일한 인터페이스를 사용하므로 코드의 중복을 줄일 수 있습니다.
  • 유연성: 상위 클래스를 사용하는 코드를 변경하지 않고 하위 클래스의 동작을 변경하거나 확장할 수 있습니다.
  • 확장성: 새로운 클래스를 쉽게 추가하거나 기존 클래스를 수정할 수 있습니다.

다형성 예시 코드:

class Animal:
    def speak(self):
        pass


class Dog(Animal):
    def speak(self):
        return "멍멍!"


class Cat(Animal):
    def speak(self):
        return "야옹!"


class Cow(Animal):
    def speak(self):
        return "음메!"


def animal_speak(animal):
    print(animal.speak())


dog = Dog()
cat = Cat()
cow = Cow()

animal_speak(dog)  # 출력: 멍멍!
animal_speak(cat)  # 출력: 야옹!
animal_speak(cow)  # 출력: 음메!

위 예시에서 Animal이라는 상위 클래스가 있으며, Dog, Cat, Cow 세 가지 하위 클래스가 Animal 클래스를 상속받아 speak 메서드를 오버라이딩(재정의)합니다. 이렇게 다양한 클래스에서 동일한 인터페이스를 사용하면서 다양한 동작을 구현할 수 있습니다.

animal_speak 함수는 Animal 클래스를 상속받은 어떤 객체도 처리할 수 있으며, 각 객체의 speak 메서드를 호출하여 동물마다 다른 소리를 출력합니다. 이처럼 다형성을 활용하면 코드의 유연성과 확장성이 향상됩니다.

파이썬의 추상 클래스와 추상 메서드

추상 클래스와 추상 메서드를 사용하면 다형성을 더 강력하게 구현할 수 있습니다. 추상 클래스는 인스턴스화할 수 없는 클래스로, 하나 이상의 추상 메서드를 포함합니다. 추상 메서드는 선언만 있고 구현이 없는 메서드입니다. 파이썬에서 추상 클래스와 추상 메서드를 정의하려면 abc(Abstract Base Class) 모듈을 사용해야 합니다.

추상 클래스와 추상 메서드 예시 코드:

from abc import ABC, abstractmethod

class Animal(ABC):
    @abstractmethod
    def speak(self):
        pass

class Dog(Animal):
    def speak(self):
        return "멍멍!"

class Cat(Animal):
    def speak(self):
        return "야옹!"

class Cow(Animal):
    def speak(self):
        return "음메!"

def animal_speak(animal):
    print(animal.speak())

dog = Dog()
cat = Cat()
cow = Cow()

animal_speak(dog)  # 출력: 멍멍!
animal_speak(cat)  # 출력: 야옹!
animal_speak(cow)  # 출력: 음메!


이 예시에서 Animal 클래스는 추상 클래스이며, speak 메서드는 추상 메서드입니다. Dog, Cat, Cow 클래스는 Animal 클래스를 상속받아 speak 메서드를 구현해야 합니다. 만약 하위 클래스에서 추상 메서드를 구현하지 않으면, 해당 클래스 역시 추상 클래스로 간주되며 인스턴스화할 수 없습니다.

추상 클래스와 추상 메서드를 사용하면 다음과 같은 이점이 있습니다:

  • 인터페이스 강제: 추상 클래스를 상속받은 모든 하위 클래스가 추상 메서드를 구현하도록 강제할 수 있습니다. 이를 통해 일관된 인터페이스를 제공하고 코드의 안정성을 높일 수 있습니다.
  • 코드의 표준화: 추상 클래스와 추상 메서드를 사용하면 클래스 간의 계약(contract)을 명확하게 정의할 수 있으며, 이를 통해 코드를 더 쉽게 이해하고 유지 보수할 수 있습니다.

추상 클래스와 추상 메서드를 사용하여 다형성을 구현하면 코드의 일관성과 안정성을 높이는 데 도움이 됩니다. 이를 통해 객체 지향 프로그래밍의 다양한 원칙을 지키면서 유연하고 확장 가능한 코드를 작성할 수 있습니다.

728x90

'Python for Beginners' 카테고리의 다른 글

5.5 디자인 패턴  (0) 2023.03.20
5.4 캡슐화  (0) 2023.03.20
5.2 상속  (0) 2023.03.20
5.1 클래스(Class)와 객체(Object)  (0) 2023.03.20
4.4 CSV, JSON 파일 다루기  (0) 2023.03.20
Comments