응집도(cohension) : 모듈 내부에 있는 데이터와 로직 사이의 관계가 얼마나 강한지 나타내는 지표
응집도가 높은 구조는 변경하기 쉬우며, 바람직한 구조입니다.
반대로 응집도가 낮은 구조는 변경 시 문제가 발생하기 쉽습니다.
static 메서드 오용으로 응집도가 낮아지는 경우가 있습니다.
// 주문을 관리하는 클래스
class OrderManager {
static int add(int moneyAmount1, int moneyAmount2) {
return moneyAmount1 + moneyAmount2;
}
}
주문 관리 클래스 OrderManager
에 금액을 더하는 static
메서드 add
가 정의되어 있습니다.
static
메서드로 정의하면 클래스의 인스턴스를 생성하지 않고도, add
메서드를 호출할 수 있습니다.
// moneyData1, moneyData2는 데이터 클래스
moneyData1.amount = OrderManager.add(moneyData1.amount, moneyData2.amount);
이러한 구조의 문제점은 데이터는 MoneyData
에 있고, 데이터를 조작하는 로직은 OrderManager
에 있다는 것이 문제입니다.
데이터와 로직이 서로 다른 클래스에 작성되어 있습니다.
static 메서드는 인스턴스 변수를 사용할 수 없습니다.
따라서 어떤 메서드를 static 메서드로 만든 시점에 이미 데이터와 데이터를 조작하는 로직 사이에 괴리가 발생하며, 당연히 응집도가 낮아질 수 밖에 없습니다.