메서드 오버라이딩 다시 살펴보기
Coddy Python 여정의 Object Oriented Programming 섹션에 포함된 레슨 — 64개 중 23번째.
다형성(Polymorphism)은 "여러 가지 형태"를 의미하며, 서로 다른 클래스의 객체가 동일한 메서드 호출에 대해 서로 다르게 반응할 수 있도록 합니다. 메서드 오버라이딩(Method overriding)이 이를 가능하게 합니다.
다음은 메서드가 있는 부모 클래스입니다:
class Animal:
def speak(self):
return "Animal makes a sound"동일한 메서드를 오버라이드하는 자식 클래스를 생성합니다:
class Dog(Animal):
def speak(self):
return "Woof!"
class Cat(Animal):
def speak(self):
return "Meow!"
class Cow(Animal):
def speak(self):
return "Moo!"각 자식 클래스는 speak()의 자체 구현을 제공합니다.
다양한 동물들의 리스트를 만듭니다:
animals = [Dog(), Cat(), Cow(), Animal()]모든 객체에서 동일한 메서드를 호출합니다:
for animal in animals:
print(animal.speak())출력:
Woof!
Meow!
Moo!
Animal makes a sound이것은 다형성이 실제로 작동하는 모습입니다. 동일한 메서드 호출이 객체의 실제 타입에 따라 다르게 동작합니다.
함수와 함께 다형성을 사용할 수도 있습니다:
def make_animal_speak(animal):
print(animal.speak())
dog = Dog()
cat = Cat()
make_animal_speak(dog) # 멍멍!
make_animal_speak(cat) # 야옹!함수는 어떤 종류의 동물을 받는지 알 필요가 없습니다. 단지 speak()를 호출하기만 하면 적절한 동작을 수행하게 됩니다.
핵심 포인트: 다형성(Polymorphism)을 사용하면 공통 인터페이스를 통해 서로 다른 객체를 동일한 방식으로 처리할 수 있습니다. 메서드 오버라이딩(Method overriding)은 서로 다른 구현을 제공하며, 다형성은 이를 일관되게 호출할 수 있게 해줍니다. 이를 통해 코드가 더 유연해지고 확장하기 쉬워집니다.
챌린지
중급이 챌린지에서는 차량 상속 시스템을 구현하게 됩니다.
다음 파일들을 수정해야 합니다:
vehicle.py: 제조사(make)/모델(model) 속성과 메서드를 가진 기본Vehicle클래스를 구현합니다.car.py:Vehicle을 상속받는Car클래스를 생성합니다.motorcycle.py:Vehicle을 상속받는Motorcycle클래스를 생성합니다.truck.py:Vehicle을 상속받는Truck클래스를 생성합니다.
각 파일에는 구현을 단계별로 안내하는 상세한 TODO 주석이 포함되어 있습니다. 파일 간에 필요한 import 문에 주의하고 상속 관계를 따르세요. driver.py 파일에는 모든 차량 유형에서 구현이 올바르게 작동하는지 확인하는 테스트 케이스가 포함되어 있습니다.
치트 시트
다형성(Polymorphism)은 메서드 오버라이딩을 통해 서로 다른 클래스의 객체들이 동일한 메서드 호출에 대해 서로 다르게 반응할 수 있도록 합니다.
메서드를 가진 부모 클래스를 생성합니다:
class Animal:
def speak(self):
return "Animal makes a sound"자식 클래스들이 동일한 메서드를 오버라이드합니다:
class Dog(Animal):
def speak(self):
return "Woof!"
class Cat(Animal):
def speak(self):
return "Meow!"서로 다른 객체들에서 동일한 메서드를 호출합니다:
animals = [Dog(), Cat(), Animal()]
for animal in animals:
print(animal.speak()) # 각기 다른 출력을 인쇄합니다함수와 함께 다형성을 사용합니다:
def make_animal_speak(animal):
print(animal.speak())
make_animal_speak(Dog()) # Woof!
make_animal_speak(Cat()) # Meow!다형성을 사용하면 공통 인터페이스를 통해 서로 다른 객체들을 동일한 방식으로 다룰 수 있어, 코드를 더 유연하고 확장하기 쉽게 만들어 줍니다.
직접 해보기
from vehicle import Vehicle
from car import Car
from motorcycle import Motorcycle
from truck import Truck
def vehicle_info(vehicle):
return f"{vehicle.make} {vehicle.model}: {vehicle.start()}, Efficiency: {vehicle.fuel_efficiency()} mpg"
# 다양한 차량으로 테스트 - 이 테스트 코드를 수정하지 마세요
vehicles = [
Car("Toyota", "Camry"),
Motorcycle("Harley", "Davidson"),
Truck("Ford", "F-150"),
Vehicle("Generic", "Vehicle")
]
for v in vehicles:
print(vehicle_info(v))이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.