설계가 좋은지 나쁜지를 재는 두 자. 응집도는 한 모듈 안의 요소들이 서로 얼마나 관련 있는지를, 결합도는 모듈끼리 얼마나 얽혀 있는지를 가리킨다. 거의 모든 설계 원칙이 응집도를 높이고 결합도를 낮추라는 한 문장으로 돌아온다.

읽기 어려움과 변경 비용

응집도가 낮으면 파일 하나를 열었을 때 관련 없는 것들이 섞여 있어 읽기 어렵고, 고칠 때 어디까지 영향이 가는지 알 수 없다. 세탁기라면 세탁에 관련된 기능을 잘 모아 갖고 있어야 한다.

결합도가 높으면 하나를 고칠 때 다른 것들이 줄줄이 깨진다. 컴퓨터를 샀는데 부가 장비가 있어야만 켜진다면 그 컴퓨터는 쓰기 불편하다. 변경 비용이 곧 결합도다.

두 지표를 조절하는 장치

지금까지 나온 설계 수단이 전부 이 둘을 조절하는 장치다. 캡슐화와 정보 은닉은 내부를 감춰 밖이 의존할 수 있는 면을 줄인다. SRP는 한 객체에 한 책임만 주어 응집도를 올린다. 추상화는 구체가 아니라 추상에 의존하게 만들고, 의존성 주입은 스스로 만들지 않고 밖에서 받게 한다. 합성은 부모 구현에 묶이는 것을 피한다.

두 지표는 대체로 같이 움직인다. 응집도를 높이려고 관련 있는 것끼리 모으면 서로 다른 모듈이 얽힐 일이 줄어 결합도도 떨어진다. 반대로 응집도가 낮은 모듈은 여기저기 손을 뻗게 되어 결합도가 올라간다.

DDD레이어드 아키텍처MSA도 같은 말을 다른 규모에서 한다. 관련 있는 것을 함께 두고, 관련 없는 것 사이의 연결을 줄인다.

관련

출처