http://andrei.gmxhome.de/eclipse/ 업데이트 사이트를 사용하여 설치할 수 있습니다. 실행하는 방법은 간단합니다. 소스코드가 들어있는 폴더를 우클릭하고 Run JDepend Analysis를 실행하면 됩니다.
사용자 삽입 이미지클릭하면 펄스팩티브가 JDepend Perspective로 바뀝니다. 깜짝 놀랄 만한 화면이 나타납니다. 이게 대체 무엇인가;;;;;
사용자 삽입 이미지찬찬히 살펴보면 화면이 크게 세 부분으로 구성되어 있는 것을 볼 수 있습니다. 왼쪽 위에는 패키지들 왼쪽 아래에는 이상한 그래프(Metrics) 오른쪽에는 종속성 관련 뷰로 다시 네 종류의 정보(현재 선택한 패키지, 사이클을 가지고 있는 패키지, 선택한 패키지에서 사용하고 있는 패키지, 선택한 패키지를 사용되고 있는 패키지)를 담고 있습니다.

크게 살펴 보았으니 이제 자세하게 제일 복잡해 보이고 덩어리가 큰 종속성 뷰에서 대체 CC, AC, Ca, Ce, A, I, D, Cycle 이라는 녀석들이 무엇인지 살펴보겠습니다.

CC :: Concrete Class의 약자로 인터페이스나 추상 클래스가 아닌 말그대로 Concrete Class의 갯수 입니다.
AC :: Abstract Class의 약자로 추상 클래스나 인터페이스의 갯수를 나타내며 확장성의 척도가 된다고 합니다.
Ca :: Afferent Couplings을 나타냅니다. 직역하면 당하는 커플링. 즉 현재 패키지의 클래스들에 종속성을 가지는 패키지의 갯수를 나타냅니다. 책임의 척도가 됩니다.
Ce :: Efferent Couplings을 나타냅니다. 위와 반대로 이번에는 현재 패키지의 클래스들이 종속하고 있는 패키지의 갯수를 나타냅니다. 독립성의 척도가 됩니다.
A :: 추상화 정도를 나타내며 0 부터 1 사이의 값을 가지며 0은 완전 구체적인 패키지[footnote]즉 Concrete Class만 있는 패키지[/footnote] 1은 추상적인 패키지를 나타냅니다.
I :: 변화에 대한 탄력도를 나타냅니다. 0 부터 1 사이의 값을 가지며 0은 외부 변화에도 끄떡 없는 패키지이며 1은 작은 변화에도 쉽게 흔들릴 수 있는 패키지를 나타냅니다.
D :: Main Sequence로 부터의 거리를 나타냅니다. Main Sequence란 이상적인 패키지로 완전 추상적이면서 안정적이거나 완전 구체적이면서 불안정한 패키지를 나타냅니다. 0 부터 1 사이의 값을 가지며 0은 Main Sequence와 완전 가까우며 1은 완전 먼 상태입니다.
Cycle : 패키지들 상호 간에 종속성을 가지고 있을 때[footnote]서로 Ca, Ce 관계일 때[/footnote] 발생합니다. 안좋은 상황이기 때문에 경고 아이콘으로 보여집니다.

결국 모든 데이터는 D 를 산출하기 위해 필요한 데이타 라고 보아도 될 것 같습니다. 그만큼 D가 중요하니 좀 더 살펴보겠습니다. 이상적인 상황을 Main Sequence라고 하고 있습니다. 즉 이상적인 상황이라고 말했던 두 경우는 다음과 같습니다.
- 완전 추상화 일때는 완전 안정적
- 완전 구체화 일때는 완전 불안정적

즉 '추상화 클래스가 많은 패키지'는 다른 패키지에 의존하지 말고 다른 패키지들이 이 패키지에 의존하여야 하며 '구체 클래스가 많은 패키지'는 다른 패키지들이 이 패키지에 의존하지 말아야 하며 이 패키지의 클래스들이 다른 패키지에 의존성을 가져야 하는 것이 이상적이라는 것입니다.

이걸 다시 한 줄로 줄이면 다음과 같습니다.

Loosely Coupling

D가 낮은 패키지는 인터페이스 기반의 개발을 한 것이고 D가 높은 패키지는 그렇치 못해서 Coupling이 심한 상태라고 볼 수 있겠습니다.

이걸 분석하고 나니 덩달아 그래프가 눈에 들어오는군요.
이젠 매트릭스가 어떤 그래프인지 잘 보이시죠?
힌트를 드리자면 가운대 대각선 부분이 스트라이크존입니다.

저 위의 그림은 모든 패키지가 다 선택되어 있기 때문에 매우 혼란스럽지만 특정 패키지 하나만 클릭하여 보신다면 JDepend를 파악하기가 좀 더 수월할 것입니다.
사용자 삽입 이미지

살펴볼 링크
http://www.clarkware.com/software/JDepend.html
http://wiki.javajigi.net/pages/viewpage.action?pageId=2621447
http://younghoe.info/50
http://powerjava.net/blog/soulcarta/174