클린코드

[DAY 16] 클린 코드 TIL - 10장. 클래스

lado 2022. 2. 8. 23:13

🔖 오늘 읽은 범위 : 10장, 클래스 (p.170 ~ p.178)


😀 책에서 기억하고 싶은 내용

  • 클래스 체계

    • 정적 공개 상수 → 정적 비공개 변수 → 비공개 인스턴스 변수 → 공개 함수 → 비공개 함수

    • 공개 변수가 필요한 경우는 거의 없다.

    • 추상화 단계가 순차적으로 내려간다.

    • 프로그램은 신문기사처럼 읽힌다.

  • 캡슐화를 풀어주는 결정은 언제나 최후의 수단이다.

    • 같은 패키지 안에서 테스트 코드가 함수를 호출하거나 변수를 사용해야 한다면 그 함수나 변수를 protected로 선언하거나 패키지 전체로 공개한다. 하지만 그 전에 비공개 상태를 유지할 온갖 방법을 강구한다.

  • 클래스는 작아야 한다.

  • 작명은 클래스 크기를 줄이는 첫 번째 관문이다.

    • 간결한 이름이 떠오르지 않는다면 클래스 크기가 너무 큰 것이다.

    • 클래스 이름이 모호하다면 클래스 책임이 너무 많은 것이다.

    • 클래스 이름에 Processor, Manager, Super 등과 같이 모호한 단어가 있다면 클래스에다 여러 책임을 떠안겼다는 증거다.

    • 클래스 설명은 ‘만일’, ‘그리고’, ‘하며’, ‘하지만’을 사용하지 않고서 25단어 내외로 가능해야 한다.

  • 단일 책임 원칙Single Responsibility Principle, SRP

    • 클래스나 모듈을 변경할 이유는 단 하나뿐이어야 한다.

    • 도구 상자를 어떻게 관리하고 싶은가? 작은 서랍을 많이 두고 기능과 이름이 명확한 컴포넌트를 나눠 넣고 싶은가? 아니면 큰 서랍 몇 개를 두고 모두를 던져 넣고 싶은가?

    • 작은 클래스는 각자 맡은 책임이 하나며, 변경할 이유가 하나며, 다른 작은 클래스와 협력해 시스템에 필요한 동작을 수행한다.

  • 응집도

    • 클래스는 인스턴스 변수 수가 작아야 한다.
    • 일반적으로 메서드가 변수를 더 많이 사용할수록 메서드와 클래스는 응집도가 더 높다.
    • 때때로 몇몇 메서드만이 사용하는 인스턴스 변수가 아주 많아진다. 이는 십중팔구 새로운 클래스로 쪼개야 한다는 신호다.

🤔 오늘 읽은 소감은?

  • 클래스에도 체계가 있다는 것을 처음 알았다.
  • 객체지향 프로그래밍은 내부 변수를 숨기는 것을 중요시하는 것 같다.
  • 그동안 모호한 이름을 많이 써서 반성했다.
  • 서랍 비유가 굉장히 와닿았다.

🧐 궁금한 내용이 있거나, 잘 이해되지 않는 내용

  • 인스턴스 변수 수를 줄여서 응집도를 높인다는 이야기가 이해가 잘 안됐다.

📌 소감 3줄 요약

  • 캡슐화를 풀어주는 결정은 언제나 최후의 수단이다.
  • 클래스나 모듈을 변경할 이유는 단 하나뿐이어야 한다.
  • 클래스는 인스턴스 변수 수가 작아야 한다.