CleanCode(클린코드) - 10장. 클래스

🔖 오늘 읽은 범위 : 10장 - 클래스



😃 책에서 기억하고 싶은 내용을 써보세요.

클래스 체계

  • 클래스를 정의하는 표준 자바 관례에 따르면, 추상화 단계가 순차적으로 내려가 아래 순서로 나온다. 프로그램은 신문 기사처럼 읽힌다.

    1. 변수 목록

      1. 정적 공개 상수가 있다면 정적 공개 상수
      2. 정적 비공개 변수
      3. 비공개 인스턴스 변수
    2. 공개 함수
    3. 비공개 함수는 자신을 호출하는 공개 함수 직후에

클래스는 작아야 한다

클래스를 만들 때 첫 번째 규칙은 크기다. 그렇다면 얼마나 작아야 하는가? 클래스가 맡은 책임을 센다.

  • 클래스 이름은 해당 클래스 책임을 기술해야 한다. 실제로 작명은 클래스 크기를 줄이는 첫 번째 관문이다.
  • 클래스명은 25단어 내외로 가능해야 한다.

단일 책임 원칙 (SRP)

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

책임 , 즉 변경할 이유를 파악하려 애쓰다 보면 코드를 추상화하기도 쉬워진다.

응집도

  • 클래스는 인스턴스 변수 수가 작아야 한다. 각 클래스 메서드는 클래스 인스턴스 변수를 하나 이상 사용해야 한다.
  • 일반적으로 메서드가 변수를 많이 사용할수록 메서드와 클래스는 응집도는 더 높다.
  • 응집도가 높아질수록 변수와 메서드를 적절히 분리해 새로운 클래스 두세 개로 쪼갠다.

변경하기 쉬운 클래스

  • 새 기능을 수정하거나 기존 기능을 변경할 때 건드릴 코드가 최소인 시스템 구조가 바람직하다.
  • 이상적인 시스템이라면 새 기능을 추가할 때 시스템을 확장할 뿐 기존 코드를 변경하지는 않는다.
  • OCP 란 클래스는 확장에 개방적이고 수정에 폐쇠적이어야 한다는 원칙이다.

변경으로부터 격리

  • 인터페이스와 추상 클래스를 사용해 구현이 미치는 영향을 격리한다.
  • 테스트가 가능할 정도로 시스템의 결합도를 낮추면 유연성과 재사용성도 더욱 높아진다.
  • 결합도가 낮다는 소리는 각 시스템 요소가 다른 요소로부터 그리고 변경으로부터 잘 격리되어 있다는 의미다.
  • 결합도를 최소로 줄이면 자연스럽게 또 다른 클래스 설계 원칙 DIP 를 따르는 클래스가 나온다.

    • 본질적으로 DIP는 클래스가 상세한 구현이 아니라 추상화에 의존해야 한다는 원칙이다.

Written by@sujin-park
항상 배우는 자세 갖추기 💻

GitHubLinkedIn