반응형
목표: 깨끗한 클래스 만들기
Class should be small
클래스 체계 / encapsulation
- 클래스 항목의 순서

- 캡슐화
- public으로 선언된 변수는 거의 없음
- 변수와 유틸리티 함수는 가능한 공개하지 않기
- 테스트를 위해 protected/default로 선언하는 경우는 있음
클래스는 작아야 한다, 최소의 책임!
- 클래스의 역할을 and, if, or, but을 사용하지 않고 25 단어 내외로 설명할 수 있어야
단일 책임 원칙(Single Responsibility Principle; SRP)
- 변경해야 하는 이유가 하나뿐이어야 한다. -> 수정 이유가 같은 것들을 묶는다. -> 유지보수를 쉽게!
- 작은 클래스 여러 개가 큰 클래스 하나보다 낫다.
- 다른 작은 클래스와 협력하여 동작하도록
응집도(cohesion of class)
- 클래스는 인스턴스 변수의 수가 적어야 한다.
- 메서드가 인스턴스 변수를 더 많이 사용할수록 메서드와 클래스는 응집도가 높다.
- 응집력을 잃는다면 클래스를 분리하라(응집도를 유지하면 작은 클래스가 여러 개 나온다).
- 함수를 작게, 매개변수 목록을 짧게
쪼개라
변경하기 쉬운 클래스(가 되도록 쪼개라) | 변경으로부터 격리(시키기 위해 쪼개라) |
새 기능을 수정하거나 기존 기능을 변경할 때 건드릴 코드가 최소가 되게끔 | 다른 기능은 보존 |
특정 함수에서만 사용하는 private 메서드가 있다면 쪼갤 신호 | 결합도를 낮춰 테스트 코드 작성을 용이하게 |
한 클래스에 너무 많은 책임이 있지 않도록 | 변경이 심하거나 외부에 영향을 받는 로직은 추상적인 개념을 분리해 인터페이스(추상클래스)로 분리한다음 테스트 클래스를 만들어서 테스트 |
쪼개야 할 클래스의 예시로 clean code의 저자는 아래를 보여준다.


Sql은 추상 클래스로 분리하고 각각의 책임들을 클래스로 분리했다. 이로써 얻을 수 있는 이점은:
- 함수 하나를 수정했다고 다른 함수가 망가질 위험이 사라짐
- 테스트 코드로 구석구석 증명하기도 쉬워짐
- 새로운 기능인 Update를 추가하고 싶다면 Sql을 상속하는 UpdateSql 클래스를 생성하면 손쉽게 추가할 수 있음
- OCP
클래스를 쪼개다 보면 (자연스레) 객체지향의 특징인 SOLID를 갖출 수 있다.
- 기존 기능을 변경할 때 시스템을 확장할 뿐 기존 코드를 변경하지 않는다.
- OCP(Open-Closed Principle) 개방-폐쇄 원칙:
- 확장에 대해 열려있고 수정에 대해서는 닫혀있어야 한다는 원칙
- 변경으로부터 격리; 결합도를 낮추면 유연성과 재사용성이 높아진다.
- DIP(Dependency Inversion Principle) 의존 역전 원칙:
- 고수준 모듈은 저수준 모듈의 구현에 의존해서는 안 되며, 저수준 모듈이 고수준 모듈에서 정의한 추상 타입에 의존해야 한다는 것(추상화에 의존해야 한다)
참고) SOLID(객체 지향 설계)

728x90
반응형
'개발 > 도서 스터디' 카테고리의 다른 글
자바와 Junit을 활용한 실용주의 단위 테스트 4장 (0) | 2023.07.24 |
---|---|
clean architecture #12, 13, 14 (0) | 2023.05.07 |
clean architecture #1, 2 (0) | 2023.04.07 |
cleancode #15, Junit들여다보기 (0) | 2022.12.28 |
cleancode #6, 객체와 자료구조 (0) | 2022.09.28 |