• 클래스 체계

    • 표준자바 관례에 따르면 가장 먼저 변수 목록이 나온다
    • static , public 상수가 있다면 맨 처음 나온다.
    • 다음 private 변수가 나오며 이어서 비공개 인스턴스 변수가 나온다.
    • 변수 목록 다음에는 공개 함수가 나온다.
    • 비공개 함수는 자신을 호출하는 공개 함수 직후에 넣는다.
    • 즉 추상화 단계가 순차적으로 내려간다.
    • 그래서 프로그램은 신문 기사처럼 읽힌다.
  • 캡슐화

    • 변수와 유틸리티 함수는 가능한 공개하지 않는 편이 낫지만
    • 반드시 숨겨야 한다는 법칙도 없다.
    • 떄로는 protected로 선언해 테스트코드에 접근을 허용하기도 한다.
    • 같은 패키지 안에서 테스트코드가 함수를 호출하거나 변수를 사용해야 한다면
    • 그 함수나 변수를 protected로 선언하거나 패키지 전체로 공개한다.
    • 하지만 그전에 비공개 상태를 유ㅜ지할 온갖 방법을 강구한다.
    • 캡슐화를 풀어주는 결정은 언제나 최후의 수단이다.
  • 클래스는 작아야 한다.

    • 작아야 이해하기가 쉽고

    • 작아야 짜기도 쉽다.

    • 클래스가 작아야 한다는 기준은 책임 이다.

    • 클래스 이름은 해당 클래스 책임을 적어야 한다.

    • 작명은 클래스의 책임을 줄이는 첫번째 관문이다.

    • 간결한 이름이 떠오르지 않는다면 클래스의 책임이 많은것이다. 나눠라

    • 클래스 설명은 if , and , or , but 을 사용 하지않고서 25단어 내외로 가능해야 한다.

    • 단일책임원칙 ( SRP )

      • 말그대로 클래스는 책임이 하나여야 된다.
    • 응집도

      • 클래스는 인스턴스 변수의 수가 적어야 한다.

      • 일반적으로 메서드가 변수를 더 많이 사용할수록 메서드와 클래스는 응집도가 높다.

      • 함수를 작게, 매개변수 목록을 짧게

      • 라는 전략을 따르다보면 때떄로 몇몇 메서드만이 사용하는 인스턴스 변수가 아주 많아진다.

      • 이때는 새로운 클래스로 쪼개야 된다는 신호.

      • 응집도가 높아지도록 변수와 메서드를 적절히 분리해 새로운 클래스로 쪼갠다

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

      • 몇몇 함수만 사용하는 인스턴스 변수가 늘어난다면

      • 쪼개라 따로 클래스로 쪼개버려라

      • 이렇게 큰함수를 작은함수로 쪼개다보면 작은 클래스 여럿으로 쪼개지게 되는데

      • 이러면 프로그램에 점점 더 체계가 잡히고 구조가 투명해진다.

      • 가장 먼저 원래 프로그램의 정확한 동작을 검증하는 테스트 코드를 작성

      • 그런 다음 한번에 하나씩 수차례에 걸쳐 조금씩 코드를 변경

      • 코드를 변경할때마다 테스트를 수행해 원래 프로그램과 동일하게 동작하는지 확인했다.

      • 조금씩 원래 프로그램을 정리한 결과 최종 프로그램이 얻어졌다.

    • 변경하기 쉬운 클래스

      • 깨끗한 시스템은 클래스를 체계적으로 정리해 소스 변경시 일어나는 의도대로 동작하지 않을 위험을 낮춘다.

      • 클래스에 손을 대는 순간 설계를 개선하려는 고민과 시도가 필요.

      • 클래스를 분리 시킴으로써 SRP와 OCP 두가지 장점을 취한다.

      • 메인기능 클래스를 따로 빼서 나머지 기능 클래스들이 그 기능을 상속받아 오버라이딩 한다. ( OCP )

      • 확장에 개방적이고 수정에 폐쇄적인 구조가 생성된다.

    • 변경으로부터 격리

      • 상세한 구현에 의존하는 코드는 개념이 바뀌면 위험에 빠진다.
      • 시스템의 결합도를 낮추면 유연성과 재사용성도 더욱 높아진다.
      • 결합도가 낮다는 소리는 각 시스템 요소가 다른 요소로부터 격리되어 있다는 의미

'book > 클린코드' 카테고리의 다른 글

13장 동시성  (0) 2021.01.05
12장 - 창발성  (0) 2021.01.03
9장 - 단위 테스트  (0) 2020.12.02
8장 - 경계  (0) 2020.11.30
7장 - 오류처리  (0) 2020.11.27

+ Recent posts