[Clean Code] 10-1 클래스

2021. 9. 6. 00:04·IT/Clean Code
반응형

클래스

클래스 체계

클래스에서 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
  • [Clean Code] 10-2 응집도
  • [Clean Code] 9-3 깨끗한 테스트
  • [Clean Code] 9-2 도메인 특화 테스트
상쾌한기분
상쾌한기분
  • 상쾌한기분
    상쾌한기분
    상쾌한기분
  • 전체
    오늘
    어제
    • 분류 전체보기 (250)
      • Python (44)
        • Python (26)
        • Django (6)
        • Flask (4)
        • Open Source (6)
      • Kotlin & Java (5)
        • Spring (2)
        • 프로젝트 (1)
      • Go (11)
      • Database (24)
        • MySQL (21)
        • Redis (3)
      • Infrastructure (2)
        • CDC (4)
        • Kafka (5)
        • Prometheus (2)
        • Fluentd (11)
        • Docker (1)
        • Airflow (2)
        • VPN (2)
      • IT (25)
        • AI (9)
        • Langchain (8)
        • Web (18)
        • Git (8)
        • 리팩토링 (9)
        • Micro Service Architecture (8)
        • Clean Code (16)
        • Design Pattern (0)
        • 수학 (1)
        • 알고리즘 (14)
      • OS (14)
        • Centos (10)
        • Ubuntu (3)
        • Mac (1)
      • Search Engine (2)
        • ElasticSearch (1)
        • Lucene Solr (1)
      • PHP (2)
        • Laravel (1)
        • Codeigniter (1)
  • 블로그 메뉴

    • Github 방문
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    python
    git
    Langchain
    Kafka
    오블완
    백준
    Redis
    fluentd
    Golang
    LLM
    docker
    http
    파이썬
    go
    MYSQL
    티스토리챌린지
    prompt
    performance
    ollama
    CDC
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
상쾌한기분
[Clean Code] 10-1 클래스
상단으로

티스토리툴바