Agile의 주안점
- 변화에 대한 능동적 대처 : dependency의 최소화
Application의 주요 문제
| 경직성(rigidity) | ▪ 파급 효과로 인한 변경의 난해성. |
|---|---|
| 취약성(Fragility) | ▪ 변경 하나가 여러 부분의 문제를 일으키는 경향. ▪ 개발자가 재설계의 필요성을 느끼는 경향, 고칠 수록 점점 문제를 일으키는 모듈 |
| 부동성(immobility) | ▪ 타 시스템에서 유용하게 사용할 수 있지만 분리의 수고와 위험성이 큰 경향 |
| 점성(viscosity) | ▪ 소프트웨어적 점성 : 변경에 대해 설계 원칙에 반하기 쉬운 경향 ▪ 환경적 점성 : 개발 환경이 느리고 비효율적인 경향(ex. 재컴파일의 느린 속도) ▪ 이들 두 점성 모두 설계 유지에 반하도록 개발자를 이끔. |
| 불필요한 복잡(needless complexity) | ▪ 설계가 현재 시점에서 유용하지 않은 요소를 포함하는 상태. ▪ 변경에 대한 사전 고려로 만들어진 요소는 종종 사용되지 않으며 복잡도만 유발 |
| 불필요한 반복(needless repetition) | ▪ 중복 코드 |
| 불투명성(opacity) | ▪ 모듈을 이해하기 어려운 상태 |
상기문제를 해결하기 위한 주요원칙 (SOLID)
| SRP : The Single-Responsibility Principle | ▪ Cohesion(응집도) 증대 원칙 ▪ 클래스는 단일 책임 만이 따르도록(단 한가지의 변경 이유만을 가지도록) |
|---|---|
| OCP : The Open Closed Principle | ▪ S/W 개체(class, module, function 등)는 확장에 열려있고, 수정에는 닫혀있어야. ▪ 추상화를 통한 변경 사항 격리, 다형성을 이용한 확장의 지원 |
| LSP : The Liskov Substitution Principle | ▪ 상속 시 부모와 자식의 관계가 반드시 IS-A 관계를 유지하도록 ▪ Subtype은 base type애 대해 치환 가능하여야. ▪ Base class의 사용 조건을 sub class에서 모두 따를 수 있도록 |
| ISP : The Interface Segregation Principle | ▪ 클라이언트 코드가 자신이 사용하지 않는 method에 의존하도록 강제되어서는 아니됨 ▪ 위 사항을 위해 다수의 interface로 분리 및 해당 interface에 클라이언트 코드가 의존하도록 함. 이로서 서로 다른 클라이언트 코드가 서로에 대해 독립적이 되도록 함. |
| DIP : The Dependency Inversion Principle | ▪ 상위 수준의 모듈이 하위 수준의 모듈에 의존하지 말도록 ▪ 이들 두 모듈 모두 추상화에 의존하도록 ▪ 참고 : inversion이란 어휘는 구조적 분석 설계 등의 전통적 방법에서 정책이 구체적인 것에 의존하는 경향이 있어, 이들 의존 관계를 역전(inversion) 시킨다는 뜻 |
Conclusion
- 변화에 능동적으로 대처하는 application design의 핵심 원칙을 제시
- Agile 탄생 이전부터, OOD 기반의 다양한 practice를 통해 숙성, 추출된 원칙들.
- GOF에 나열된 여러 Design Pattern의 기반이 되는 설계 철학.
References
- Agile Principles, Patterns, and Practices. Martine C. Robert, Martin Micah

Comments