Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 릿코드 파이썬
- leetcode풀기
- 파이썬알고리즘풀기
- 파이썬 프로그래머스
- 알고리즘풀이
- binary search
- leetcode 풀기
- python Leetcode
- 코틀린기초
- 파이썬알고리즘
- 파이썬릿코드
- 알고리즘풀기
- 파이썬 알고리즘
- 파이썬 알고리즘 풀기
- python xor
- python sorted
- LeetCode
- 상가수익률계산기
- python 알고리즘
- python zip_longest
- 릿코드풀이
- leetcode풀이
- 파이썬릿코드풀기
- 파이썬 릿코드
- 릿코드풀기
- 릿코드
- python 릿코드
- 잇츠디모
- python priority queue
- 릿코드 풀기
Archives
- Today
- Total
소프트웨어에 대한 모든 것
[디자인패턴][SOLID] 인터페이스 분리 원칙 본문
반응형
인터페이스 분리 원칙 (Interface Segregation Principle)
OOP에서 인터페이스는 object가 반드시 가져하는 methods의 집합입니다. 파이썬은 abstract classes를 인터페이스로 사용합니다. 인터페이스 분리 원칙에 따르면 인터페이스는 가능한 작게 만들며 한 가지만 수행해야 합니다.
인터페이스 분리 원칙을 통해 시스템의 내부 의존성을 약화시켜서 리팩토링, 수정, 재배포를 쉽게 할 수 있습니다.
인터페이스 분리 원칙 예제
운송수단 aircraft, car 클래스가 있다고 합시다.
이 둘의 추상 클래스 vehicle를 만듭니다.
from abc import ABC, abstractmethod
class Vehicle(ABC):
@abstractmethod
def go(self):
pass
@abstractmethod
def fly(self):
pass
class Aircraft(Vehicle):
def go(self):
print('Taxiing')
def fly(self):
print('Flying')
class Car(Vehicle):
def go(self):
print('Going')
def fly(self):
raise Exception('not supported')
위 디자인의 문제는 Car 클래스는 Vehicle 클래스를 상속 받았기 때문에 fly() 메소드를 반드시 구현해야 합니다. fly() 메소드는 Car에게 전혀 필요가 없습니다. 그렇기 때문에 이 디자이는 인터페이스 분리 원칙을 위반하였습니다.
인터페이스 분리 원칙을 지키기 위해서 Vehicle 클래스를 작은 작은 클래스로 나누고 이를 Aircraft와 Car 클래스에서 상속 받도록 디자인을 변경하겠습니다.
from abc import ABC, abstractmethod
class Movable(ABC):
@abstractmethod
def go(self):
pass
class Flyable(Movable):
@abstractmethod
def fly(self):
pass
class Aircraft(Flyable):
def go(self):
print('Taxiing')
def fly(self):
print('Flying')
class Car(Movable):
def go(self):
print('Going')
위 디자인에서 Car 클래스는 go() 함수만 구현하면 됩니다. 불필요한 fly()는 더 이상 사용하지도 않습니다.
요약
- 인터페이스는 최대한 작게
- 클라이언트별로 세분하된 인터페이스를 만들고, 클라이언트가 사용하지 않는 인터페이스를 강제로 구현하면 안 됨
참고 자료:
반응형
'시스템 설계 및 디자인 > 객체지향 SOLID' 카테고리의 다른 글
[디자인패턴][SOLID] 의존성 역전 법칙 (0) | 2022.03.24 |
---|---|
[디자인패턴][SOLID] 리스코프 치환 원칙 (0) | 2022.03.23 |
[디자인패턴][SOLID] 개방/폐쇄 원칙 (0) | 2022.03.23 |
[디자인패턴][SOLID] 단일 책임 원칙 (0) | 2022.03.23 |
[디자인패턴] 객체 지향 5대 원칙 SOLID (0) | 2022.03.23 |
Comments