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
- 릿코드
- python 알고리즘
- 파이썬 알고리즘
- 파이썬릿코드풀기
- 파이썬릿코드
- leetcode풀기
- leetcode 풀기
- 파이썬알고리즘
- 릿코드 파이썬
- leetcode풀이
- 상가수익률계산기
- 알고리즘풀이
- python Leetcode
- 릿코드 풀기
- python priority queue
- 파이썬 릿코드
- python xor
- python 릿코드
- python sorted
- 파이썬 알고리즘 풀기
- python zip_longest
- LeetCode
- 알고리즘풀기
- 잇츠디모
- 파이썬알고리즘풀기
- 릿코드풀이
- binary search
- 릿코드풀기
- 코틀린기초
- 파이썬 프로그래머스
Archives
- Today
- Total
소프트웨어에 대한 모든 것
[디자인패턴][SOLID] 단일 책임 원칙 본문
반응형
객체는 단 하나의 책임만 가져야 한다는 원칙
단일 책임 원칙 목적
- 클래스를 변경하는 이유는 단 하나여야 한다.
- 응집력이 높고 강력한 classes, methods, functions을 생성한다.
- 클래스 composition(구성) 사용 촉진
- 코드 중복을 피함
단일 책임 원칙 위반 악취
- 한 클래스가 너무 많은 책임을 가지고 있다.
- 책임을 제대로 식별하지 않고 여러 클래스에 흩뿌려 놓는 것 또한 문제가 있다
Person 클래스 예제를 살펴 보겠습니다.
class Person:
def __init__(self,name):
self.name = name
def __repr__(self):
return f'name={self.name}'
@classmethod
def save(cls, person):
print(f'save the {person} to the database')
Person 클래스는 두 가지 역할을 합니다.
- Person's의 기본 정보 관리
- Person 정보를 DB에 저장
나중에, Person 객체를 DB가 아닌 file 형태로 저장해야 한다면 save() 함수를 수정해야 합니다. 이것은 Person 객체의 변경을 의미합니다.
Person 클래스가 단일 책임 원칙을 따르도록 하려면, Person 정보를 DB에 저장하는 역할을 하는 새로운 클래스를 생성해야 합니다.
class Person:
def __init__(self,name):
self.name = name
def __repr__(self):
return f'name={self.name}'
class PersonDB:
def save(self, person):
print(f'save the {person} to the database')
if __name__ == '__main__':
p = Person('James')
db = PersonDB()
db.save(p)
응집도 : 하나의 클래스가 하나의 기능(책임)을 온전히 순도 높게 담당하고 있는 정도
결합도 : 클래스 간의 서로 다른 책임들이 얽혀 있어서 상호의존도가 높은 정도
위의 디자인은 Person 클래스를 두 개의 클래스로 분리 하였습니다. (Person, PersonDB)
- Person: Person's properties를 관리
- PersonDB: Person 정보를 DB에 저장
위 디자인에서 Person 정보를 다른 곳에 저장하는 요구 사항이 발생하면 어떨까요? 그 역할을 하는 다른 클래스를 추가하면 됩니다. 더 이상 Person 클래스를 수정 할 필요는 없습니다.
요약
- 모든 클래스는 단 한 가지의 책임만 갖는다.
- 클래스 안에 정의되어 있는 모든 기능은 하나의 책임을 수행하는데 집중되어야 한다.
- 하나의 클래스로 너무 많은 일을 하지 말고 딱 한 가지 책임만 수행하라!
함께 보면 좋은 글:
https://www.pythontutorial.net/python-oop/python-single-responsibility-principle/
https://medium.com/@learnstuff.io/single-responsibility-principle-ad3ae3e264bb
반응형
'시스템 설계 및 디자인 > 객체지향 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