Search
moon
sun
๐Ÿ“

Agile Development Principles

Category
as S/W ์—”์ง€๋‹ˆ์–ด
Tags
SOLID
S/W Engineering
Architecture
Study Note
Created time
2009/04/14

Agile์˜ ์ฃผ์•ˆ์ 

โ€ข
๋ณ€ํ™”์— ๋Œ€ํ•œ ๋Šฅ๋™์  ๋Œ€์ฒ˜ : dependency์˜ ์ตœ์†Œํ™”

Application์˜ ์ฃผ์š” ๋ฌธ์ œ

๊ฒฝ์ง์„ฑ(rigidity)
โ–ช ํŒŒ๊ธ‰ ํšจ๊ณผ๋กœ ์ธํ•œ ๋ณ€๊ฒฝ์˜ ๋‚œํ•ด์„ฑ.
์ทจ์•ฝ์„ฑ(Fragility)
โ–ช ๋ณ€๊ฒฝ ํ•˜๋‚˜๊ฐ€ ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์˜ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค๋Š” ๊ฒฝํ–ฅ. โ–ช ๊ฐœ๋ฐœ์ž๊ฐ€ ์žฌ์„ค๊ณ„์˜ ํ•„์š”์„ฑ์„ ๋А๋ผ๋Š” ๊ฒฝํ–ฅ, ๊ณ ์น  ์ˆ˜๋ก ์ ์  ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค๋Š” ๋ชจ๋“ˆ
๋ถ€๋™์„ฑ(immobility)
โ–ช ํƒ€ ์‹œ์Šคํ…œ์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ถ„๋ฆฌ์˜ ์ˆ˜๊ณ ์™€ ์œ„ํ—˜์„ฑ์ด ํฐ ๊ฒฝํ–ฅ
์ ์„ฑ(viscosity)
โ–ช ์†Œํ”„ํŠธ์›จ์–ด์  ์ ์„ฑ : ๋ณ€๊ฒฝ์— ๋Œ€ํ•ด ์„ค๊ณ„ ์›์น™์— ๋ฐ˜ํ•˜๊ธฐ ์‰ฌ์šด ๊ฒฝํ–ฅ โ–ช ํ™˜๊ฒฝ์  ์ ์„ฑ : ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์ด ๋А๋ฆฌ๊ณ  ๋น„ํšจ์œจ์ ์ธ ๊ฒฝํ–ฅ(ex. ์žฌ์ปดํŒŒ์ผ์˜ ๋А๋ฆฐ ์†๋„) โ–ช ์ด๋“ค ๋‘ ์ ์„ฑ ๋ชจ๋‘ ์„ค๊ณ„ ์œ ์ง€์— ๋ฐ˜ํ•˜๋„๋ก ๊ฐœ๋ฐœ์ž๋ฅผ ์ด๋”.
๋ถˆํ•„์š”ํ•œ ๋ณต์žก(needless complexity)
โ–ช ์„ค๊ณ„๊ฐ€ ํ˜„์žฌ ์‹œ์ ์—์„œ ์œ ์šฉํ•˜์ง€ ์•Š์€ ์š”์†Œ๋ฅผ ํฌํ•จํ•˜๋Š” ์ƒํƒœ. โ–ช ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ์‚ฌ์ „ ๊ณ ๋ ค๋กœ ๋งŒ๋“ค์–ด์ง„ ์š”์†Œ๋Š” ์ข…์ข… ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ ๋ณต์žก๋„๋งŒ ์œ ๋ฐœ
๋ถˆํ•„์š”ํ•œ ๋ฐ˜๋ณต(needless repetition)
โ–ช ์ค‘๋ณต ์ฝ”๋“œ
๋ถˆํˆฌ๋ช…์„ฑ(opacity)
โ–ช ๋ชจ๋“ˆ์„ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์šด ์ƒํƒœ

์ƒ๊ธฐ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์ฃผ์š”์›์น™ (SOLID)

โ–ช Cohesion(์‘์ง‘๋„) ์ฆ๋Œ€ ์›์น™ โ–ช ํด๋ž˜์Šค๋Š” ๋‹จ์ผ ์ฑ…์ž„ ๋งŒ์ด ๋”ฐ๋ฅด๋„๋ก(๋‹จ ํ•œ๊ฐ€์ง€์˜ ๋ณ€๊ฒฝ ์ด์œ ๋งŒ์„ ๊ฐ€์ง€๋„๋ก)
โ–ช S/W ๊ฐœ์ฒด(class, module, function ๋“ฑ)๋Š” ํ™•์žฅ์— ์—ด๋ ค์žˆ๊ณ , ์ˆ˜์ •์—๋Š” ๋‹ซํ˜€์žˆ์–ด์•ผ. โ–ช ์ถ”์ƒํ™”๋ฅผ ํ†ตํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๊ฒฉ๋ฆฌ, ๋‹คํ˜•์„ฑ์„ ์ด์šฉํ•œ ํ™•์žฅ์˜ ์ง€์›
โ–ช ์ƒ์† ์‹œ ๋ถ€๋ชจ์™€ ์ž์‹์˜ ๊ด€๊ณ„๊ฐ€ ๋ฐ˜๋“œ์‹œ IS-A ๊ด€๊ณ„๋ฅผ ์œ ์ง€ํ•˜๋„๋ก โ–ช Subtype์€ base type์•  ๋Œ€ํ•ด ์น˜ํ™˜ ๊ฐ€๋Šฅํ•˜์—ฌ์•ผ. โ–ช Base class์˜ ์‚ฌ์šฉ ์กฐ๊ฑด์„ sub class์—์„œ ๋ชจ๋‘ ๋”ฐ๋ฅผ ์ˆ˜ ์žˆ๋„๋ก
โ–ช ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ๊ฐ€ ์ž์‹ ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” method์— ์˜์กดํ•˜๋„๋ก ๊ฐ•์ œ๋˜์–ด์„œ๋Š” ์•„๋‹ˆ๋จ โ–ช ์œ„ ์‚ฌํ•ญ์„ ์œ„ํ•ด ๋‹ค์ˆ˜์˜ interface๋กœ ๋ถ„๋ฆฌ ๋ฐ ํ•ด๋‹น interface์— ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ๊ฐ€ ์˜์กดํ•˜๋„๋ก ํ•จ. ์ด๋กœ์„œ ์„œ๋กœ ๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ๊ฐ€ ์„œ๋กœ์— ๋Œ€ํ•ด ๋…๋ฆฝ์ ์ด ๋˜๋„๋ก ํ•จ.
โ–ช ์ƒ์œ„ ์ˆ˜์ค€์˜ ๋ชจ๋“ˆ์ด ํ•˜์œ„ ์ˆ˜์ค€์˜ ๋ชจ๋“ˆ์— ์˜์กดํ•˜์ง€ ๋ง๋„๋ก โ–ช ์ด๋“ค ๋‘ ๋ชจ๋“ˆ ๋ชจ๋‘ ์ถ”์ƒํ™”์— ์˜์กดํ•˜๋„๋ก โ–ช ์ฐธ๊ณ  : inversion์ด๋ž€ ์–ดํœ˜๋Š” ๊ตฌ์กฐ์  ๋ถ„์„ ์„ค๊ณ„ ๋“ฑ์˜ ์ „ํ†ต์  ๋ฐฉ๋ฒ•์—์„œ ์ •์ฑ…์ด ๊ตฌ์ฒด์ ์ธ ๊ฒƒ์— ์˜์กดํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์–ด, ์ด๋“ค ์˜์กด ๊ด€๊ณ„๋ฅผ ์—ญ์ „(inversion) ์‹œํ‚จ๋‹ค๋Š” ๋œป

Conclusion

โ€ข
๋ณ€ํ™”์— ๋Šฅ๋™์ ์œผ๋กœ ๋Œ€์ฒ˜ํ•˜๋Š” application design์˜ ํ•ต์‹ฌ ์›์น™์„ ์ œ์‹œ
โ€ข
Agile ํƒ„์ƒ ์ด์ „๋ถ€ํ„ฐ, OOD ๊ธฐ๋ฐ˜์˜ ๋‹ค์–‘ํ•œ practice๋ฅผ ํ†ตํ•ด ์ˆ™์„ฑ, ์ถ”์ถœ๋œ ์›์น™๋“ค.
โ€ข
GOF์— ๋‚˜์—ด๋œ ์—ฌ๋Ÿฌ Design Pattern์˜ ๊ธฐ๋ฐ˜์ด ๋˜๋Š” ์„ค๊ณ„ ์ฒ ํ•™.

References

โ€ข
Agile Principles, Patterns, and Practices. Martine C. Robert, Martin Micah