아래는 이전 노트에서 봤던 주행 시뮬레이터가 갖춰야 할 조건들이다.
첫 번째 조건을 보니 주행 시뮬레이터를 만들려면 일단 각 교통 수단을 나타내는 클래스가 필요할 것 같다. 일단 첫 번째 조건에 제시된
를 나타낼 3가지 클래스를 만들어야 한다.
그런데 이 3가지 클래스에 다형성
을 적용하고 싶다.
다형성
을 적용하기 위해서는 추상 클래스
가 필요하다.
이 3가지 클래스의 공통점을 묶어서 추상 클래스
로 만들면 다형성
을 적용할 수 있다.
3가지 클래스의 공통점은 뭘까? 바로 "교통 수단"이라는 점이다. "교통 수단"을 나타내는 추상 클래스
를 만들면 된다.
Vehicle
이라는 이름으로 추상 클래스
를 만들어보겠다.
Vehicle
클래스는 어떤 메서드를 가져야할까?
주행 시뮬레이터가 갖춰야할 두 번째 조건과 세 번째 조건을 보면 알 수 있다.
과제를 풀기 위해 필요한 조건을 직접 설명하면,
start
) -> 추상 메서드
로 정의하라stop
) -> 일반 메서드로 정의하라_speed
를 갖도록 유도하는 추상
getter
메서드(speed
)
지금 메서드 이름을 괄호 안에 제시해두었다.
괄호 안에 있는 이름으로 Vehicle
추상 클래스
의 메서드를 정의하라.
결국 Vehicle
클래스를 기준으로 다형성
을 적용하려면,
Vehicle
추상 클래스
를 만들고Vehicle
클래스를 상속
받은 후, 추상 메서드
를 오버라이딩
하면 된다.
일단 이번 과제에서는 Vehicle
추상 클래스
만 만들어보자.
이때, 주행 정지 메서드(stop
)는 추상 메소드
가 아니라 구현 내용이 있는 일반 메서드로로 정의해보라
stop
메서드는 변수 _speed
의 값을 0으로 설정하는 내용을 가지면 된다.
from abc import ABC, abstractmethod
class Vehicle(ABC):
@abstractmethod
def start(self):
"""추상 메소드 start: 교통 수단의 주행을 시작한다"""
pass
@property
@abstractmethod
def speed(self):
"""변수 _speed(교통 수단의 속도)에 대한 추상 getter 메소드"""
pass
def stop(self):
"""일반 메소드 stop: 교통 수단의 속도를 0으로 바꾼다"""
self.speed = 0