인터페이스 분리 원칙
Coddy의 Clean Code - Python으로 더 나은 코드 작성하기 코스 레슨 — 28개 중 25번째.
"하나의 범용 인터페이스보다 여러 개의 클라이언트 특화 인터페이스가 더 낫다."
인터페이스는 객체가 수행할 수 있는 행동에 대한 설명입니다.
인터페이스 분리 원칙은 인터페이스가 응집도 측면에서 가능한 한 작아야 함을 명시합니다. 다시 말해, 인터페이스는 오직 한 가지 일만 수행해야 합니다.
나쁜 예시를 살펴보고 이를 수정해 보겠습니다.
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def walk(self):
pass
@abstractmethod
def swim(self):
pass이것은 여러 책임을 가진 인터페이스입니다!
그리고 이를 구현할 때 문제가 발생할 것입니다.
class Frog(Animal):
def walk(self):
print("Walking")
def swim(self):
print("Swimming")
class Giraffe(Animal):
def walk(self):
print("Walking")
def swim(self):
raise Exception("Girrafe cannot swim!")보시다시피 이 인터페이스는 걷기와 수영을 모두 할 수는 없는 동물들과는 호환되지 않습니다!
챌린지
쉬움Walkable 및 Swimable 클래스를 구현하여 위의 예제를 수정해 봅시다. 새로운 클래스들을 구현하는 Frog 및 Giraffe 클래스가 제공됩니다.
작업:
- 하나의 추상 함수
walk(self)만 가지는 추상 클래스Walkable을 생성하세요. - 하나의 추상 함수
swim(self)만 가지는 추상 클래스Swimable을 생성하세요.
제공된 코드를 변경하지 마세요!
이제 각 인터페이스가 하나의 책임만 가지며 원칙을 따르고 있음에 주목하세요.
직접 해보기
from abc import ABC, abstractmethod
# Enter you code here
class Frog(Walkable, Swimable):
def walk(self):
print("Walking")
def swim(self):
print("Swimming")
class Giraffe(Walkable):
def walk(self):
print("Walking")
if __name__ == "__main__":
animal_type = input()
if animal_type == "frog":
animal = Frog()
animal.walk()
animal.swim()
elif animal_type == "giraffe":
animal = Giraffe()
animal.walk()
print("not Swimming")