Object Oriented methodology
๊ฐ์ฒด์งํฅ ๋ฐฉ๋ฒ๋ก (์ถ์ ๋น๋: ์)
๋น์ถํ๊ทธ: ๊ฐ์ฒด ์ฉ์ด, ๊ฐ์ฒด ๊ธฐ์ , ๋์์ธ ํจํด, ๋ผ๋ฐ์ฐ
1. ๊ฐ์ฒด์งํฅ ๋ฐฉ๋ฒ๋ก ๊ฐ์
๊ธฐ๋ณธ ๊ฐ๋
- ํ์ค์ ๊ฐ์ฒด๋ค์ ๋์งํธ ์ธ๊ณ์ ๊ฐ์ฒด๋ก ํํ
- ํน์ฑ์ ์์ฑ์ผ๋ก ํํ, ํน์ฑ๊ณผ ๊ด๋ จ๋ ๊ธฐ๋ฅ์ ๋ฉ์๋๋ก ํํ
์ฅ๋จ์
์ฅ์ :
- ํ์ฅ์ฑ
- ์ ์ง๋ณด์ ์ฉ์ด์ฑ
- ๊ฐ๋ฐ ์๋ ์์น
- ๊ท๋ชจ๊ฐ ํฐ ํ๋ก๊ทธ๋จ๋ ๋ฌด๋ฆฌ์์ด ๊ฐ๋ฐ ๊ฐ๋ฅ
๋จ์ :
- ๊ฐ๋ฐ์ ์ฝ์ง๋ง ๊ฐ์ฒด ์์ฒด์ ์ค๊ณ๊ฐ ์ด๋ ค์
- ์๋๊ฐ ๋๋ ค์ง ์ ์์
2. ๊ฐ์ฒด์งํฅ ๊ธฐ์ ์ ๊ตฌ์ฑ์์
- ํด๋์ค: ๊ฐ์ฒด ํ์ ์ ์ ์ํ๊ณ ๊ตฌํํ๋ ํ. C์ธ์ด์์ ๊ตฌ์กฐ์ฒด์ ๊ตฌ์กฐ์ฒด๋ฅผ ์ฐ์ฐํ๋ ํจ์๋ฅผ ๋ฌถ์ด์ ๋ฐ์ ์ํจ ๊ฒ
- ๊ฐ์ฒด: ํด๋์ค์ ์ํด ๊ตฌํ๋ ๋์๋ค
- ์ธ์คํด์ค: ํน์ ํด๋์ค์ ๊ฐ์ฒด
- ๋ฉ์ธ์ง: ์ธํฐํ์ด์ค. ์์ฒญ ๋ฉ์์ง๋ฅผ ํตํด ๋ฉ์๋ ์ํ ์์
- ๋ฉ์๋: ์ํํด์ผํ ์ฐ์ฐ์ ์ ์. C์ธ์ด์ ํจ์์ ๊ฐ์
3. ๊ฐ์ฒด์งํฅ ๊ธฐ์
ํต์ฌ ๊ฐ๋
- ์บก์ํ: ๋ฌธ์ ํด๊ฒฐ์ ์ํ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ๋ฌถ์. ์ธํฐํ์ด์ค๊ฐ ๋จ์ํด์ง๊ณ ์ฌ์ฌ์ฉ์ด ์ฉ์ดํด์ง
- ์ ๋ณด์๋: ์ธ๋ถ์ ์ํฅ์ผ๋ก๋ถํฐ ๋ณดํธํ๋ ๊ฒ. ์บก์ํ์ ๊ฐ์ฅ ํฐ ๋ชฉ์ ์ด๋ฉฐ, ์ธ๋ถ๋ก๋ถํฐ ๊ฐ์ถ๋ ๊ฒ
- ์ถ์ํ: ์์ํด๋์ค๋ ํ์ํด๋์ค ๊ตฌํ์ ์ํ ํ์ ์ ๊ณต. ํ์ค์ธ๊ณ๋ฅผ ๋ณด๋ค ์์ฐ์ค๋ฝ๊ฒ ํํ
- ์์: ์์ ํด๋์ค ๋ฉค๋ฒ๋ฅผ ํ์ ํด๋์ค๊ฐ ๋ฌผ๋ ค๋ฐ๋๋ก ํ๋ ๊ฒ. ์ฌ์ฌ์ฉํ๊ณ ํ์ฅํ ์ ์์
- ๋คํ์ฑ: ์์๋ ์ฌ๋ฌ ํ์ ๊ฐ์ฒด๊ฐ ์๋ก ๋ค๋ฅธ ํํ๋ฅผ ๊ฐ์ง ์ ์๊ฒ ํจ. ์ค๋ฒ๋ก๋ฉ, ์ค๋ฒ๋ผ์ด๋ฉ ๊ธฐ์ . ๋ ์ด์์ ํด๋์ค์์ ๋์ผํ ๋ฉ์ธ์ง์ ๋ํด ์๋ก ๋ค๋ฅด๊ฒ ๋ฐ์ํจ
4. ๊ฐ์ฒด์งํฅ ๊ฐ๋ฐ ๋ฐฉ๋ฒ๋ก
๋ผ๋ฐ์ฐ(Rumbaugh)
- ๋ค์ํ ๊ทธ๋ํฝ ํ๊ธฐ๋ฒ์ผ๋ก ๋ชจ๋ธ๋ง
- ๊ฐ์ฒด, ๋์ , ๊ธฐ๋ฅ ๋ชจ๋ธ๋ง ์์ผ๋ก ์งํ
- ๊ฐ์ฒด๋ชจ๋ธ๋ง(์ ๋ณด๋ชจ๋ธ๋ง): ๊ฐ์ฒด ๋ค์ด์ด๊ทธ๋จ์ ํ์ฉ
- ๋์ ๋ชจ๋ธ๋ง: ์ํ, ํ๋ ๋ค์ด์ด๊ทธ๋จ์ ํ์ฉ
- ๊ธฐ๋ฅ ๋ชจ๋ธ๋ง: ์๋ฃ ํ๋ฆ๋(DFD)๋ฅผ ํ์ฉ
๊ธฐํ ๋ฐฉ๋ฒ๋ก
- Booch: ๋ฏธ์์ (Micro) ๊ฐ๋ฐ ํ๋ก์ธ์ค์ ๊ฑฐ์์ (Macro) ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉ
- Jacobson: ์๋๋ฆฌ์ค(Use-Case)๋ฅผ ํ์ฉ
- Coad์ Yourdon: E-R๋ค์ด์ด๊ทธ๋จ์ ์ฌ์ฉ
- Wirfs-Brock: ๋ถ์๊ณผ ์ค๊ณ๊ฐ ๊ตฌ๋ถ์ด ์์. ๊ณ ๊ฐ ๋ช ์ธ์๋ฅผ ํ๊ฐํด์ ์ฐ์์ ์ผ๋ก ์ํ
5. ๊ฐ์ฒด์งํฅ ์ค๊ณ์์น
- ๋จ์ผ ์ฑ ์: ํ๋์ ํด๋์ค๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ด ํ๋์ ๋ฌธ์ ๋ง ํด๊ฒฐํ๋๋ก ์ค๊ณ. ๋ฎ์ ๊ฒฐํฉ๋ ๋์ ์์ง๋
- ๊ฐ๋ฐฉ ํ์: ํ์ฅ์ ๋ํด์ ๊ฐ๋ฐฉ์ ์ด๋ฉฐ ์์ ์ ๋ํด์ ํ์์ ์ด์ด์ผ ํจ
- ๋ฆฌ์ค์ฝํ ์นํ: ํ์ ํด๋์ค๋ ์์ ํด๋์ค์ ๊ธฐ๋ฅ์ด ํธํ๋จ. ์์ ํด๋์ค์ ์ ์ฝ์ฌํญ์ ์ค์ํด์ผ ํจ
- ์ธํฐํ์ด์ค ๋ถ๋ฆฌ: ํ๋์ ํฌ๊ด์ ์ธํฐํ์ด์ค๋ณด๋ค ๋ค์์ ๊ตฌ์ฒด์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ฑ. ์ฌ์ฉํ์ง ์๋ ์ธํฐํ์ด์ค ๊ตฌํํ์ง ์์์ผ ํจ
- ์์กด์ฑ ๋ค์ง๊ธฐ: ํ์ํด๋์ค์ ๋ณ๊ฒฝ์ฌํญ์ด ์์ ํด๋์ค์ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ก ๊ตฌ์ฑ
6. ๊ฐ์ฒด์งํฅ ํ ์คํธ
- ์ค๋ ๋ ๊ธฐ๋ฐ ํ ์คํธ(Thread-Based Testing): ํด๋์ค๋ค์ ์งํฉ์ ํตํฉ(ํํฅ์)ํด๊ฐ๋ ํ ์คํธ ๋ฐฉ์
- ์ฌ์ฉ-๊ธฐ๋ฐ ํ ์คํธ(Use-Based Testing): ํด๋์ค๋ค์ ๋ ๋ฆฝ์ ์ผ๋ก ๊ฒ์ฌํ๊ณ ์์ ํด๋์ค์ ๊ฒฐํฉ(์ํฅ์)ํ๋ ๋ฐฉ์
- ๊ฒ์ฆ๊ณผ ์์คํ ํ ์คํธ: ์ฌ์ฉ์ ์๊ตฌ๊ฐ ๊ฐ์ฒด์ ์ ํํ ๋ฐ์๋๋์ง ๊ฒ์ฌ
7. ๋์์ธ ํจํด
๊ฐ์
- ๋ฐ๋ณต์ ์ธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ์ค๊ณ ํจํด์ ์ผ๋ฐํ
- GoF(Gang of Four)๊ฐ ์ ์
- ๊ตฌํ ๋จ๊ณ์ ๋ฌธ์ ์ ์ค์ ๋ก ์ ์ฉ ๊ฐ๋ฅ
- ๊ธฐ๋ฅ ํฅ์์ด ์๋ ๋ฌธ์ ํด๊ฒฐ์ ํตํ ๊ตฌ์กฐ ๋ณ๊ฒฝ, ์ฝ๋ ๊ฐ๋ ์ฑ ๋ฑ์ ์ง์ค
๊ตฌ์ฑ ์์
- ํจํด๋ช ๊ณผ ๊ตฌ๋ถ
- ๋ฌธ์ ๋ฐ ๋ฐฐ๊ฒฝ
- ์๋ฃจ์
- ์ฌ๋ก
- ๊ฒฐ๊ณผ
- ์ํ์ฝ๋
ํน์ง
- ๊ตฌ์กฐ ํ์ ๊ณผ ์ํํ ์์ฌ์ํต
- ๊ฐ๋ฐ์ ์์ฐ์ฑ, ํจ์จ์ฑ, ์ฌ์ฌ์ฉ์ฑ, ํ์ฅ์ฑ์ด ํฅ์๋จ
- ์ด๊ธฐ๋น์ฉ์ด ๋ง์ด ๋ค๊ณ ๊ฐ์ฒด์งํฅ ๊ฐ๋ฐ์๋ง ์ฌ์ฉํ ์ ์์
์์ฑ(Creational) ํจํด
- Factorial Method: ์์ํด๋์ค์์๋ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๊ณ ํ์ํด๋์ค๋ ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ง ๊ฒฐ์
- Abstract Factory: ๊ด๋ จ์๋ ์๋ธํด๋์ค๋ฅผ ๋ฌถ์ด์ ํฉํ ๋ฆฌ ํด๋์ค๋ก ๋ง๋ค๊ณ ๊ฐ์ฒด ์์ฑ
- Builder: ๋ณต์กํ ๊ฐ์ฒด ์์ฑ์ ๋จ๊ณ๋ณ๋ก ๋ถ๋ฅ
- Prototype: ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ฒ ์๋ ๊ธฐ์กด์ ๊ฐ์ฒด๋ฅผ ๋ณต์ฌ
- Singleton: ํด๋์ค๊ฐ ์ค์ง ํ๋์ ์ธ์คํด์ค๋ง์ ๊ฐ์ง๋๋ก ํ๋ ํจํด
๊ตฌ์กฐ(Structural) ํจํด
- Adaptor: ์๋ก ๋ค๋ฅธ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ง ํด๋์ค๋ฅผ ํจ๊ป ์ฌ์ฉํ ์ ์๋๋ก ํจ
- Bridge: ๋ณต์กํ๊ฒ ์ค๊ณ๋ ํด๋์ค๋ฅผ ๊ธฐ๋ฅ๋ถ์ ๊ตฌํ๋ถ๋ก ๋ถ๋ฆฌํ์ฌ ์ฐ๊ฒฐ
- Composite: ๊ฐ์ฒด๋ค์ ๊ด๊ณ๊ฐ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ๊ตฌ์ฑ๋๊ณ ๋จ์ผ๊ฐ์ฒด์ ๋ณตํฉ๊ฐ์ฒด๋ฅผ ๋์ผํ๊ฒ ๋ค๋ฃธ
- Decorator: ํด๋์ค ๋ณ๊ฒฝ ์์ด ์ฃผ์ด์ง ์ํฉ์ ๋ฐ๋ผ ๊ธฐ๋ฅ์ ์ถ๊ฐ
- Facade: ๋ณต์กํ ์๋ธ์์คํ ์ ๊ฐํธํ๊ฒ ์ฌ์ฉํ๋๋ก ๋จ์ํ๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณต
- Flyweight: ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ต์ํํ๊ธฐ ์ํด ๋ฐ์ดํฐ ๊ณต์ ๋ฅผ ๊ทน๋ํ
- Proxy: ๋๋ฆฌ์๋ฅผ ํตํด ์ ๊ทผํจ์ผ๋ก์จ ์๋ณธ ๊ฐ์ฒด์ ์์ฑ ์ฐ๊ธฐ, ์๊ฒฉ ์ ์ด, ์ ๊ทผ ์ ์ด ๋ฑ์ ๊ฒฐ์
ํ์(Behavioral) ํจํด
- Interpreter: ์ธ์ด์ ๋ฌธ(Statement)๋ฅผ ํ๊ฐํ๋ ๋ฐฉ๋ฒ์ ๊ท์
- Template Method: ์์ ํด๋์ค์์ ์๊ณ ๋ฆฌ์ฆ์ ๋ผ๋๋ฅผ ์ ์ํ๊ณ ํ์ ํด๋์ค์์ ๊ตฌ์ฒด์ ์ธ ๋จ๊ณ๋ฅผ ์ ์
- Chain of Responsibility: ๋ฌธ์ ํด๊ฒฐ์ ์ํด ์ผ๋ จ์ ์ฒ๋ฆฌ ๊ฐ์ฒด๊ฐ ์์๋๋ก ๋ฌธ์ ํด๊ฒฐ
- Command: ์์ฒญ์ ๊ฐ์ฒด์ ํํ๋ก ์บก์ํํ์ฌ ๋ณต๊ตฌ ์ทจ์๊ฐ ๊ฐ๋ฅํ๊ฒ ํจ
- Iterator: ๋ด๋ถ ๊ตฌํ์ ๋ ธ์ถ์ํค์ง ์๊ณ ์ง์ฝ๋ ๊ฐ์ฒด์ ์ ๊ทผ
- Mediator: ๊ฐ์ฒด๊ฐ์ ํต์ ์ด ์ค์ฌ์๋ฅผ ํตํด ์ด๋ฃจ์ด์ ธ ๊ฒฐํฉ๋๋ฅผ ๊ฐ์
- Memento: ๋กค๋ฐฑ์ ํตํด ๊ฐ์ฒด์ ์ํ๋ฅผ ์ด์ ์ํ๋ก ๋๋๋ฆฌ๋ ๊ธฐ๋ฅ ์ ๊ณต
- Observer: ๊ฐ์ฒด์ ์ํ ๋ณํ๋ฅผ ๊ด์ฐฐํ๊ณ ๋ณํ๊ฐ ์์ ๋๋ง๋ค ๋ฑ๋ก๋ ์ต์ ๋ฒ์ ํต์ง
- State: ๊ฐ์ฒด์ ๋ด๋ถ ์ํ์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ์ํํ๋ ๋ฉ์๋๋ฅผ ๊ตฌํ
- Strategy: ์๊ณ ๋ฆฌ์ฆ์ ๋ณ๋๋ก ๋ถ๋ฆฌ(์บก์ํ)ํ๋ ํจํด
- Visitor: ์๊ณ ๋ฆฌ์ฆ์ ์๋ฃ๊ตฌ์กฐ์์ ๋ถ๋ฆฌํ๊ณ ํด๋์ค ์์ ์์ด ์๋ก์ด ์๊ณ ๋ฆฌ์ฆ์ ์ถ๊ฐ