티스토리 뷰

책/클린코드

클린코드 10~12장

먹태 2021. 12. 24. 22:48

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