본문 바로가기
WEB/Clean Code

[Clean Code] 10장. 클래스

by IT황구 2022. 2. 23.
728x90
반응형

10장. 클래스

클래스 체계

  • 변수 목록이 가장 먼저 나온다
    • 우선순위 정리
    • (static, public 상수) → ( private 변수 ) → ( 비공개 인스턴스 )
  • 공개함수
    • 비공개 함수는 공개 함수 직후에 넣는다
  • 추상화 단계가 순차적으로 내려간다. 그래서 프로그램은 신문 기사 처럼 읽힌다.

캡슐화

  • 변수와 유틸리티 함수는 최대한 공개하지 않는게 좋다. 하지만 반드시 숨겨야 할 이유도 없다
  • 만약 같은 패키지 안에서 TC가 함수를 호출하거나, 변수를 사용해야 한다면, protected로 선언하거나, 패키지 전체로 공개한다
  • 캡슐화를 풀어주는 결정은 언제나 최후의 수단이다

클래스는 작아야 한다

  • 클래스를 만들때 가장 중요한것은 크기 이다. 작은것이 가장 중요하다!
  • 함수는 물리적인 행의 수
  • 클래스는 맡은 책임 의 수가 최대한 적어야 한다
    • 클래스의 이름을 간결하게 기술할 수 있어야 한다.
    • 이게 힘들다면, 슈퍼 클래스처럼 맡은 책임이 많을 확률이 높다.

단일 책임 원칙(SRP)

  • 재사용성 증가
  • 클래스나 모듈을 변경할 이유가 하나, 단 하나뿐 이어야 한다는 원칙이다.
  • 책임 이라는 개념을 정의하며 적절한 클래스 크기를 제시한다.
public class SuperDashboard extends JFrame implements MetaDataUser {
    public Component getLastFocusedComponent()
    public void setLastFocused(Component lastFocused)
    public int getMajorVersionNumber()
    public int getMinorVersionNumber()
    public int getBuildNumber() 
}
책임이 매우 많다. 버전 번호도 바뀌고, 포커스가 닿은 컴포넌트에 접근하는 방법도 제공한다.
public class Version {
    public int getMajorVersionNumber() 
    public int getMinorVersionNumber() 
    public int getBuildNumber()
}
Version이라는 독자적인 클래스를 생성해서, 단일책임을 만든다.
  • 큰 클래스 몇개가 아니라, 작은 클래스 여럿으로 이뤄진 시스템이 더 바람직하다.

응집도 (Cohesion)

  • 클래스는 인스턴스 변수의 수가 작아야 한다.

  • 각 클래스 메서드는 클래스 인스턴스 변수를 하나 이상 사용해야 한다.

    • 모든 인스턴스 변수를 메서드마다 사용하는 클래스는 응집도가 가장 높다.

      public class Stack {
        private int topOfStack = 0;
        List<Integer> elements = new LinkedList<Integer>();
      
        public int size() { 
            return topOfStack;
        }
      
        public void push(int element) { 
            topOfStack++; 
            elements.add(element);
        }
      
        public int pop() throws PoppedWhenEmpty { 
            if (topOfStack == 0)
                throw new PoppedWhenEmpty();
            int element = elements.get(--topOfStack); 
            elements.remove(topOfStack);
            return element;
        }
      }
      
      // 응집도가 높은 클래스의 예
      size를 제외하고 두 메서드는 두 변수를 모두 사용한다.
  • 함수를 작게, 매개변수 목록을 짧게 를 따르다보면, 몇몇 메서드만이 사용하는 인스턴스 변수가 많아지게 된다.

    • 새로운 클래스로 쪼개야 한다는 신호이다.
    • 응집도가 높아지도록 변수와 메서드를 적절히 분리해 새로운 클래스 두세 개로 쪼개준다.
  • 응집도를 유지하면 작은 클래스 여럿이 나온다.

    • 큰 함수를 작은 함수 여럿으로 나누기만 해도 클래스 수가 많아진다.
    • 응집도를 높이려면, 메서드들이 인스턴스 변수를 최대한 고르게 사용하도록 분리하자.

결합도 (Coupling)

  • 결합도는 낮추는것이 좋다
  • 결합도가 낮다는건, 유연성과 재사용성이 더욱 높아진다.
  • 다른 시스템과의 격리수준을 말한다
  • 결합도를 최소로 줄이면, 또 다른 클래스 설계 원칙인 DIP(Dependecy iversion principle)을 따르는 클래스가 나온다. DIP는 클래스가 상세한 구현이 아니라 추상화에 의존해야한다는 뜻이다.
728x90
반응형

'WEB > Clean Code' 카테고리의 다른 글

[Clean Code] 12장. 창발성  (0) 2022.02.24
[Clean Code] 11장. 시스템  (0) 2022.02.24
[Clean Code] 9장. 단위테스트  (0) 2022.02.23
[Clean Code] 8장. 경계  (0) 2022.02.22
[Clean Code] 7장. 오류처리  (0) 2022.02.21