모듈화
모듈화(Modularization)는 프로그램을 독립적이고 응집력 있는 작은 단위로 분할하여 개발의 생산성과 유지보수성을 끌어올리는 설계 원칙이다. “큰 문제를 작은 문제로 나눠 푼다”는 분할 정복(divide and conquer) 사고방식의 소프트웨어판이다.
좋은 모듈의 두 기준
응집도(Cohesion) — 높을수록 좋다
한 모듈이 하나의 목적에 집중되어 있는지를 본다. 응집도가 낮으면 모듈이 너무 많은 일을 하게 되어 변경에 취약해진다.
결합도(Coupling) — 낮을수록 좋다
모듈끼리 얼마나 서로 의존하는지를 본다. 결합도가 높으면 한 모듈을 바꿀 때 다른 모듈이 함께 깨진다.
목표: 높은 응집도, 낮은 결합도
모듈화의 이점
- 병렬 개발: 여러 명이 모듈별로 동시에 작업
- 재사용: 한 번 만든 모듈을 다른 프로젝트에서도 활용
- 테스트 용이: 작은 단위로 독립 검증
- 변경 격리: 한쪽 변경이 다른 쪽으로 번지지 않음
- 이해 용이: 한 번에 한 모듈씩 이해하면 됨
모듈을 나누는 기준
- 기능 단위 (예: 인증, 결제, 알림)
- 도메인 경계 (DDD의 Bounded Context)
- 변경의 이유(SRP, 단일 책임 원칙)
- 데이터의 흐름
안티 패턴
- 갓 모듈(God Module): 모든 일을 다 하는 거대 모듈
- 순환 의존: A → B → A 같은 의존 고리
- 이름만 모듈: 분리되어 있지만 실제로는 강하게 얽힘
관련 노트
- 추상화: 모듈화의 전제 조건
- 다형성 · 상속성: 모듈 간 인터페이스 설계 도구
- 소프트웨어 아키텍쳐: 큰 단위의 모듈화