메인 시퀀스로부터의 거리(Distance from the Main Sequence)는 아키텍처 구조를 평가하는 여러 메트릭 중 하나입니다. 이는 불안정도(instability)추상도(abstractness) 를 이용해 계산되므로, 두 개념을 먼저 이해하는 것이 중요합니다.

추상도 (Abstractness)

추상도는 모듈 내의 추상 아티팩트(abstract artifact)구상 아티팩트(concrete artifact) 의 비율을 나타내며, 구현 대비 추상화 정도를 측정합니다. 추상 아티팩트에는 추상 클래스나 인터페이스가 포함되며, 구상 아티팩트는 일반 클래스(구현체)를 의미합니다. 추상도를 계산하는 공식은 다음과 같습니다:

$$ A = \frac{\sum m^a}{\sum m^c} $$

여기서:

  • \(\sum m^a\): 모듈 내 추상 요소(인터페이스 또는 추상 클래스)의 총합
  • \(\sum m^c\): 모듈 내 구상 요소(일반 클래스)의 총합

추상도의 값은 0에서 1 사이에 위치하며, 1에 가까울수록 해당 모듈이 완전히 추상적임을 의미합니다. 예를 들어, 5,000 라인의 코드를 모두 main() 메서드에 구현한 애플리케이션은 구상 요소만 포함하고 있으므로 추상도는 0에 가깝습니다.

불안정도 (Instability)

불안정도는 코드의 변동 가능성(volatility)을 나타내며, 원심 커플링(efferent coupling)과 구심 커플링(afferent coupling)의 비율로 계산됩니다. 공식은 다음과 같습니다:

$$ I = \frac{C^e}{C^a + C^e} $$

여기서:

  • \(C^e\): 원심 커플링(다른 코드 아티팩트로 유출되는 의존성의 수)
  • \(C^a\): 구심 커플링(다른 코드 아티팩트로부터 유입되는 의존성의 수)

불안정도의 값 역시 0에서 1 사이에 위치하며, 값이 1에 가까울수록 해당 모듈이 외부 의존성이 많아 변동 가능성이 높음을 의미합니다. 예를 들어, 여러 클래스를 호출하는 클래스는 호출된 메서드 중 하나라도 변경될 경우 해당 클래스가 영향을 받을 가능성이 높아 불안정도가 높다고 볼 수 있습니다.

메인 시퀀스로부터의 거리 (Distance from the Main Sequence)

메인 시퀀스로부터의 거리는 불안정도와 추상도를 결합하여 계산되며, 다음 공식을 사용합니다:

$$ D = |A + I - 1| $$

여기서:

  • \(A\): 추상도
  • \(I\): 불안정도

이 값은 항상 0에서 1 사이에 위치하며, 값이 작을수록 해당 모듈이 이상적인 균형 상태에 가까움을 나타냅니다. 이를 시각적으로 표현하면 다음과 같은 그래프가 됩니다:

  • x축: 불안정도 (\(I\))
  • y축: 추상도 (\(A\))
  • 메인 시퀀스: \(A + I = 1\)을 만족하는 선

메인 시퀀스에 가까운 모듈일수록 추상화와 안정성 간의 균형이 잘 이루어진 상태입니다.

쓸모없는 구역과 고통스러운 구역

그래프에서 메인 시퀀스로부터 멀어진 영역은 두 가지로 나뉩니다:

  1. 쓸모없는 구역 (Zone of Uselessness): 그래프의 오른쪽 위에 위치하며, 지나치게 높은 추상도로 인해 실제 구현에서 사용하기 어려운 코드를 나타냅니다.
  2. 고통스러운 구역 (Zone of Pain): 그래프의 왼쪽 아래에 위치하며, 거의 추상화되지 않은 상태로 인해 취약하고 유지보수가 어려운 코드를 나타냅니다.

따라서 메인 시퀀스와의 거리를 줄이는 것이 코드 품질과 유지보수성을 높이는 데 중요한 목표가 됩니다.