10. 클래스
더 차원 높은 단계까지 신경 쓰지 않으면 깨끗한 코드를 얻기란 어렵다.
클래스 체계
변수 목록 순서 - 정적 공개 상수 -> 정적 비공개 상수 -> 비공개 인스턴스 변수 -> 공개 변수 순으로 나옴 즉, 추상화 단계가 순차적으로 내려옴.
캡슐화
변수나 유틸리티 함수를 protected로 선언해 테스트 코드에 접근 하기도 함. 하지만 캡슐화를 풀어주는 결정은 언제나 최후의 수단이다
클래스는 작아야 한다
작게가 기본 규칙이며, 클래스는 맡은 책임이 작아야 한다. 클래스 이름은 해당 책임을 기술해야 하며, 클래스 이름이 모호한경우 클래스 책임이 너무 많아서이다.
단일 책임 원칙
SRP: 클래스나 모듈은 변경할 이유가 하나뿐이어야한다는 원칙이다. 책임, 즉 변경할 이유를 파악하려 애쓰다 보면 코드를 추상화하기도 쉬워진다. 큰 클래스 몇개가 아니라 작은 클래스 여럿으로 이뤄진 시스템을 만들자.
응집도
클래스는 인스턴스 변수 수가 작아야 하며, 메서드가 변수를 더 많이 사용할 수록 메서드와 클래스는 응집도가 더 높다. 응집도가 높은 클래스는 가능하지도 바람직하지도 않다.
응집도를 유지하면 작은 클래스 여럿이 나온다.
클래스가 응집력을 잃는다면 쪼개라
변경하기 쉬운 클래스
깨끗한 시스템은 클래스를 체계적으로 정리해 변경에 수반하는 위험을 낮춘다. 새 기능을 수정하거나 기존 기능을 변경할 때 건드릴 코드가 최소인 시스템 구조가 바람직하다. 테스트가 가능할 정도로 시스템의 결합도를 낮추면 유연성과 재사용성도 더욱 높아진다. 결합도가 낮다는 소리는 각 시스템 요소가 다른 요소로부터 그리고 변경으로부터 잘 격리되어있다는 의미다. 결합도를 최소로 줄이면 dip를 따르는 클래스가 나온다. (DIP는 클래스가 상세한 구현이 아니라 추상화에 의존해야 한다는 원칙이다)
#노개북 #노마드코더 #개발자북클럽