4.1 ๋์์ธ ํจํด์ ์ดํด
ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์ ์ ๋น ๋ฅด๊ณ ์ฝ๊ฒ ์ตํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ผ๊น??
๋ฐ๋ก ํ๋ฅญํ ํ๋ก๊ทธ๋๋จธ๊ฐ ์์ฑํ ์ฝ๋๋ฅผ ์ฝ๋ ๊ฒ์ด๋ค!!
๊ทธ ํ๋ก๊ทธ๋จ์๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ์๋ ๊ฐ ๊ณ ์ํ๋ฉด์ ์์๋์ ๊ฒฝํ ๋ฑ์ด ๊ณ ์ค๋ํ ๋ น์์๋ค.
๊ทธ๋ฌ๋ฏ๋ก ๊ฒฝํ์ด ๋ถ์กฑํ ํ๋ก๊ทธ๋๋จธ๋ค์ ํ๋ฅญํ ํ๋ก๊ทธ๋๋จธ๋ค์ด ๋ง๋ค์ด๋์ ํน์ ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ฑ ์ ์ฌ์ฉํ๊ณ ์์ฉํ๋ฉด ๋งค์ฐ ์ข์ ๊ฒ์ด๋ค.
๋์์ธ ํจํด์ด๋?
๊ฒฝํ์ด ๋ง์ ์ํํธ์จ์ด ์์ง๋์ด๋ค์ด ์ํํธ์จ์ด๋ฅผ ์ค๊ณํ ๋ ์์ฃผ ๋ฐ์ํ๋ ๋ฌธ์ ๋ค์ ํด๋ฒ๋ค์ ๋ชจ์๋์ ๊ฒ!
๋์์ธ ํจํด์ ๊ตฌ์กฐ
๋์์ธ ํจํด์ ๊ตฌ์กฐ๋ 3๊ฐ์ ํ์์ ์ธ ์์๋ก ๊ตฌ์ฑ๋๋ค.
- ์ฝํ ์คํธ : ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ์ฌ๋ฌ ์ํฉ์ ๊ธฐ์ (์ฆ, ํจํด์ด ์ ์ฉ๋ ์ ์๋ ์ํฉ)
- ๋ฌธ์ (Problem) : ํจํด์ด ์ ์ฉ๋์ด ํด๊ฒฐ๋ ํ์๊ฐ ์๋ ๋์์ธ ์ด์๋ฅผ ๊ธฐ์
- ํด๊ฒฐ(Solution) : ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋๋ก ์ค๊ณ๋ฅผ ๊ตฌ์ฑํ๋ ์์๋ค๊ณผ ์์๋ค ์ฌ์ด์ ๊ด๊ณ, ์ฑ ์, ํ๋ ฅ ๊ด๊ณ๋ฅผ ๊ธฐ์ ํ๋ค. (ํ ํ๋ฆฟ)
'์ฝํ ์คํธ-๋ฌธ์ -ํด๊ฒฐ'๋ก ์ด๋ฃจ์ด์ง ํจํด์ผ๋ก ์ค๋ช ํ ์๋ฅผ ๋ณด์.
- ์ฝํ ์คํธ: ํด๋์ค๊ฐ ๊ฐ์ฒด ์์ฑ ๊ณผ์ ์ ์ ์ดํด์ผ ํ๋ ์ํฉ
- ๋ฌธ์ : ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ ์ญ์ ์ผ๋ก ์ ๊ทผํ๊ณ ๊ด๋ฆฌํ ํ์๊ฐ ์๋ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ค. ๋์์ ์ด๋ฌํ ๋ฐ์ดํฐ๋ ์์คํ ์ ์ ์ผํ๋ค. ์ด๋ค ๋ฐฉ์์ผ๋ก ํด๋์ค์์ ์์ฑ๋๋ ๊ฐ์ฒด์ ์๋ฅผ ์ ์ดํ๊ณ ํด๋์ค์ ์ธํฐํ์ด์ค์ ์ ๊ทผํ๋ ๊ฒ์ ์ ์ดํด์ผ ํ๋๊ฐ?
- ํด๊ฒฐ: ํด๋์ค์ ์์ฑ์๋ฅผ public์ผ๋ก ์ ์ํ์ง ๋ง๊ณ private์ด๋ protected๋ก ์ ์ธํด ์ธ๋ถ์์ ์์ฑ์๋ฅผ ์ด์ฉํด ๊ฐ์ฒด๋ฅผ ์ผ๋จ ์์ฑํ ์ ์๊ฒ ๋ง๋ค๊ณ (์๋ต)
์ด๋ฌํ ๋น์ทํ ์ํฉ๋ง๋ค ๊ตฌ๊ตฌ์ ์ ํ๊ฒ ์ค๋ช ํด์ผํ๋ค๋ฉด ์คํ๋ ค ์์คํ ์ค๊ณ์ ๋ฐฉํด๊ฐ ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ฏ๋ก ์ฐ๋ฆฌ๋ ์ ํจํด์ ์ ์ ํ ์ด๋ฆ์ ๋ถ์ฌํ์ฌ ํ๋์ ์์คํ ์ ๋์์ธํ ๋ ๊ณตํต ์ธ์ด ์ญํ ์ ํ๋๋ก ํ๋ค.
์ด ๊ณตํต ์ธ์ด๋ฅผ ํตํด ์ข ๋ ํจ์จ์ ์ผ๋ก ํ๋์์ ์ ํ ์ ์๋ค.
์ ํจํด์ ์ํฉ์ '์ฑ๊ธํด'์ด๋ผ๋ ์ด๋ฆ์ด ๋ถ์ฌ๋์๋ค.
'์ฑ๊ธํด'์ด๋ผ๋ ๊ณตํต ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ค ์ํฉ ๋ฐ์ ์ ๋๊ตฌ๋ ๊ณต๊ฐํ ์ ์๋ ๊ฒ์ฆ๋ ๋ฐฉ๋ฒ์ ์ฝ๊ฒ ์ ํํ ์ ์๋ค.
KEYPOINT : ํจํด์ ๊ณตํต์ ์ธ์ด๋ฅผ ๋ง๋ค์ด ์์ฌ์ํต์ ์ํ ํ๊ฒ ํ๋ค. (ํ์ ์ ๋งค์ฐ ์ค์!!)
4.2 GoF ๋์์ธ ํจํด
4๋ช ์ ๊ฐ๋ฐ์๋ค์ด ๋์์ธ ํจํด์ 23๊ฐ์ง๋ก ์ ๋ฆฌํ๊ณ "์์ฑ, ๊ตฌ์กฐ, ํ์" 3๊ฐ์ง๋ก ๋ถ๋ฅํจ.
์์ฑ ํจํด์ ๊ฐ์ฒด ์์ฑ๊ด ๊ด๋ จ๋ ํจํด์ผ๋ก ๊ฐ์ฒด์ ์์ฑ๊ณผ ์กฐํฉ์ ์บก์ํํด ํน์ ๊ฐ์ฒด๊ฐ ์์ฑ๋๊ฑฐ๋ ๋ณ๊ฒฝ๋์ด๋ ํ๋ก๊ทธ๋จ ๊ตฌ์กฐ์ ์ํฅ์ ํฌ๊ฒ ๋ฐ์ง ์๋๋ก ์ ์ฐ์ฑ์ ์ ๊ณตํ๋ค.
-> ex) ์ ๊ทธ๋ฆผ์ ์์ฑ ํจํด์ ๋ณด์.
๊ตฌ์กฐ ํจํด์ ํด๋์ค๋ ๊ฐ์ฒด๋ฅผ ์กฐํฉํด ๋ ํฐ ๊ตฌ์กฐ๋ฅผ ๋ง๋๋ ํจํด์ด๋ค. ์๋ฅผ ๋ค์ด ์๋ก ๋ค๋ฅธ ์ธํฐํ์ด์ค๋ฅผ ์ง๋ 2๊ฐ์ ๊ฐ์ฒด๋ฅผ ๋ฌถ์ด ๋จ์ผ ์ธํฐํ์ด์ค๋ก ์ ๊ณตํ๊ฑฐ๋ ๊ฐ์ฒด๋ค์ ๋ฌถ์ด ์๋ก์ด ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ํจํด์ด๋ค.
-> ex) ์ ๊ทธ๋ฆผ์ ๊ตฌ์กฐ ํจํด์ ๋ณด์.
ํ์ ํจํด์ ๊ฐ์ฒด๋ ํด๋์ค ์ฌ์ด์ ์๊ณ ๋ฆฌ์ฆ์ด๋ ์ฑ ์ ๋ถ๋ฐฐ์ ๊ด๋ จ๋ ํจํด์ด๋ค. ๊ฐ๋ น ํ ๊ฐ์ฒด๊ฐ ํผ์ ์ํํ ์ ์๋ ์์ ์ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ฒด๋ก ์ด๋ป๊ฒ ๋ถ๋ฐฐํ๋์ง, ๋ ๊ทธ๋ ๊ฒ ํ๋ฉด์๋ ๊ฐ์ฒด ์ฌ์ด์ ๊ฒฐํฉ๋๋ฅผ ์ต์ํํ๋ ๊ฒ์ ์ค์ ์ ๋๋ค.
-> ex) ์ ๊ทธ๋ฆผ์ ํ์ ํจํด์ ๋ณด์.
4.3 UML๊ณผ ๋์์ธ ํจํด
UML 2.0์์ ๋์์ธ ํจํด์ ํํํ๋ ๋๊ตฌ --> ์ปฌ๋ ๋ณด๋ ์ด์
4.3.1 ์ปฌ๋ ๋ณด๋ ์ด์
์ปฌ๋ ๋ณด๋ ์ด์ ์ ๊ฐ์ฒด๊ฐ ์ํํ๋ ์ญํ ๋ค์ ํ๋ ฅ์ ํํํด์ค๋ค.
UML์์ ์ปฌ๋ ๋ณด๋ ์ด์ ์ ํ์์ ์ฌ์ฉํ๋ฉฐ ํ์ ๋ด๋ถ์ ํ๋ ฅ์ ํ์๋ก ํ๋ ์ญํ ๋ค๊ณผ ๊ทธ๋ค ์ฌ์ด์ ๊ด๊ณ๋ฅผ ํํํ๋ค.
์ปฌ๋ ๋ณด๋ ์ด์ ์ด์ปค๋ฐ์ค๋ ๋ ๊ตฌ์ฒด์ ์ธ ์ํฉ์์์ ์ปฌ๋ ๋ณด๋ ์ด์ ์ ์ฉ์ ํํํด์ค๋ค.
์ ์์์์ ๋์ถ์ ์ญํ ์ "์ํ", ๋ด๋ณด ์ญํ ์ "์ง", ๋์ถ์ธ์ "์ฌ๋"์ด๋ค.
์ฆ, ์ปฌ๋ ๋ณด๋ ์ด์ ์ด์ปค๋ฐ์ค๋ ์ปฌ๋ ๋ณด๋ ์ด์ ์ ์ฐธ๊ฐํ๋ ์์ฉ ํด๋์ค์ ์์กดํ๋ฉฐ ์์กด ๊ด๊ณ์ ๋ถ์ ๋ ์ด๋ธ์ ์์ฉ ํด๋์ค๊ฐ ์ปฌ๋ ๋ณด๋ ์ด์ ์ ์ํํ๋ ์ญํ ์ ๋ํ๋ธ๋ค.
4.3.2 ์์ฐจ ๋ค์ด์ด๊ทธ๋จ
์์ฐจ ๋ค์ด์ด๊ทธ๋จ์ UML 2.0์์ ๊ฐ์ฒด๋ค์ ์ํธ์์ฉ์ ๋ํ๋ด๋ ๋ค์ด์ด๊ทธ๋จ ์ค ํ๋์ด๋ค. ์์ฐจ ๋ค์ด์ด๊ทธ๋จ์ ๊ฐ์ฒด๋ค ์ฌ์ด์ ๋ฉ์์ง ์ก์ ๊ณผ ๊ทธ๋ค์ ์์๋ฅผ ๋ํ๋ธ๋ค. ๊ฐ์ฒด๋ ๊ฐ์ฅ ์๋ถ๋ถ์ ํํ๋๊ณ , ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ๊ฐ์ฒด๋ค์ ๋์ดํ๋ค.
๊ฐ์ฒด ์๋์ ์ ์ ์ด ๋ป์ด ๋๊ฐ๋ ๊ฒ์ '์๋ช ์ '์ด๋ผ ํ๊ณ ํด๋น ๊ฐ์ฒด๊ฐ ์กด์ฌํจ์ ๋ปํ๋ค.
๋ํ, ์๋ช ์ ์ ๋ฐ๋ผ์ ์ข๊ณ ๊ธด ์ฌ๊ฐํ์ด ๋์ฌ ์ ์๋ค. ์ด ์์๋ฅผ 'ํ์ฑ ๊ตฌ๊ฐ'์ด๋ผ ํ๋ค. (๊ฐ์ฒด๊ฐ ์ฐ์ฐ์ ์คํํ๋ ์ํ)
๊ฐ์ฒด ์ฌ์ด์ ๋ฉ์์ง๋ ํ์ดํ๋ก ํ์ํ๋ค. ๋จธ๋ฆฌ ๋ถ๋ถ์ด ์ฑ์์ก๋ค๋ฉด ๋๊ธฐ, ์ ์ฑ์์ก๋ค๋ฉด ๋น๋๊ธฐ์ด๋ค.
<<create>>, <<delete>> ์ ๊ฐ์ ์คํ ๋ ์ค ํ์ ์ ๋ถ์ฌ์ ๋ฉ์์ง๋ฅผ ์ก์ ํ ์๋ ์๋ค.
๋ฉ์์ง๋ฅผ ํํํ ๋ ํ์ ===> [์ํ์ค๋ฒํธ] [๊ฐ๋]: ๋ฐํ ๊ฐ:=๋ฉ์์ง ์ด๋ฆ([์ธ์ ๋ฆฌ์คํธ])
์ ํ์์์๋ ๋ฉ์์ง ์ด๋ฆ ๋นผ๊ณ ๋ชจ๋ ์๋ต ๊ฐ๋ฅํ๋ค.
์ ์ ํ์ดํ๋ '์๋ต' ๋ฉ์์ง๋ฅผ ํํํ๋ค.