- 발행일
[ZBF] 7주차 보충 : 모듈화에 대한 설계 원칙들의 개념과 장단점 이해하기
[ZBF] 7주차 보충 : 모듈화에 대한 설계 원칙들의 개념과 장단점 이해하기
이 글은 네이버 블로그에 2024년 7월 1일에 올렸던 것을 그대로 옮겨온 것입니다.
모듈화(Modularity)는 소프트웨어 설계에서 중요한 개념으로, 시스템을 독립적인 단위(모듈)로 나누어 각각의 모듈이 특정 기능을 담당하도록 하는 원칙입니다. 모듈화는 코드의 유지보수성과 확장성을 높이고, 팀 간 협업을 용이하게 합니다.
모듈화의 설계 원칙들
1. 단일 책임 원칙(Single Responsibility Principle, SRP)
각 모듈이 하나의 책임만을 가지도록 설계하는 원칙입니다.
장점:
- 코드가 더 이해하기 쉽고 유지보수하기 쉬워집니다.
- 변경이 발생할 때, 영향 범위가 좁아져 오류 가능성이 줄어듭니다.
단점:
- 지나치게 세분화하면 오히려 관리가 어려워질 수 있습니다.
2. 개방-폐쇄 원칙(Open/Closed Principle, OCP)
모듈은 확장에는 열려 있어야 하고, 수정에는 닫혀 있어야 한다는 원칙입니다.
장점:
- 새로운 기능을 추가할 때 기존 코드를 수정하지 않아도 되어 안정성이 높아집니다.
- 코드의 재사용성이 높아집니다.
단점:
- 원칙을 지키기 위해 복잡한 설계 패턴을 도입해야 할 수 있습니다.
3. 리스코프 치환 원칙(Liskov Substitution Principle, LSP)
서브타입은 언제나 기반 타입으로 교체할 수 있어야 한다는 원칙입니다.
장점:
- 상속 구조를 잘 설계하면 코드의 재사용성과 유연성이 높아집니다.
- 코드를 확장할 때 예측 가능성이 높아집니다.
단점:
- 상속 구조를 잘못 설계하면 오히려 유지보수가 어려워질 수 있습니다.
4. 인터페이스 분리 원칙(Interface Segregation Principle, ISP)
특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다는 원칙입니다.
장점:
- 클라이언트가 자신이 사용하지 않는 메서드에 의존하지 않아도 됩니다.
- 인터페이스 변경 시 영향 범위가 줄어듭니다.
단점:
- 인터페이스가 많아지면 관리가 복잡해질 수 있습니다.
5. 의존성 역전 원칙(Dependency Inversion Principle, DIP)
상위 모듈이 하위 모듈에 의존하지 않고, 둘 다 추상화된 인터페이스에 의존해야 한다는 원칙입니다.
장점:
- 모듈 간의 결합도를 낮추어 유연성과 재사용성을 높입니다.
- 테스트가 용이해집니다.
단점:
- 추상화와 인터페이스 설계가 어려울 수 있습니다.
모듈화의 장단점
장점
- 유지보수성 향상: 모듈화된 코드는 각 모듈이 독립적이므로 유지보수가 용이합니다.
- 재사용성 증가: 잘 설계된 모듈은 다른 프로젝트나 시스템에서도 재사용할 수 있습니다.
- 병행 개발 가능: 팀이 여러 모듈을 병행하여 개발할 수 있어 개발 속도가 빨라집니다.
- 테스트 용이성: 모듈 단위로 테스트할 수 있어 테스트가 더 쉽고 효과적입니다.
- 확장성 개선: 새로운 기능을 추가할 때 기존 모듈을 수정할 필요 없이 새로운 모듈을 추가할 수 있습니다.
단점
- 복잡성 증가: 모듈화를 과도하게 적용하면 시스템이 지나치게 복잡해질 수 있습니다.
- 초기 설계 비용: 모듈화를 잘 적용하려면 초기 설계에 더 많은 시간과 노력이 필요합니다.
- 성능 오버헤드: 모듈 간의 인터페이스를 통해 통신하는 경우 성능 오버헤드가 발생할 수 있습니다.