본문 바로가기
Study/클린코드

[클린코드] 10장. 클래스

by Nahwasa 2023. 1. 11.

스터디 메인 페이지

- ☆ 표시가 붙은 부분은 스터디 중 나온 얘기 혹은 제 개인적인 생각이나 제가 이해한 방식을 적어놓은 것으로, 책에서 말하고자 하는 바와 다를 수 있습니다.

- 모든 이미지의 출처는 클린 코드(로버트 C. 마틴 저) 책 입니다.

 


 

클래스를 정의하는 표준 자바 관례

  • 가장 먼저 변수 목록 - public static 상수가 있다면 맨 처음에 나온다. 다음으로 private static 변수가 나오며, 이어서 private 변수가 나온다. public 변수가 필요한 경우는 거의 없다.
  • 변수 목록 다음으로 public 함수가 나온다. 
  • private 함수는 자신을 호출하는 public 함수 직후에 넣는다.

 

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

  • 변수와 유틸리티 함수는 가능한 공개하지 않는 편이 낫지만 반드시 숨겨야 한다는 법칙도 없다.
  • 때로는 변수나 유틸리티 함수를 protected로 선언해 테스트 코드에 접근을 허용하기도 한다.

 

클래스는 작아야 한다.

  • 함수가 물리적인 행 수로 크기를 측정했다면, 클래스는 맡은 책임을 센다.
  • 클래스 이름은 해당 클래스 책임을 기술해야 한다. 간결한 이름이 떠오르지 않는다면 필경 클래스 크기가 너무 커서 그렇다.
  • 클래스 설명은 if, and, or, but을 사용하지 않고서 25단어 내외로 가능해야 한다.

 

SRP (Single Responsibility Principle)

  • 클래스나 모듈을 변경할 이유가 하나 뿐이어야 한다는 원칙이다.
  • 클래스는 책임, 즉 변경할 이유가 하나여야 한다.
  • 큰 클래스 몇 개가 아니라 작은 클래스 여럿으로 이뤄진 시스템이 더 바람직하다.

 

 ☆ OCP (Open-Closed Principle)

  • 소프트웨어 개체(클래스, 모듈, 함수 등)는 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다.
  • 확장 = 동작의 관점, 수정 = 코드의 관점
  • 확장에 대해 열려 있다 = 어플리케이션 요구사항이 변경될 때 이 변경에 맞게 새로운 ‘동작’을 추가해서 어플리케이션의 기능을 확장할 수 있다.
  • 수정에 대해 닫혀 있다 = 기존의 코드를 수정하지 않고도 어플리케이션의 동작을 추가하거나 변경할 수 있다.
  • 아무튼 확장해도 코드는 수정해야 하잖아!
  • OCP를 수용하는 코드 = 컴파일타임 의존성(코드에서 드러나는 클래스들 사이의 관계) 수정하지 않고도 런타임 의존성(실행시에 협력에 참여하는 객체들 사이의 관계)을 쉽게 변경할 수 있는 코드.

 

대다수의 시스템은 지속적인 변경이 가해진다.

 

댓글