Book Review - Clean Architecture

책 리뷰 - Clean Architecture

1부. 소개

1장 설계와 아키텍처란?

2장 두가지 가치에 대한 이야기

가치 1. 행위(Behavior)

행위(Behavior) < 아키텍처(Architecture) : 아키텍처가 후순위가 되면 시스템 개발비용↑, 혹은 기능변경이 불가능 해 질 수도

2부. 벽돌부터 시작하기: 프로그래밍 패러다임

3장. 패러다임 개요

4장. 구조적 프로그래밍

* 분기, 반복(if, while)이라는 단순 제어 + 순차 실행 (sequential execution) ➢ 특별한 장점
                    ⍒
  복잡한 요구사항을 더 작은 기능 단위로 분해.
  대규모 시스템 → 모듈과 컴포넌트 → 입증 할 수 있는 아주 작은 기능으로 세분화
                    ⍒
테스트를 통해 버그가 없음을 증명 ➢ 안정적인 서비스 제공

5장. 객체지향 프로그래밍

6장. 함수형 프로그래밍

3부. 설계 원칙

SOLID 원칙

7장. SRP: 단일 책임 원칙

8장. OCP: 개방-폐쇄 원칙

9장. LSP: 리스코프 치환 원칙

10장. ISP: 인터페이스 분리 원칙

11장. DIP: 의존성 역전 원칙

추상 인터페이스에 변경이 생기면 이를 구체화한 구현체들도 따라서 수정해야 한다. 반대로 구체적인 구현체에 변경이 생기더라도 그 구현체가 구현하는 인터페이스는 항상, 좀 더 정확히 말하면 대다수의 경우 변경될 필요가 없다. 따라서 인터페이스는 구현체보다 변동성이 낮다.

의존성 관리를 위해 추상 팩토리(Abstract Factory) 패턴 사용

4부. 컴포넌트 원칙

12장. 컴포넌트

13장. 컴포넌트 응집도

14장. 컴포넌트 결합

  1. SDP : 안정된 의존성 원칙
    • 안정성의 방향으로 (더 안정된 쪽에) 의존한다. (안정성 : 쉽게 움직이지 않는 상태)
    • SDP를 준수하면 변경하기 어려운 모듈이 변경하기 쉽게 만들어진 모듈에 의존하지 않도록 만들 수 있다.
    I(불안정성) = Fan out / (Fan in + Fan out)
      I = 0 : 최고로 안정된 컴포넌트 (변경이 쉽다)
      I = 1 : 최고로 불안정한 컴포넌트 (변경 어려움)

    Fan in : 안으로 들어오는 의존성. 내부 클래스에 의존하는 컴포넌트 외부의 클래스 갯수
    Fan out : 바깥으로 나가는 의존성. 컴포넌트 외부의 클래스에 의존하는 컴포넌트 내부의 클래스 갯수

  1. AD(안정된 추상화 원칙)
    • 컴포넌트는 안정된 정도 만큼만 추산되어야 한다. → 안정성과 추상화 사이의 관계 정의
     A = Na / Nc
       A = 0 : 추상 클래스가 하나도 없음
       A = 1 : 추상 클래스만 포함
     
     Na : 컴포넌트의 추상 클래스와 인터페이스의 개수
     Nc : 컴포넌트의 클래스 개수
 

     D 거리 = | A + I - 1 |
       0에 가까울 수록 주계열 근처.
  

5부. 아키텍처

15장. 아키텍처란?

16장. 독립성

17장. 경계: 선긋기

18장. 경계해부학

19장. 정책과 수준

20장. 업무규칙

21장. 소리치는 아키텍처

22장. 클린 아키텍처

23장. 프레젠터와 험블 객체

24장. 부분적 경계

25장. 계층과 경계

26장. 메인(Main) 컴포넌트

27장. ‘크고 작은 모든’ 서비스들

28장. 테스트 경계

29장. 클린 임베디드 아키텍처