1. 상속(Inheritance)의 개념
1.1 상속이란 무엇인가
상속(Inheritance)은 객체지향 프로그래밍의 중요한 개념 중 하나로, 부모 클래스(상위 클래스)의 속성과 메서드를 자식 클래스(하위 클래스)가 물려받는 것을 의미합니다. 상속을 통해 코드의 재사용성을 높이고, 새로운 클래스 정의를 효율적으로 할 수 있습니다.
1.2 부모 클래스와 자식 클래스의 개념
- 부모 클래스: 속성과 메서드를 자식 클래스에게 물려주는 기본 클래스입니다.
- 자식 클래스: 부모 클래스로부터 속성과 메서드를 상속받는 클래스입니다.
1.3 상속의 기본 문법 (class 자식클래스(부모클래스):
)
Python에서 상속을 구현하려면 자식 클래스 선언 시 부모 클래스를 괄호 안에 명시합니다.
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
return f"{self.name}이 소리를 냅니다."
class Dog(Animal): # Dog 클래스는 Animal 클래스를 상속받음
def bark(self):
return f"{self.name}이 짖습니다."
# 객체 생성
my_dog = Dog("Buddy")
print(my_dog.speak()) # 출력: Buddy이 소리를 냅니다.
print(my_dog.bark()) # 출력: Buddy이 짖습니다.
1.4 부모 클래스의 메서드를 자식 클래스에서 재정의 (오버라이딩)
메서드 오버라이딩은 부모 클래스의 메서드를 자식 클래스에서 다시 정의하는 것을 의미합니다. 이를 통해 자식 클래스는 부모 클래스의 메서드를 자신만의 방식으로 재정의할 수 있습니다.
class Animal:
def speak(self):
return "동물이 소리를 냅니다."
class Cat(Animal):
def speak(self): # 부모 클래스의 speak 메서드를 재정의
return "고양이가 야옹합니다."
# 객체 생성
my_cat = Cat()
print(my_cat.speak()) # 출력: 고양이가 야옹합니다.
2. 다중 상속
2.1 다중 상속이란 무엇인가
다중 상속(Multiple Inheritance)은 자식 클래스가 여러 부모 클래스로부터 상속을 받는 것을 의미합니다. 즉, 하나의 자식 클래스가 두 개 이상의 부모 클래스를 물려받아 그들의 속성과 메서드를 사용할 수 있습니다.
2.2 다중 상속의 문법과 주의사항
다중 상속은 클래스 선언 시 여러 부모 클래스를 쉼표로 구분하여 나열합니다.
class A:
def method_a(self):
print("A의 메서드")
class B:
def method_b(self):
print("B의 메서드")
class C(A, B): # 다중 상속
pass
# 객체 생성
c = C()
c.method_a() # 출력: A의 메서드
c.method_b() # 출력: B의 메서드
주의사항: 다중 상속 시, 부모 클래스들 간에 동일한 이름의 메서드가 있을 경우 메서드 탐색 순서(Method Resolution Order, MRO)가 중요합니다. MRO는 왼쪽에서 오른쪽으로 부모 클래스들을 탐색합니다.
2.3 super()
를 활용한 부모 클래스의 초기화
super()
는 자식 클래스에서 부모 클래스의 메서드를 호출하는 데 사용됩니다. 다중 상속에서도 super()
를 사용해 부모 클래스의 생성자를 명시적으로 호출할 수 있습니다.
class Animal:
def __init__(self, name):
self.name = name
class Mammal:
def __init__(self, warm_blooded):
self.warm_blooded = warm_blooded
class Dog(Animal, Mammal):
def __init__(self, name, warm_blooded):
Animal.__init__(self, name)
Mammal.__init__(self, warm_blooded)
# 객체 생성
dog = Dog("Buddy", True)
print(f"이름: {dog.name}, 온혈: {dog.warm_blooded}")
2.4 다중 상속 예제
class Flyer:
def fly(self):
print("날 수 있습니다.")
class Swimmer:
def swim(self):
print("수영할 수 있습니다.")
class Duck(Flyer, Swimmer): # 다중 상속
pass
duck = Duck()
duck.fly() # 출력: 날 수 있습니다.
duck.swim() # 출력: 수영할 수 있습니다.
3. 다형성(Polymorphism)과 OOP 활용
3.1 다형성의 개념과 중요성
다형성(Polymorphism)은 같은 메서드가 다양한 객체에서 다르게 동작할 수 있는 성질을 말합니다. 다형성은 객체의 타입에 관계없이 동일한 방식으로 메서드를 호출할 수 있지만, 각 객체가 해당 메서드를 자신만의 방식으로 구현할 수 있도록 합니다.
3.2 메서드 오버라이딩을 활용한 다형성
class Animal:
def speak(self):
return "동물이 소리를 냅니다."
class Dog(Animal):
def speak(self):
return "강아지가 멍멍!"
class Cat(Animal):
def speak(self):
return "고양이가 야옹!"
animals = [Dog(), Cat()]
for animal in animals:
print(animal.speak())
# 출력:
# 강아지가 멍멍!
# 고양이가 야옹!
3.3 추상 클래스 소개
추상 클래스는 메서드의 구체적인 구현을 제공하지 않고, 서브 클래스에서 반드시 구현해야 하는 메서드를 정의하는 클래스입니다. 추상 클래스는 abc
모듈의 ABC
클래스를 상속받아 사용합니다.
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def speak(self):
pass
class Dog(Animal):
def speak(self):
return "강아지가 멍멍!"
# 추상 클래스는 인스턴스를 만들 수 없습니다.
# animal = Animal() # 오류 발생
dog = Dog()
print(dog.speak()) # 출력: 강아지가 멍멍!
3.4 상속과 다형성을 활용한 실제 예제: 동물 클래스와 다양한 동물들
class Animal(ABC):
@abstractmethod
def sound(self):
pass
class Dog(Animal):
def sound(self):
return "멍멍!"
class Cat(Animal):
def sound(self):
return "야옹!"
class Cow(Animal):
def sound(self):
return "음매!"
animals = [Dog(), Cat(), Cow()]
for animal in animals:
print(animal.sound())
# 출력:
# 멍멍!
# 야옹!
# 음매!
'python' 카테고리의 다른 글
11편 Python 기초 문법: 파일 및 디렉토리 다루기 (1) | 2024.11.15 |
---|---|
10편 Python 기초 문법: 내장 함수와 람다 함수 (0) | 2024.11.14 |
8편 Python 객체지향 프로그래밍 (OOP) 기초 (2) | 2024.11.13 |
7편 Python 기초 문법: 예외 처리 (0) | 2024.11.13 |
6편 Python 기초 문법: 파일 입출력 (0) | 2024.11.12 |