본문 바로가기
파이썬/[객체지향 시리즈!]

📌 3. 상속과 다형성: 코드 재사용성과 확장성 높이기

by 배불뚝 아저씨 2025. 2. 5.
반응형

1. 객체지향 프로그래밍(OOP) 개요 (이전 시리즈 요약)

이전 글에서는 클래스와 객체의 개념을 다루었으며, 다음과 같은 핵심 개념을 배웠습니다:

  • 클래스(Class): 객체를 만들기 위한 설계도
  • 객체(Object): 클래스를 기반으로 생성된 실체
  • 메서드(Method): 클래스 내부에서 정의된 함수
  • 인스턴스 변수 vs. 클래스 변수: 객체별로 독립적인 변수 vs. 모든 객체가 공유하는 변수
  • 클래스 메서드와 정적 메서드: 클래스 자체를 조작하는 메서드 vs. 독립적인 연산 수행

이번 글에서는 **상속(Inheritance)**과 **다형성(Polymorphism)**을 다루며, 객체지향 프로그래밍의 강력한 기능을 활용하는 방법을 배워보겠습니다.


2. 상속(Inheritance)란?

상속은 기존 클래스의 기능을 물려받아 새로운 클래스를 생성하는 기능입니다. 이를 통해 코드의 재사용성을 높이고, 유지보수를 쉽게 할 수 있습니다.

✅ 기본 상속 예제

class Animal:
    def __init__(self, name):
        self.name = name
    
    def make_sound(self):
        return "소리를 냅니다."

# Animal 클래스를 상속하는 Dog 클래스
class Dog(Animal):
    def make_sound(self):
        return "멍멍!"

# 객체 생성
dog = Dog("바둑이")
print(dog.name)  # 부모 클래스의 속성
print(dog.make_sound())  # 자식 클래스에서 오버라이딩된 메서드

🖥 실행 결과

바둑이
멍멍!

🔹 Dog 클래스는 Animal 클래스를 상속받아 make_sound() 메서드를 재정의(오버라이딩)했습니다.


3. super()를 활용한 부모 클래스 접근

자식 클래스에서 부모 클래스의 메서드를 호출하고 싶을 때 super()를 사용합니다.

🔹 예제: super() 사용하기

class Animal:
    def __init__(self, name):
        self.name = name
    
    def make_sound(self):
        return "소리를 냅니다."

class Cat(Animal):
    def __init__(self, name, color):
        super().__init__(name)  # 부모 클래스의 __init__ 호출
        self.color = color
    
    def describe(self):
        return f"{self.color} 색상의 {self.name} 고양이입니다."

cat = Cat("나비", "검은색")
print(cat.describe())

🖥 실행 결과

검은색 색상의 나비 고양이입니다.

🔹 super().__init__(name)을 사용하여 부모 클래스의 생성자를 호출하고, 추가 속성을 정의했습니다.


반응형

4. 다중 상속(Multiple Inheritance)

파이썬에서는 한 클래스가 여러 부모 클래스를 상속받을 수 있습니다.

🔹 예제: 다중 상속 구현

class Flyable:
    def fly(self):
        return "날 수 있습니다."

class Bird(Animal, Flyable):  # Animal과 Flyable 모두 상속
    def make_sound(self):
        return "짹짹!"

bird = Bird("참새")
print(bird.make_sound())  # Animal로부터 상속받은 속성 사용
print(bird.fly())  # Flyable 클래스로부터 상속받은 메서드 사용

🖥 실행 결과

짹짹!
날 수 있습니다.

🔹 Bird 클래스는 Animal과 Flyable 클래스를 동시에 상속받아 두 클래스의 기능을 모두 활용합니다.


5. 다형성(Polymorphism) 이해하기

다형성은 동일한 메서드를 여러 클래스에서 다른 방식으로 구현할 수 있도록 하는 기능입니다.

🔹 예제: 다형성 활용하기

class Animal:
    def make_sound(self):
        return "소리를 냅니다."

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

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

# 다형성 적용
def make_animal_sound(animal):
    print(animal.make_sound())

animals = [Dog(), Cat(), Animal()]
for animal in animals:
    make_animal_sound(animal)

🖥 실행 결과

멍멍!
야옹!
소리를 냅니다.

🔹 같은 make_sound() 메서드지만, 클래스마다 다르게 동작합니다.


6. 추상 클래스(Abstract Class)와 인터페이스

추상 클래스는 공통된 인터페이스를 제공하며, 특정 메서드의 구현을 강제할 수 있습니다.

🔹 예제: 추상 클래스 활용하기

from abc import ABC, abstractmethod

class Animal(ABC):  # 추상 클래스 정의
    @abstractmethod
    def make_sound(self):
        pass  # 구현은 하위 클래스에서 정의

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

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

# 객체 생성
dog = Dog()
cat = Cat()
print(dog.make_sound())
print(cat.make_sound())

🖥 실행 결과

멍멍!
야옹!

🔹 ABC 클래스를 상속받아 추상 클래스를 만들었으며, @abstractmethod를 사용하여 반드시 구현해야 할 메서드를 정의했습니다.


🎯 마무리

이 글에서는 상속과 다형성을 활용하여 객체지향 프로그래밍의 강력한 기능을 배웠습니다.

  • 상속(Inheritance): 기존 클래스를 확장하여 코드 재사용성을 높임
  • 다형성(Polymorphism): 같은 메서드 이름으로 다양한 기능을 수행
  • 추상 클래스(Abstract Class): 공통 인터페이스를 제공하여 코드 구조화

다음 글에서는 캡슐화와 추상화를 더욱 깊이 다뤄보겠습니다! 🚀

 

 

 

혼자 공부하는 파이썬:1:1 과외하듯 배우는 프로그래밍 자습서 - 프로그래밍 언어 | 쿠팡

현재 별점 4.8점, 리뷰 198개를 가진 혼자 공부하는 파이썬:1:1 과외하듯 배우는 프로그래밍 자습서! 지금 쿠팡에서 더 저렴하고 다양한 프로그래밍 언어 제품들을 확인해보세요.

www.coupang.com

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

반응형

댓글