티스토리 뷰
10장 클래스
1. 클래스는 작아야 한다
- 173p- 176p 예제 확인
2. 단일 책임 원칙(Single Responsibility Principle) : 클래스나 모듈을 변경할 이유가 하나뿐이어야 한다
- 큰 클래스 몇 개가 아니라 작은 클래스 여럿으로 이뤄진 시스템이 더 바람직하다.
- 작은 클래스는 각자 맡은 책임이 하나, 변경할 이유도 하나이며 다른 작은 클래스와 협력해 시스템에 필요한 동작을 수행한다
3. 응집도
-179p-184p 예제확인
4. 변경하기 쉬운 클래스
-186p-188p 예제확인
11장 시스템
전에 스프링 강을 들을 때, 관심사 분리에 대한 내용을 배웠던거랑 비슷한 내용 같다.
근데 책으로 보려니까 이해안가는 부분들이 좀 많아서 몇 번 더 읽어 봐야 될듯
1. 시스템 제작과 시스템 사용을 분리하라
- Main분리, 팩토리, 의존성 주입
2. 자바 프록시
3. 순수 자바 AOP 프레임워크
4. Aspect J 관점
5. 테스트 주도 시스템 아키텍처 구축
6. 의사결정을 최적화하라
7. 명백한 가치가 있을 때 표준을 현명하게 사용하라
8. 시스템은 도메인 특화 언어가 필요하다
12장 창발성
켄트백은 다음 규칙을 따르면 설계는 '단순하다'라고 말한다
- 모든 테스트를 실행한다
- 중복을 없앤다
- 프로그래머 의도를 표현한다
- 클래스와 메서드 수를 최소로 줄인다
1. 단순한 설계규칙1 : 모든 테스트를 실행하라
- 테스트가 가능한 시스템을 만들려고 애쓰면 설계 품질이 더붙어 높아진다.
테스트 케이스가 많을수록 개발자는 테스트가 쉽게 코드를 작성한다. 따라서 철저한 테스트가 가능한 시스템을 만들면 더 나은 설계가 얻어진다
2. 단순한 설계규칙 2~4 : 리팩터링
- 코드와 클래스를 정리
3. 중복을 없애라
- 218p 예제처럼 일부 코드가 동일하면, 공통적인 코드를 새 메서드로 만들어 사용
- 템플릿 메서드(TEMPLATE METHOD)패턴은 고차원 중복을 제거할 목적으로 자주 사용
* 템플릿 메서드(TEMPLATE METHOD)패턴 : 어떤 작업을 처리하는 일부분을 서브 클래스로 캡슐화해 전체 일을 수행하는 구조는 바꾸지 않으면서, 특정 단계에서 수행하는 내역을 바꾸는 패턴
즉, 전체적으로는 동일하면서 부분적으로는 다른 구문으로 구성된 메서드의 코드 중복을 최소화 할 때 유용하다.
다른 관점에서 보면 동일한 기능을 상위 클래스에서 정의하면서 확장/변화가 필요한 부분만 서브 클래스에서 구현할 수 있도록 한다.
출처 : https://gmlwjd9405.github.io/2018/07/13/template-method-pattern.html
템플릿 메서드 패턴 예시 :
public class VacationPolicy {
public void accrueUSDivisionVacation() {
//지금까지 근무한 시간을 바탕으로 휴가 일수를 계산하는 코드
//...
//휴가 일수가 미국 최소 법정 일수를 만족하는지 확인하는 코드
//..
//휴가 일수를 급여 대장에 저굥하는 코드
//...
}
public void accrueUEDivisionVacation() {
//지금까지 근무한 시간을 바탕으로 휴가 일수를 계산하는 코드
//...
//휴가 일수가 유럽연합 최소 법정 일수를 만족하는지 확인하는 코드
//..
//휴가 일수를 급여 대장에 저굥하는 코드
//...
}
}
최소 법정 일수를 계산하는 코드만 제외하면 두 메서드는 거의 동일하다
여기에 템플릿 매서드 패턴을 적용하여 눈에 들어오는 중복 제거
abstract public class VacationPolicy{
public void accrueVacation(){
calculateBaseVacationHours();
alterForLegalMinimums();
applyToPayroll();
}
private void calculateBaseVacationHours(){/*...*/}
abstract protected void alterForLegalMinimums();
private void applyToPayroll(){/*...*/}
}
public class USVacationPolicy extends VacationPolicy{
@Override protected void alterForLegalMinimums(){
//미국 최소 법정일수 사용
}
}
public class EUVacationPolicy extends VacationPolicy{
@Override protected void alterForLegalMinimums(){
//유럽연합 최소 법정일수 사용
}
}
4. 표현하라
- 좋은 이름을 선택한다
- 함수와 클래스 크기를 가능한 줄인다
- 표준 명칭을 사용한다
- 단위 테스트 케이스를 꼼꼼히 작성한다
5. 클래스와 메서드 수를 최소로 줄여라
- 규칙 네개 중, 우선순위가 가장 낮음. 즉, 클래스와 함수 수를 줄이는 작업도 중요하지만 테스트 케이스를 만들고 중복을 제거하고 의도를 표현하는 작업이 더 중요
'책 > 클린코드' 카테고리의 다른 글
클린코드 14장 (0) | 2021.12.28 |
---|---|
클린코드 13장 (0) | 2021.12.27 |
클린코드 7~9장 (0) | 2021.12.23 |
클린코드 4장 - 주석 (0) | 2021.07.22 |
클린코드 - 3장 함수 (0) | 2021.07.14 |
- Total
- Today
- Yesterday