title: **"**Agile Development Principles**"**
description: "Agile Development Principles"
cleanUrl: /sw-engineer/agile-development-principles
floatFirstTOC: right

Agile의 주안점

Application의 주요 문제

경직성(rigidity) ▪ 파급 효과로 인한 변경의 난해성.
취약성(Fragility) ▪ 변경 하나가 여러 부분의 문제를 일으키는 경향.
▪ 개발자가 재설계의 필요성을 느끼는 경향, 고칠 수록 점점 문제를 일으키는 모듈
부동성(immobility) ▪ 타 시스템에서 유용하게 사용할 수 있지만 분리의 수고와 위험성이 큰 경향
점성(viscosity) ▪ 소프트웨어적 점성 : 변경에 대해 설계 원칙에 반하기 쉬운 경향
▪ 환경적 점성 : 개발 환경이 느리고 비효율적인 경향(ex. 재컴파일의 느린 속도)
▪ 이들 두 점성 모두 설계 유지에 반하도록 개발자를 이끔.
불필요한 복잡(needless complexity) ▪ 설계가 현재 시점에서 유용하지 않은 요소를 포함하는 상태.
▪ 변경에 대한 사전 고려로 만들어진 요소는 종종 사용되지 않으며 복잡도만 유발
불필요한 반복(needless repetition) ▪ 중복 코드
불투명성(opacity) ▪ 모듈을 이해하기 어려운 상태

상기문제를 해결하기 위한 주요원칙 (SOLID)

| Untitled (https://anyflower.notion.site/2d5e909496bc4d3ea8f4705d385b7764) | ▪ Cohesion(응집도) 증대 원칙 ▪ 클래스는 단일 책임 만이 따르도록(단 한가지의 변경 이유만을 가지도록) | | --- | --- | | Untitled (https://anyflower.notion.site/5dc511cd08ef4d23b0c8ea914960b6e0) | ▪ S/W 개체(class, module, function 등)는 확장에 열려있고, 수정에는 닫혀있어야. ▪ 추상화를 통한 변경 사항 격리, 다형성을 이용한 확장의 지원 | | Untitled (https://anyflower.notion.site/53a8374db0f64de892ddbbbff6348a55) | ▪ 상속 시 부모와 자식의 관계가 반드시 IS-A 관계를 유지하도록 ▪ Subtype은 base type애 대해 치환 가능하여야. ▪ Base class의 사용 조건을 sub class에서 모두 따를 수 있도록 | | Untitled (https://anyflower.notion.site/7e0b5ce66b8645488b387dff7e0c759d) | ▪ 클라이언트 코드가 자신이 사용하지 않는 method에 의존하도록 강제되어서는 아니됨 ▪ 위 사항을 위해 다수의 interface로 분리 및 해당 interface에 클라이언트 코드가 의존하도록 함. 이로서 서로 다른 클라이언트 코드가 서로에 대해 독립적이 되도록 함. | | Untitled (https://anyflower.notion.site/8f3748bfc755487ba2ef894e03102c5e) | ▪ 상위 수준의 모듈이 하위 수준의 모듈에 의존하지 말도록 ▪ 이들 두 모듈 모두 추상화에 의존하도록 ▪ 참고 : inversion이란 어휘는 구조적 분석 설계 등의 전통적 방법에서 정책이 구체적인 것에 의존하는 경향이 있어, 이들 의존 관계를 역전(inversion) 시킨다는 뜻 |

Conclusion

References