응집도(cohension) : 모듈 내부에 있는 데이터와 로직 사이의 관계가 얼마나 강한지 나타내는 지표

응집도가 높은 구조는 변경하기 쉬우며, 바람직한 구조입니다.

반대로 응집도가 낮은 구조는 변경 시 문제가 발생하기 쉽습니다.

#5-1. static 메서드 오용

static 메서드 오용으로 응집도가 낮아지는 경우가 있습니다.

[code 5-1] static 메서드가 정의되어 있는 OrderManager 클래스

// 주문을 관리하는 클래스
class OrderManager {
	static int add(int moneyAmount1, int moneyAmount2) {
		return moneyAmount1 + moneyAmount2;
	}
}

주문 관리 클래스 OrderManager에 금액을 더하는 static 메서드 add가 정의되어 있습니다.

static 메서드로 정의하면 클래스의 인스턴스를 생성하지 않고도, add메서드를 호출할 수 있습니다.

[code 5-2] static 메서드와 데이터 클래스를 함께 사용하는 상황

// moneyData1, moneyData2는 데이터 클래스
moneyData1.amount = OrderManager.add(moneyData1.amount, moneyData2.amount);

이러한 구조의 문제점은 데이터는 MoneyData에 있고, 데이터를 조작하는 로직은 OrderManager에 있다는 것이 문제입니다.

데이터와 로직이 서로 다른 클래스에 작성되어 있습니다.

#5-1-1. static 메서드는 인스턴스 변수를 사용할 수 없음

static 메서드는 인스턴스 변수를 사용할 수 없습니다.

따라서 어떤 메서드를 static 메서드로 만든 시점에 이미 데이터와 데이터를 조작하는 로직 사이에 괴리가 발생하며, 당연히 응집도가 낮아질 수 밖에 없습니다.

#5-1-2. 인스턴스 변수를 사용하는 구조로 변경하기