어떤 클래스를 어느 컴포넌트에 위치시킬지를 결정해줌
- 릴리즈 절차를 통해 추적관리를 하고, 릴리즈 번호를 부여하여 컴포넌트를 재사용하세요
- 동일한 시점에 변경되는 컴포넌트들을 묶어라
- 다른 시점에 다른 이유로 변경되는 컴포넌트들은 분리해라
- 클래스, 모듈을 어느 컴포넌트에 위치시킬지 결정할 때 도움이 됨
- 같이 재사용되는 경향이 있는 클래스와 모듈들을 같은 컴포넌트에 포함시킨다.
컴포넌트 사이의 관계를 설명한다.
- 컴포넌트는 의존성 그래프에 순환이 있어서는 안된다.
- 개발자가 여러명일 경우..
👉 나는 잘 돌아가는 코드를 올렸지만 다른 사람이 겹치는 부분을 수정해 버린 경우 내 코드도 안돌아 갈 가능성이 높음(숙취 증후군)
👉 이 문제를 해결하기 위해서 "독립된 컴포넌트"를 만들자.
👉 독립된 컴포넌트들은 쌍방으로 의존하면 안되고, 역으로 의존해서도 안된다.
👉 **의존성 비순환 법칙**
- 실제로는 개발을 할 때 바로 컴포넌트 단위로 나눌 수 없다. 유지보수의 중요성이 커지고 변동성이 걱정이 되었을 때 적용하게 됨.
- 즉, 의존성 구조는 코드를 짤 때 바로 적용하는 것이 아니라, 시스템의 논리적 설계, 즉 시스템이 성장하면서 같이 변경되어야 한다.
- 안정성 : “쉽게 움직이지 않는” 모듈에 의존하도록 하자
- 안정성은 어떻게 측정하는가?
- 컴포넌트로 들어고 나가는 의존성의 개수를 세어봄
- I = (Fan-out / (Fan-in + Fan-out))
- 0과 가까워질수록 의존성이 없음
- 모든 컴포넌트가 안정적일 필요는 없음
- 컴포넌트는 안정된 정도만큼만 추상화되어야 한다.
- 고수준 아키텍쳐, 정책은 반드시 안정된 컴포넌트에 위치해야 한다.
→ 이렇게 되면 그 정책을 포함하는 소스코드는 수정하기가 어려워진다,,
- 그래서 나온게 OCP(개방폐쇄원칙) → 추상클래스를 만들어라!
- 추상화 측정하기
- A = Na / Nc (Na : 추상클래스 및 인터페이스 개수 Nc : 클래스 개수)
- 0이면 추상클래스가 하나도 없다. 1이면 오로지 추상클래스만 포함한다.
- 1일수록 안정적
👉 I : 0일수록 안정적, A : 1일수록 안정적
- (0,0) → 고통의 구역, 안정적이지만 구체적이다. 뻣뻣한 상태
- (1,1) → 쓸모없는 구역, 최고로 추상적이지만 아무도 의존하지 않는다.
- 이 두 구역을 벗어나서 주계열 근처로 가야한다.