본문 바로가기
  • NerdCodX Blog
파이썬(Python)

Python Day 17: 파이썬 상속과 다형성 - 객체지향 프로그래밍(OOP) 심화 학습

by NerdCodeX 2025. 2. 18.

1. 상속과 다형성이란?

 

안녕하세요! 오늘은 객체지향 프로그래밍(OOP)의 중요한 개념인 **상속(Inheritance)**과 **다형성(Polymorphism)**에 대해 배워보겠습니다. 상속을 활용하면 기존 클래스를 확장하여 새로운 클래스를 만들 수 있으며, 다형성을 이용하면 같은 인터페이스로 다양한 동작을 수행할 수 있습니다. 이번 강의에서는 상속의 개념과 메서드 오버라이딩을 배우고, 실습을 통해 동물 클래스를 확장하여 다양한 동물 클래스를 구현해 보겠습니다.


2. 상속의 개념과 구현

상속(Inheritance)란?

  • 기존 클래스를 재사용하여 새로운 클래스를 만드는 기법.
  • **부모 클래스(Parent Class)**의 속성과 메서드를 **자식 클래스(Child Class)**에서 사용할 수 있음.

기본적인 상속 구현

class Animal:  # 부모 클래스
    def __init__(self, name):
        self.name = name
    
    def make_sound(self):
        return "소리를 냅니다."

class Dog(Animal):  # 자식 클래스
    def bark(self):
        return "멍멍!"

# 객체 생성
dog = Dog("바둑이")
print(dog.name)  # 부모 클래스 속성 사용
print(dog.make_sound())  # 부모 클래스 메서드 사용
print(dog.bark())  # 자식 클래스의 메서드 사용

 

출력:

바둑이
소리를 냅니다.
멍멍!

 

부모 클래스의 메서드 확장 (super())

  • super()를 사용하면 부모 클래스의 메서드를 호출할 수 있습니다.
class Cat(Animal):
    def __init__(self, name, color):
        super().__init__(name)  # 부모 클래스의 __init__() 호출
        self.color = color
    
    def make_sound(self):
        return "야옹~"

cat = Cat("나비", "흰색")
print(cat.name)  # 부모 클래스 속성
print(cat.color)  # 자식 클래스에서 추가한 속성
print(cat.make_sound())  # 메서드 오버라이딩

 

출력:

나비
흰색
야옹~

3. 메서드 오버라이딩

메서드 오버라이딩이란?

  • 자식 클래스에서 부모 클래스의 메서드를 재정의하여 동작을 변경할 수 있음.

예제 1: 메서드 오버라이딩

class Bird(Animal):
    def make_sound(self):  # 부모 클래스의 메서드를 재정의
        return "짹짹!"

bird = Bird("참새")
print(bird.make_sound())  # 짹짹!

 

메서드 오버라이딩과 super() 활용

  • 부모 클래스의 기능을 유지하면서 추가 기능을 덧붙일 수도 있음.

예제 2: super()로 부모 메서드 호출

class Parrot(Animal):
    def make_sound(self):
        return super().make_sound() + " 앵무새입니다!"

parrot = Parrot("코코")
print(parrot.make_sound())

 

출력:

소리를 냅니다. 앵무새입니다!

 


4. 실습: 동물 클래스와 상속 구현

문제 설명

  • Animal 클래스를 기본으로 다양한 동물 클래스를 만들고, 상속과 오버라이딩을 적용하세요.

코드

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

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

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

class Cow(Animal):
    def make_sound(self):
        return "음매~"

# 동물 객체 생성
animals = [Dog("바둑이"), Cat("나비"), Cow("초롱이")]
for animal in animals:
    print(f"{animal.name}: {animal.make_sound()}")

 

출력 예시

바둑이: 멍멍!
나비: 야옹!
초롱이: 음매~

 


5. 실습 과제

1. 자동차 클래스 만들기

  • Car 클래스를 만들고, ElectricCar 클래스를 상속하여 전기차 전용 기능을 추가하세요.
class Car:
    def drive(self):
        return "일반 자동차 주행 중..."

class ElectricCar(Car):
    def drive(self):
        return "전기 자동차 주행 중..."

2. 직원 클래스 만들기

  • Employee 클래스를 만들고, Manager 클래스를 상속하여 추가 속성을 정의하세요.
class Employee:
    def __init__(self, name, salary):
        self.name = name
        self.salary = salary

class Manager(Employee):
    def __init__(self, name, salary, team_size):
        super().__init__(name, salary)
        self.team_size = team_size

 


 

 

오늘 강의에서는 객체지향 프로그래밍(OOP)의 핵심 개념인 상속과 다형성을 배웠습니다. 상속을 활용하면 기존 클래스를 확장하여 코드의 재사용성을 높일 수 있고, 다형성을 통해 같은 메서드를 다양한 방식으로 구현할 수 있었습니다.

이러한 개념들은 더 효율적이고 유지보수하기 쉬운 프로그램을 설계하는 데 필수적인 요소입니다. 실습을 통해 직접 부모 클래스를 확장하고, 메서드를 오버라이딩하여 다형성을 구현해 보며, 객체지향 프로그래밍의 강력함을 체험해 보세요.

다음 강의에서는 객체지향 개념을 종합적으로 활용하여 실전 프로젝트를 진행하겠습니다.

 

🚀 궁금한 점이나 피드백이 있다면 댓글로 남겨주세요. 여러분의 학습을 응원합니다! 😊

 

 

 

Python Day 16: 파이썬 클래스 심화 - 생성자, 소멸자, 클래스 변수와 인스턴스 변수

1. 클래스 심화 개념 소개안녕하세요! 오늘은 객체지향 프로그래밍(OOP)의 중요한 개념 중 하나인 생성자(__init__)와 소멸자(__del__), 클래스 변수와 인스턴스 변수에 대해 알아보겠습니다. 클래스를

nerdcodex.tistory.com

 

 

 

Python Day 15: 파이썬 클래스와 객체 - 객체지향 프로그래밍(OOP) 기본 이해하기

1. 클래스와 객체란? 안녕하세요! 오늘은 **객체지향 프로그래밍(Object-Oriented Programming, OOP)**의 핵심 개념인 **클래스(Class)와 객체(Object)**에 대해 배워보겠습니다. 객체지향 프로그래밍은 코드를

nerdcodex.tistory.com

 

 

 

Python Day 14: 파이썬 모듈과 패키지 - 코드 재사용성과 구조화된 개발

1. 모듈과 패키지란? 안녕하세요! 오늘은 파이썬의 강력한 기능 중 하나인 **모듈(Module)과 패키지(Package)**를 배워보겠습니다. 파이썬에서 모듈과 패키지를 사용하면 코드를 재사용하고 프로젝트

nerdcodex.tistory.com