파이썬 완전 초보 탈출 13강!
이번 강의에서는 객체지향 프로그래밍(OOP)의 핵심 기능인 **상속**과 **다형성**에 대해 알아봅니다. 이 두 개념은 코드 재사용성과 확장성을 극대화하는 기능으로, 실제 프로젝트나 협업 환경에서도 매우 중요한 역할을 합니다.
이제 클래스만 잘 만들어도 프로그램이 훨씬 간결하고 유연해질 수 있어요. 그럼 하나씩 차근차근 살펴봅시다.
👪 상속(Inheritance)이란?
상속은 기존 클래스(부모 클래스)의 기능을 물려받아 새로운 클래스(자식 클래스)를 만드는 기능입니다.
기존 기능은 그대로 쓰고, 필요한 부분만 추가하거나 수정할 수 있어요.
📌 기본 구조
“`python
class 부모클래스:
…
class 자식클래스(부모클래스):
…
“`
✅ 예제: 동물 클래스를 상속한 고양이 클래스
“`python
class Animal:
def speak(self):
print(“동물이 소리를 냅니다”)
class Cat(Animal):
def meow(self):
print(“야옹~”)
nabi = Cat()
nabi.speak() # Animal의 메서드
nabi.meow() # Cat의 메서드
“`
✅ 생성자 상속하기
“`python
class Person:
def __init__(self, name):
self.name = name
class Student(Person):
def __init__(self, name, grade):
super().__init__(name) # 부모 생성자 호출
self.grade = grade
s = Student(“지우”, 3)
print(s.name)
print(s.grade)
“`
`super()`를 사용하면 부모 클래스의 메서드나 생성자를 호출할 수 있습니다.
💡 상속은 단일 상속만 가능 (부모는 하나) – 다중 상속은 가능하지만 권장되지 않음
🔁 다형성(Polymorphism)이란?
다형성은 **같은 메서드 이름으로 다양한 동작을 수행하는 것**입니다.
즉, 같은 이름의 메서드라도 클래스에 따라 다르게 동작할 수 있도록 만드는 기술입니다.
✅ 예제: 여러 동물이 각자 다른 소리를 내게 하기
“`python
class Animal:
def sound(self):
print(“…소리 없음…”)
class Dog(Animal):
def sound(self):
print(“멍멍”)
class Cat(Animal):
def sound(self):
print(“야옹”)
animals = [Dog(), Cat(), Animal()]
for a in animals:
a.sound() # 각각 클래스에 맞는 메서드가 호출됨
“`
🎯 메서드 오버라이딩
부모 클래스의 메서드를 자식 클래스에서 **덮어쓰기** 할 수 있습니다. 이를 **오버라이딩**이라고 합니다.
“`python
class Parent:
def show(self):
print(“부모 클래스”)
class Child(Parent):
def show(self):
print(“자식 클래스”)
c = Child()
c.show() # “자식 클래스”
“`
🧠 실전 예제: 여러 은행 계좌 유형 구현
“`python
class BankAccount:
def __init__(self, name):
self.name = name
self.balance = 0
def deposit(self, amount):
self.balance += amount
def withdraw(self, amount):
self.balance -= amount
class SavingAccount(BankAccount):
def withdraw(self, amount):
print(“적금 계좌는 출금이 제한됩니다.”)
class NormalAccount(BankAccount):
def withdraw(self, amount):
if self.balance >= amount:
self.balance -= amount
print(f”{amount}원 출금. 잔액: {self.balance}”)
else:
print(“잔액 부족”)
accounts = [SavingAccount(“예금”), NormalAccount(“일반”)]
for acc in accounts:
acc.deposit(10000)
acc.withdraw(3000)
“`
✨ 팁: isinstance() 로 객체 타입 확인하기
“`python
print(isinstance(s, Student)) # True
print(isinstance(s, Person)) # True
“`
📌 오늘의 요약
– 상속: 부모 클래스의 기능을 자식 클래스가 물려받음
– super()를 이용해 부모 생성자나 메서드 호출 가능
– 다형성: 같은 이름의 메서드가 클래스에 따라 다르게 동작
– 오버라이딩: 자식 클래스에서 메서드를 재정의
📚 다음 강의 예고
14강: 파이썬 표준 라이브러리 제대로 쓰기 – 시간, 날짜, 통계, 파일 관리까지
다음 시간에는 파이썬이 기본으로 제공하는 강력한 도구, 표준 라이브러리를 체계적으로 다뤄봅니다. 실무에서도 가장 자주 쓰이는 기능들로 꽉 찬 강의가 될 거예요!
—
이 강의는 파이썬 완전 초보자를 위한 연재 시리즈입니다. 매주 새로운 강의로 업데이트됩니다.