코드 설계의 품질을 결정하는 중요한 개념들
결합도
서로 다른 모듈 간에 상호 의존하고 있는 정도가 얼마나 높은지를 의미
만약 결합도가 낮으면 모듈의 독립성이 높아져 변경이 용이해지고 코드의 재사용성이 증가함
반면,
결합도가 높으면 한 모듈이 변경될 때 다른 모듈도 영향을 받을 가능성이 커짐
이로 인해 한 부분을 수정하면 연쇄적인 변경이 발생할 가능성이 높은데, 이는 유지보수를 어렵게 만듬
이상적인 설계를 위해선 결합도를 낮추는 것이 중요
응집도
모듈 내부 요소들이 얼마나 밀접하게 서로 관련되어 있는지 의미
응집도가 높을수록 모듈 내부의 기능이 단일 한 목적을 가지고 있음
이러한 특성은 가독성과 유지보수성에 도움
반대로
응집도 낮으면 하나의 모듈이 여러가지 역할 수행하게 되어 코드 복잡해지고, 예측 가능성 낮아져 수정할 때 예상치 못한 부작용이 발생할 가능성 높아짐
이상적 코드 설계 위해선 응집도 높이는 것이 중요
결합도와 응집도는 서로 반비례하는 경향
일반적으로 결합도가 낮을수록 응집도가 높아지고, 결합도가 높으면 응집도가 낮아짐
하나의 모듈이 다른 모듈의 내부 구현에 직접 접근한다면 결합도가 높은 상태
인터페이스를 통해 의존 관계를 느슨하게 만들면 결합도를 낮출 수 있음
한편, 하나의 파일에서 사용자 인증과 데이터베이스 처리를 함께 담당한다면 응집도가 낮다고 볼 수 있음. 이러한 경우 인증 관련 로직, 데이터베이스 처리 분리하여 각각의 책임 명확히 하면 응집도 높일 수 있음