클린코드 10 - 클래스

yesjm·2024년 4월 26일
0

클린코드를 읽자

목록 보기
10/13

클래스 체계

  • 변수 목록 -> 정적 공개 상수 -> 정적 비공개 변수 -> 비공개 인스턴스 변수 -> 공개 함수 -> 비공개 함수는 자신을 호출하는 공개 함수 직후에 넣는다
  • 추상화 단계가 순차적으로 내려간다.

클래스는 작아야 한다

  • 클래스도 함수와 마찬가지로 '작게'가 기본 규칙이다.
  • 함수는 물리적인 행 수로 크기를 측정했다면 클래스는 맡은 책임을 센다.
  • 클래스 이름은 해당 클래스 책임을 기술해야 한다.

단일 책임 원칙 SRP(Single Responsibility Principle)

  • 클래스나 모듈을 변경할 이유가 단 하나뿐이어야 한다는 원칙
  • 큰 클래스 몇 개가 아니라 작은 클래스 여럿으로 이뤄진 시스템이 더 바람직하다.
  • 작은 클래스는 각자 맡은 책임이 하나며, 변경할 이유가 하나며, 다른 작은 클래스와 협력해 시스템에 필요한 동작을 수행한다.

응집도 Cohesion

  • 클래스는 인스턴스 변수 수가 작아야 한다.
  • 각 클래스 메서드는 클래스 인스턴스 변수를 하나 이상 사용해야 한다.
  • 메서드가 변수를 더 많이 사용할수록 메서드와 클래스는 응집도가 더 높다.
  • 몇몇 메서드만이 사용하는 인스턴스 변수가 많아지면 새로운 클래스로 쪼개야 한다는 신호다

응집도를 유지하면 작은 클래스 여럿이 나온다

  • 클래스가 응집력을 잃는다면 쪼개라
  • 클래스를 쪼개다 보면 프래그램에 점점 더 체계가 잡히고 구조가 투명해진다.

변경하기 쉬운 클래스

  • 대다수 시스템은 지속적인 변경이 가해진다.
  • 깨끗한 시스템은 클래스를 체계적으로 정리해 변경에 수반하는 위험을 낮춘다.
  • OCP(Open-Closed Principle): 확장에 개방적이고 수정에 폐쇄적이어야 한다는 원칙
  • 이상적인 시스템이라면 새 기능을 추가할 때 시스템을 확장할 뿐 기존 코드를 변경하지는 않는다.

변경으로부터 격리

  • 시스템 요소가 서로 잘 격리되어 있으면 각 요소를 이해하기도 더 쉬워진다.
  • 결합도를 최소로 줄이면 자연스럽게 DIP를 따르는 클래스가 나온다.
  • DIP (Dependency Inversion Principle): 클래스가 상세한 구현이 아니라 추상화에 의존해야 한다는 원칙
profile
yesjm's second brain

0개의 댓글