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
'파이썬(Python)' 카테고리의 다른 글
Python Day 19: PyGame 설치 및 기본 구조 - 게임 개발을 위한 첫걸음 (0) | 2025.02.25 |
---|---|
Python Day 18: OOP 종합 실습 - 객체지향 프로그래밍을 활용한 프로젝트 설계 (0) | 2025.02.20 |
Python Day 16: 파이썬 클래스 심화 - 생성자, 소멸자, 클래스 변수와 인스턴스 변수 (0) | 2025.02.15 |
Python Day 15: 파이썬 클래스와 객체 - 객체지향 프로그래밍(OOP) 기본 이해하기 (1) | 2025.02.13 |
Python Day 14: 파이썬 모듈과 패키지 - 코드 재사용성과 구조화된 개발 (0) | 2025.02.11 |