728x90
반응형
클래스
클래스 체계
클래스에서 static, public 변수는 위에
다음으로 private 변수 마지막으로 private object 가 나와야 한다.
클래스의 변수와 메소드는 가능한 공개하지 않는 편이 좋지만 때로는 접근을 허용해야 하는 경우가 있다. 따라서 그런 경우에는 protected 로 하거나 패키지내 공개 해야 한다.
하지만 가능한 그렇지 않게 작성 해야 한다.
클래스 이름
이름은 해당 클래스의 책임을 기술해야 한다.(명사로)
간결한 이름이 떠올리지 않는다면 책임이 많을 확률이 높다.
단일 책임 원칙(Single Responsibility Principle)
단일 책임 원칙은 모듈을 변경할 이유가 단 하나뿐이어야 한다는 원칙.
매우 지키기 쉽지만 많은 개발자들이 안지키는 원칙이다.
어떤 개발자는 클래스가 많아지면 이해하기 어려워 진다고 말하며 걱정한다.
하지만 작은 클래스가 많든 큰 클래스가 많든 큰 시스템은 원래 이해하기 어렵다.
큰 시스템의 복잡성을 체계적으로 다루기 위해서 정리가 필요한 것이다.
변경 전
class Excel(object):
def create_excel(self):
pass
def read_excel(self):
pass
def parse_data(self):
pass
변경 후
class ExcelCreater(object):
def create_excel(self):
pass
class ExcelReader(object):
def read_excel(self):
pass
class ExcelParser(object):
def parse_data(self):
pass
응집도
클래스는 인스턴스 변수 수가 적어야 한다.
각 메소드는 클래스 인스턴스 변수를 하나 이상 사용해야 한다.
일반적으로 메소드가 인스턴스 변수를 더 많이 사용 할수록 메소드와 클래스는 응집도가 높다. 모든 인스턴스 변수를 메소드마다 사용한다면 응집도가 가장 높은 경우이다.
응집도가 높은 클래스는 바람직 하지 않지만 많은 개발자들이 응집도가 높은 클래스를 작성한다. 응집도가 높다는 말은 변수와 메소드가 서로 논리적으로 묶여 있다는 의미이기 때문이다.
아래는 클래스의 응집도가 매우 높은 케이스다.
class Stack(object):
_top_of_stack = 0
_elements = []
def size(self) -> int:
return self._top_of_stack
def push(self, element):
self._top_of_stack += 1
self._elements.append(element)
def pop(self):
if self._top_of_stack == 0:
raise StackIsEmpty()
element = self._elements.pop(self._top_of_stack)
self._top_of_stack -= 1
return element
728x90
반응형
'IT > Clean Code' 카테고리의 다른 글
[Clean Code] 11-1 Concern (0) | 2021.09.06 |
---|---|
[Clean Code] 10-2 응집도 (0) | 2021.09.06 |
[Clean Code] 9-3 깨끗한 테스트 (0) | 2021.09.06 |
[Clean Code] 9-2 도메인 특화 테스트 (0) | 2021.09.06 |
[Clean Code] 9-1 TDD (0) | 2021.09.06 |