Python을 배워보자/6. 객체 지향 프로그래밍 (OOP)

파이썬 상속 다형성

_Blue_Sky_ 2024. 9. 25. 18:09
728x90
728x90

파이썬 상속과 다형성: 객체 지향 프로그래밍의 핵심, 깊이 있게 파헤치기

**객체 지향 프로그래밍(OOP)**은 현대 소프트웨어 개발에서 가장 널리 사용되는 패러다임 중 하나입니다. 파이썬은 OOP를 강력하게 지원하는 언어로, 상속다형성이라는 두 가지 핵심 개념을 통해 코드의 재사용성과 유연성을 높입니다. 이 글에서는 파이썬의 상속과 다형성에 대해 깊이 있게 다루고, 다양한 예시와 함께 설명하여 이해를 돕겠습니다.

1. 상속(Inheritance)

  • 개념:
    • 기존 클래스(부모 클래스)의 속성과 메소드를 상속받아 새로운 클래스(자식 클래스)를 정의하는 것
    • 코드 재사용성을 높이고, 클래스 간의 계층 구조를 형성
  • 장점:
    • 코드 중복을 줄여 유지보수를 용이하게 함
    • 클래스 간의 관계를 명확하게 표현
    • 확장성이 높은 프로그램 구조를 만들 수 있음
  • 예시:
    class Animal:
        def __init__(self, name):
            self.name = name
    
        def eat(self):
            print(f"{self.name}이(가) 먹습니다.")
    
    class Dog(Animal):
        def bark(self):
            print("멍멍!")
    
    dog = Dog("멍멍이")
    dog.eat()  # Animal 클래스의 eat 메소드 상속
    dog.bark()  # Dog 클래스의 고유 메소드
    
     
728x90

2. 다형성(Polymorphism)

  • 개념:
    • 서로 다른 타입의 객체가 동일한 메시지에 대해 각자의 방식으로 응답하는 능력
    • 상속과 함께 사용되어 코드의 유연성을 높임
  • 종류:
    • 오버라이딩(Overriding): 자식 클래스에서 부모 클래스의 메소드를 재정의
    • 오버로딩(Overloading): 같은 이름의 메소드를 다른 매개변수로 정의 (파이썬에서는 명시적으로 지원하지 않음)
  • 장점:
    • 코드의 일반화를 통해 코드의 재사용성을 높임
    • 다양한 객체를 동일한 인터페이스로 처리 가능
  • 예시:
    class Shape:
        def area(self):
            pass
    
    class Circle(Shape):
        def __init__(self, radius):
            self.radius = radius
    
        def area(self):
            return 3.14 * self.radiu s * self.radius
    
    class Rectangle(Shape):
        def __init__(self, width, height):
            self.width = width
            self.height = height
    
        def area(self):
            return self.width * self.heig ht
    
    shapes = [Circle(5), Rectangle(3, 4)]
    for shape in shapes:
        print(shape. area())  # 각 도형에 맞는 area 메소드 호출
    
     

3. 상속과 다형성의 활용

  • 객체 지향 설계 패턴:
    • 상속: 클래스 계층 구조를 형성하여 코드를 조직화
    • 다형성: 다양한 객체를 동일한 방식으로 처리하는 인터페이스 제공
  • GUI 프로그래밍:
    • 다양한 위젯(버튼, 텍스트 상자 등)을 상속하여 새로운 위젯 생성
    • 이벤트 처리를 다형적으로 구현
  • 데이터베이스 연동:
    • 다양한 데이터베이스를 상속하여 공통적인 기능 제공
  • 게임 개발:
    • 캐릭터, 아이템 등을 상속하여 다양한 종류의 객체 생성

4. 주의 사항

  • 상속의 남용: 불필요한 상속은 코드를 복잡하게 만들 수 있음
  • 다형성의 오용: 잘못된 다형성 사용은 예측 불가능한 결과를 초래할 수 있음
  • MRO(Method Resolution Order): 메소드 호출 시 상속 계층에서 메소드를 찾는 순서를 이해해야 함

결론

파이썬의 상속과 다형성은 객체 지향 프로그래밍의 핵심 개념으로, 코드의 재사용성, 유연성, 확장성을 높이는 데 중요한 역할을 합니다. 이 글을 통해 상속과 다형성에 대한 이해를 넓히고, 실제 개발에 적용하여 더욱 효율적인 코드를 작성할 수 있기를 바랍니다.

 

 

728x90
728x90