인터페이스 분리 원칙
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!")보시다시피 이 인터페이스는 walk와 swim을 할 수 없는 동물과는 호환되지 않습니다!
챌린지
쉬움Walkable 및 Swimable class를 구현하여 위의 예제를 수정해 봅시다. 새로운 class를 구현하는 Frog 및 Giraffe class가 주어져 있습니다.
작업:
- 추상 class
Walkable을 만들고,walk(self)추상 함수 하나만 포함하도록 합니다. - 추상 class
Swimable을 만들고,swim(self)추상 함수 하나만 포함하도록 합니다.
주어진 코드를 변경하지 마세요!
이제 각 인터페이스가 하나의 책임만 가지며 원칙 을 따른다는 점에 유의하세요.
직접 해보기
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")
Clean Code - Python으로 더 나은 코드 작성하기의 모든 레슨
직접 연습해 보세요: 온라인 Python 컴파일러