객체지향 메트릭
IT위키
더 많은 작업
객체지향 메트릭(Object-Oriented Metrics)은 클래스·상속·메시지 같은 객체지향 설계 요소를 세어 소프트웨어의 복잡도와 품질(유지보수성, 재사용성, 결함 가능성)을 재는 척도이다.
줄 수(LOC)나 순환 복잡도처럼 절차적 프로그램에서 쓰던 척도는 함수 하나의 제어 흐름만 본다. 객체지향 프로그램은 클래스 사이의 상속, 결합, 메시지 전달이 복잡도의 대부분을 만들기 때문에 이것을 직접 세는 척도가 따로 필요하다. 가장 널리 쓰이는 것이 1994년 치담버(Chidamber)와 케머러(Kemerer)가 제안한 CK 메트릭이다.
| 메트릭 | 우리말 이름 | 재는 것 | 값이 크면 |
|---|---|---|---|
| WMC(Weighted Methods per Class) | 클래스당 가중 메서드 수 | 클래스에 있는 메서드들의 복잡도 합. 가중치를 모두 1로 두면 메서드 수 | 클래스가 복잡해 이해·시험이 어렵다 |
| DIT(Depth of Inheritance Tree) | 상속 트리의 깊이 | 루트 클래스에서 그 클래스까지 상속 단계 수 | 물려받는 메서드가 많아 동작을 예측하기 어렵다 |
| NOC(Number of Children) | 자식 클래스 수 | 바로 아래 하위 클래스 수 | 재사용은 많지만 변경 영향이 넓다 |
| CBO(Coupling Between Object classes) | 클래스 간 결합도 | 그 클래스가 결합된 다른 클래스 수 | 변경이 퍼지고 재사용이 어렵다 → 결합도 |
| RFC(Response For a Class) | 클래스의 응답 집합 | 메시지 하나에 응답해 실행될 수 있는 메서드 수 | 시험해야 할 경로가 많다 |
| LCOM(Lack of Cohesion in Methods) | 메서드의 응집 결핍 | 같은 속성을 함께 쓰지 않는 메서드 쌍이 얼마나 많은가 | 응집도가 낮아 클래스를 나눠야 할 신호다 → 응집도 |
치담버와 케머러의 원 논문은 각 척도를 다음과 같이 센다.[1]
- LCOM - 클래스의 메서드를 둘씩 짝지어, 함께 쓰는 인스턴스 변수가 없는 쌍의 수를 P, 있는 쌍의 수를 Q 라 하면 LCOM = P - Q 이다. P 가 Q 보다 작거나 같으면 0 으로 둔다. 메서드가 n 개면 쌍은 n(n-1)/2 개다
- RFC - 클래스의 메서드 집합 M 과 그 메서드들이 호출하는 다른 메서드 집합 R 을 합친 응답 집합 RS = M ∪ R 의 크기이다. 객체가 받은 메시지 하나에 응답해 실행될 수 있는 메서드의 수이므로, 클수록 시험·디버깅이 어렵고 오류 가능성이 높다
- CBO - 그 클래스가 결합된(메서드를 호출하거나 속성을 쓰는) 다른 클래스의 수이다. 같은 클래스의 객체가 여럿이어도 클래스 하나로 센다. 원 정의는 쓰는 쪽과 쓰이는 쪽을 모두 세지만, 그 클래스가 이용하는 클래스만 세도록 조건을 두기도 한다
- WMC - 클래스에 정의된 메서드들의 복잡도(흔히 순환 복잡도)를 더한 값. 모든 복잡도를 1로 두면 메서드 수가 된다
예를 들어 메서드 m1, m2, m3 가 있고 m1 과 m2 만 속성 a 를 함께 쓴다면 (m1, m2) 는 공유 쌍, (m1, m3) 와 (m2, m3) 는 비공유 쌍이므로 LCOM = 2 - 1 = 1 이다. 시퀀스 다이어그램에서 한 클래스가 Class2 의 객체 둘과 Class3 의 객체 하나에 메시지를 보내면, 그 클래스가 이용하는 클래스로 센 CBO 는 2(Class2, Class3)이다. 프레스먼의 소프트웨어 공학 교재도 CK 척도를 같은 정의로 소개한다.[2]
- MOOD(Metrics for Object-Oriented Design) : 시스템 전체 단위로 메서드 은닉률(MHF), 속성 은닉률(AHF), 메서드 상속률(MIF), 속성 상속률(AIF), 다형성 비율(PF), 결합 비율(CF)을 잰다
- 클래스 크기 척도 : 클래스당 속성 수, 공개 메서드 수 등
| 구분 | 척도 | 보는 단위 |
|---|---|---|
| 객체지향 척도 | WMC, DIT, NOC, CBO, RFC, LCOM, MOOD | 클래스와 클래스 사이의 관계 |
| 전통(절차) 척도 | 순환 복잡도(사이클로매틱 복잡도), LOC, 할스테드 척도 | 함수·모듈 하나의 제어 흐름과 크기 |
- 순환 복잡도는 객체지향 고유의 품질 측정 방법이 아니다. 메서드 하나의 분기 수를 재는 전통 척도이며, WMC 를 계산할 때 메서드 가중치로 빌려 쓸 수 있을 뿐이다
- "클래스 당 가중치를 갖는 메소드(WMC)", "상속 트리의 깊이(DIT)", "메소드의 응집 결핍(LCOM)" 은 모두 CK 메트릭이다
- ↑ Shyam R. Chidamber, Chris F. Kemerer, 「A Metrics Suite for Object Oriented Design」, IEEE Transactions on Software Engineering, Vol. 20, No. 6, 1994, pp. 476-493, https://doi.org/10.1109/32.295895, 확인일: 2026-11-04.
- ↑ Roger S. Pressman, Bruce R. Maxim, 『Software Engineering: A Practitioner's Approach』 8판, McGraw-Hill, 2015, Product Metrics 장(Class-Oriented Metrics - The CK Metrics Suite).