Menu
Coddy logo textTech

인터페이스 분리 원칙

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을 할 수 없는 동물과는 호환되지 않습니다!

challenge icon

챌린지

쉬움

WalkableSwimable class를 구현하여 위의 예제를 수정해 봅시다. 새로운 class를 구현하는 FrogGiraffe 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 컴파일러