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!")

보시다시피 이 인터페이스는 걷기와 수영을 모두 할 수는 없는 동물들과는 호환되지 않습니다!

challenge icon

챌린지

쉬움

WalkableSwimable 클래스를 구현하여 위의 예제를 수정해 봅시다. 새로운 클래스들을 구현하는 FrogGiraffe 클래스가 제공됩니다.

작업:

  • 하나의 추상 함수 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")
			

Clean Code - Python으로 더 나은 코드 작성하기의 모든 레슨