Maso200708 Miss Pattern
- 1. ์ ์ฐ๋ฉด ์ฝ, ๋ชป ์ฐ๋ฉด ๋
๋ฏธ์๋ ๋ค์ ๋ณด๋ ํจํด ์ด์ผ๊ธฐ
์ค์ ๋
ธํ์ฐ โ ๋์์ธ ํจํด ํ์ฉ
๊ฐ๋ฐ ๊ณ ์ 12์ธ์ด ๋งํ๋
GoF ๋์์ธ ํจํด(Design Pattern)์ ์์์ผ๋ก ํด์ ํจํด์ด ์ด ์ธ์์ ์๋ ค์ง์ง ์ด๋๋ง 10๋
์ด ํ๋
๋ค. ํ์ง๋ง ๊ตญ๋ด์ ์๋ง์ ํจํด ๊ด๋ จ ์ฑ
์ด ์ถ๊ฐ๋์ด ์์์๋ ๋ถ๊ตฌํ๊ณ , ์ค์ ํ๋ก์ ํธ์ ์ ์ฉ๋๋ ํจ
ํด์ ์๋ ์ฌ์ ํ ์์ ๊ผฝ์ ๋งํผ ์ ๋ค. ๋ฟ๋ง ์๋๋ผ ์ง๊ธ์ ํ์ค๊ณผ๋ ๋ง์ง ์๋ค๊ณ ํธ๋
ํ๋ ๊ฐ๋ฐ์๋ค
๋ ์๊ณ , ํจํด์ ๋จ์ฉ์ด๋ ์ค์ฉ์ผ๋ก ์ธํด ์คํ๋ ค ๋ถ์ ์ ์ผ๋ก ์๊ฐํ๋ ์ด๋ค๋ ์ฝ๊ฒ ์ฐพ์๋ณผ ์ ์๋ค. ์ด
๊ธ์์๋ ๊ฐ๋ฐ์์ ์
์ฅ์์ ํจํด์ ๋ํ ์๋ชป๋ ์๊ฐ๋ค์ ๋ฐ๋ก ์ก์ ๋ณด๊ณ ๊ฐ๋จํ ์๋ฅผ ํตํด ๊ทธ ์ฌ๋ฐ
๋ฅธ ์ฌ์ฉ๋ฒ์ ์ ๋ฆฌํด ๋ณธ๋ค.
ํ์๋ ๋ช ๋
์ ์ด๋ ์ธ๋ฏธ๋์์ GoF, POSA ๋ฑ์ ํจํด์ ๋ํด ๋ฐํํ ์งํ,
โํจํด์ด ๋ญก๋
๊น? ๊ฐ๋จํ ์ค๋ช
ํด ์ฃผ์ธ์!โ ์ง๋ฌธ์ ๋ฐ์ ์ ์ด ์๋ค. ๊ทธ ๋น์ ์์ธํ ํจํด ํ๋ํ๋๋ ๋ฌด์
๋ผ๋
์ธ์ง ์๊ณ ์๋ ๋๊ตฐ๊ฐ๊ฐ ์ ์ ์ ์ฒด์ ์ธ ๊ทธ๋ฆผ์ธ ํจํด์ ์๋ฏธ๋ฅผ ๋ฌผ์ด์จ๋ค๋ฉด ์ด๋ป๊ฒ ๋๋ตํด์ผ ํ
์๊น? ํ์๋ ๊ทธ์ ๋ํ ์ ํํ ๋ต์ ์ฐพ๊ธฐ ์ํด ๋จผ์ ๊ทธ ์ด์์ ๋ํด ์ ๊ทผํด ๋ดค๋ค.
๋์์ธ ํจํด์ด๋?
๋์์ธ(Design)์ De(away) + Sign(note)์ด๋ผ๋ ์๋ฏธ๊ฐ ํฉ์ฑ๋ ๋จ์ด์ด๋ค. De์๋โ๊ฐ๋ณ
๊ฒโ โํ๋ฆฌ๋คโ
๋๋ (away) ๋ผ๋ ์๋ฏธ๊ฐ ๋ด๊ฒจ ์๊ณ , Sign์ด๋ผ๋ ๋ง์ ํ์(note)๋ฅผ ๋จ๊ธด๋ค๋ ์๋ฏธ
๋ฅผ ์ง๋๊ณ ์๋ค. ๋ฏธ์ ์์ ์กฐ๊ฐ์์ ๊ทธ๋ฆด ๋ ํํโ๋ฐ์
ํ๋คโ ๋ง์ ๋ง์ด ์ฌ์ฉํ๋๋ฐ, ๋ฐ๋ก
๋ผ๋
์ดโ๋ฐ์
โ ๋์์ธ์ ๊ฐ์ ์ด์์ ๊ฐ์ง๊ณ ์๋ค. ์ด๋ค ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๊ธฐ ์ ์ ์ด์ง ๋ฐ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๋
๊ณผ
๊ฒ์ ๋ฐ์
์ด๋ผ๊ณ ํ๋๋ฐ, ์ด๋ ์๋ฒฝํ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๊ธฐ ์ด์ ์ ํํ์ ๋ผ๋๋ฅผ ์ก๊ธฐ ์ํ ๊ฒ์ด๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ์ํํธ์จ์ด ๊ฐ๋ฐ์์ ๋์์ธ์ด๋ผ๋ ๋จ์ด ์ญ์ ์ํํธ์จ์ด์ ๊ตฌ์กฐ์ ๋ผ๋๋ฅผ ์ก์๊ฐ
๋ ์์
์ ์๋ฏธํ๋ค.
์ด์ด์โํจํด(Pattern)โ
์ด๋ผ๋ ๋จ์ด๋ ํฅ๋ฏธ๋กญ๊ฒ๋ ์์ด์โFatherโ
์ด๋ผ๋ ๋จ์ด์์ ํ์๋
๊ฒ์ ์ ์ ์๋ค. ์ฐ๋ฆฌ๊ฐ ์๋ฒ์ง์ ์ผ๊ตด์ด๋ ์ ์ฒด์ ํน์ฑ, ์ฑ๊ฒฉ ๋ฑ์ ์๋น์ ๋ฌผ๋ ค๋ฐ์ ๊ฒ์ฒ๋ผ, ์ด
8
๋ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ ๋ ํจํด์ ์จ์โ์ ์ ์ด๋ฐ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐํ์์งโ ์๊ฐ์ ๊ฐ์ง๊ณ ์ ์ฌ
๋ผ๋
ํ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐํ ์ ์๋ ๊ฒ์ด๋ค.
๊ทธ๋ผ ์ด์ ๋์์ธ๊ณผ ํจํด์ด๋ผ๋ ๋จ์ด๋ฅผ ์กฐํฉํด ๋์์ธ ํจํด์ ์๋ฏธ๋ฅผ ์ ์ํ ์ ์๋ค.
โํ๋ก
๊ทธ๋จ์ด๋ผ๋ ์ํ์ ๋ง๋ค๊ธฐ ์ด์ ์ ๋ฐ๋ณต์ ์ผ๋ก ์์ฃผ ์ฌ์ฉ๋๋ ๋ฐ๊ทธ๋ฆผ์ด๋ ์ค์ผ์น ๋ฑ์ ๋ง๋ จํด๋
์์์
indigoguru@gmail.com
๋ ๊ฒโ์ด๊ฒ์ด ๋ฐ๋ก ๋์์ธ ํจํด์ ์ ์๋ผ๊ณ ํ ์ ์๋ค.
.
Microsoft MVP์ Devpia Architec
ture&Design ์น์
์ ์์ฝ์ผ๋ก ํ๋ ์ค
ํจํด์ ๋ํ ๋ถ์ ๋ค
์ด๋ค. ๋ถ์กฑํ ์ค๋ ฅ์ด์ง๋ง ๊ฐ์ง ์ง์์
์ต๊ทผ ๋ค์ด ์ข
์ข
ํจํด์ ๋ํ ์ฌ๋ฌ ๊ฐ์ง ๋ถ๋ง ์์ธ ๋ชฉ์๋ฆฌ๋ฅผ ๋ค์ ์ ์๋ค. ํจํด์ ์ฌ์ฉํ๋ ์ค
๊ณต์ ํ๋ ์์ธ๋งํผ์ ๋๊ตฌ๋ณด๋ค ๋ถ์๋ผ
๊ณ ์ํํ๊ณ ์์ผ๋ฉฐ ์ง๋ 3๋
๊ฐ ์ํํธ
ํ๋ ค ์ฑ๋ฅ์ด ๋ ๋๋น ์ก๋ค๊ฑฐ๋ ๊ฐ๋
์ฑ์ด ๋จ์ด์ ธ ์ ์ง ๋ณด์ํ๊ธฐ๊ฐ ๋ ํ๋ค์ด์ก๋ค๋ ๊ฒ์ด ์ฃผ๋ฅผ ์ด
์จ์ด๊ณตํ์ ๊ด๋ จ๋ ์ธ๋ฏธ๋์ ์คํฐ๋๋ฅผ
์งํํ๊ณ ์๋ A&D Eva์ ๋ฆฌ๋์ด๋ค.
๋ฃฌ๋ค. ์ ์ด๋ฐ ํ์์ด ๋ฐ์ํ๊ฒ ๋์์๊น? ์๋ฒฝํ ๋ถ์์ ์๋๊ฒ ์ง๋ง ํ์์ ๊ฒฝํ์ ๋น์ถฐ ๊ทธ ์
์ธ๊ณ์ ์ธ ํจํด ํํ์ธ PLOP์ ๊ตญ๋ด์
์ธ์ ์ค๋ช
ํด ๋ณธ๋ค.
๋ ๋ง๋๋ ๊ฒ์ด ๊ฟ์ด๋ค.
158 m a s o
- 2. ์ C๊ฐโ์ธ๋ฉฐ ๊ฒจ์ ๋จน๊ธฐโ ํน๋ณํ ์ธ์์ธ๊ณ ์์ด ํ๋ก๊ทธ๋จ ๋ชจ๋
๋ก
GoF์ 23๊ฐ์ง ํจํด์ด ๋ชจ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด ์ค ๊ฒ์ด๋ ์๋ชป๋ ํ์
๋ง์ ์ด๋ณด ๊ฐ๋ฐ์๋ค์ GoF ํจํด์ด ํจํด์ ์์์ด๋ฉฐ ๋์ธ ๊ฒ์ผ ๋ฅผ ๋ ๋งก๊ฒ ๋๋ค. ํ์ง๋ง C๋ ํ์ฌ์์ ์ ํด ๋์ ๋ฐ๋๋ผ์ธ์ ์ง
๋ก ์๊ณ ์๋ค. ํ์ง๋ง ์ง๊ตฌ์์๋ ์ํํธ์จ์ด์ ์ฐ๊ด๋ ๋ค์ํ ํค๊ธฐ ์ํด ํ๋ ์์ํฌ์ ๋ํ ์ดํด ์์ด ์์ ๋ง์ ์ฝ๋๋ฅผ ์ง๊ฒ
์นดํ
๊ณ ๋ฆฌ์ ์์ญ ๊ฐ์ง ํจํด ์์ ์ด ๋์ ์๋ค. ์๋ฅผ ๋ค์ด ๊ฑฐ๋ํ ๋๊ณ , ์ฌ์ง์ด ๋น์ฅ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ธฐ ์ํด ํ๋ ์์ํฌ ๋ด๋ถ์ ์์
์์คํ
์ ๊ตฌ์กฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ก์์ฃผ๋ ๊ตฌ์กฐ ํจํด์ ๋น๋กฏํด ๋ถ์ฐ ์ด ์ํ๋ ์ฝ๋๋ฅผ ์ฝ์
ํ๊ฒ ๋๋ค. ์ด๋ฐ ์ํฉ์์ ์ฌ๋ฌ๋ถ์ด ์ด ํ
์์คํ
์ ์ํ ํจํด, ๋ฆฌ์ผํ์ ์์คํ
(Realtime System)์ ๋ก๊ทธ๋จ์ ๊ฐ๋ฐ ์
๋ฌด๋ฅผ ์ธ์ ๋ฐ์๋ค๊ณ ์๊ฐํด ๋ณด์. ์๊ฐ๋ง ํด๋
QoS๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํ ํจํด, ๋ณด์ ํจํด, ๋จ์ ํ
์คํ
(Unit ๋์ฐํ ๊ฒ์ด๋ค. ์ฌ๋ฌ๋ถ์ด ํจํด์ ์ต์ํ ๊ฐ๋ฐ์๋ผ๊ณ ํ ์ง๋ผ๋ ํ
Testing)์ ์ํ ํจํด, ํ๋ก์ ํธ๋ฅผ ์ ๋๋ก ๊ด๋ฆฌํ๊ธฐ ์ํ ํจํด ๋ ์์ํฌ ์์ ๋ค์ฃฝ๋ฐ์ฃฝ๋ ์ฝ๋ ํ์ ์๋นํ ๋ง์ ์๊ฐ ๋์ ๋ฆฌ
๋ฑ ์ฌ๋ฌ ๊ฐ์ง ๊ด๋ จ ์์ ๋ค์ด ์๊ฐ๋์๊ณ , 1994๋
์ดํ ๋งค๋
๊ฐ์ต ํฉํ ๋ง ์์
์ ํด์ผ ํ ๊ฒ์ด๊ณ , ๋ํ ๋ง๋ ์ ๋๋ ๋ฐ๋๋ผ์ธ์ด ๋
๋๋ PLOP ํํ์์๋ ๋ฌด์ํ ํจํด๋ค์ด ์์์ ธ ๋์ค๊ณ ์๋ค. ์์ ์๋ค๋ฉด ๋ฆฌํฉํ ๋ง์ ๊ณ ์ฌํ๊ณ ๋น์ฅ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ธฐ์ํด ๋์ฑ
์ด๋ฐ ์ํฉ์์ ์ด๋ค ํน์ ๋ฌธ์ ์ ๋ฑ ๋ค์ด๋ง๋ ํจํด์ 24๊ฐ์ง ๋ ๊ผฌ์ธ ์คํ๊ฒํฐ์ ๊ฐ์ ํ๋ก๊ทธ๋จ์ ๋ง๋ค๊ฒ ๋ ๊ฒ์ด๋ค. ๊ฒฐ๊ตญ ํจ
์์ ์ฐพ๊ธฐ๋ณด๋ค๋ ์์ฒ ๊ฐ์ง ํจํด์์ ์ฐพ๋ ๊ฒ์ด ํจ์ฌ ์ ๋ฆฌํ์ง ํด์ ์ ์๋ค๊ณ ํ๋๋ผ๋ ๊ทธ์ ๋ํ ์ง์์ ์กฐ์ง๊ณผ ํ ๋ด์์ ๋ชจ
์์๊น? ๋ฌผ๋ก ๋ช ์ฒ ๊ฐ์ง ํจํด์ ์ธ์ ์ต๋ํ๋๋๊ณ ๋ฐ๋ฐํ ์ง๋ ๋ ๊ตฌ์ฑ์์ด ์ถฉ๋ถํ ์ดํดํ๊ณ ๊ณต์ ํ์ง ์๋๋ค๋ฉด, ๋ชจ๋ ๊ฒ์ด ๋ฌด
๋ชจ๋ฅด์ง๋ง, ํํ์ด ๊ณต๋ถํด๋๋ค๋ฉด ์ํ์ฐฉ์ค๋ฅผ ์ค์ด๋ ๋ฐ ํฐ ๋์์ด ์ฉ์ง๋ฌผ์ด ๋ ๊ฐ๋ฅ์ฑ์ด ํฌ๋ค.
๋ ๊ฒ์ด๋ค.
ํจํด์ ๋ฐ๋ผ๋ณด๋ ์ฌ๋ฐ๋ฅธ ์์ธ
๋น๋ก ๋ถ์กฑํ ๊ฒฝํ์ด์ง๋ง, ์ข ๋ ์ค๋ฌด์์ ๋์์ธ ํจํด์ ์ ์ฌ
์ ๋ฌด๋น์ด ์ฌ๋ ์ก๋๋ค
๋ง์ฝ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฝ์ด ์์ผ๋ฉด์ ๋น ๋ฅธ ์๋ต์๋๋ฅผ ์๊ตฌํ๋ ์ ์ฉํ ์ ์๋๋ก ๋ช ๊ฐ์ง ์กฐ์ธ์ ์ ์ํด ๋ณธ๋ค.
๋ฒ ๋๋ ์์คํ
(Embedded System)์ ๋ณํ์ ํ์ฅ์๋ ์ ์ฐํ
์ง๋ง ์๋ต์๋๊ฐ ๋๋ ํจํด(Component Configurator, ๋๋ฌด๋ณด๋ค๋ ์ฒ์ ๋ณด๋ผ(ํจํด์ ๋ง๋๋ 5๊ฐ์ง ๋ฒ์น ํ์
)
Pipe&Filter)๋ค์ ์ฐ๋ํด ์ ์ฉ์ํค๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ํํ ํจํด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํน์ ํจํด์ ํ๋ํ๋ ์๊ฐํ๋ฉด์ ๋งค์น
๋จ์ฉ์ ๋๋ถ๋ถ ์ด๋ฌํ ์ํฉ์ ๋์ฌ ์๋ค. ์์ ์ด ์๊ณ ์๋ ํจํด ํ๋ ๊ฒ๋ณด๋ค๋ ํจํด์ ๋ง๋๋ 5๊ฐ์ง ๋ฒ์น์ ์๊ฑฐํด ์๊ฐํ๊ธธ ๊ถ
์ด ์ด ๋ฌธ์ ์ ์ ํฉํด ๋ณด์ธ๋ค๋ ๊ฒ๋ง ๊ณ ๋ คํ ๋๋จธ์ง, ์ ์ ์์คํ
ํ๋ค(์งง์ ํ์ด์ง์ ํจํด์ ๋ง๋๋ 5๊ฐ์ง ๋ฒ์น์ ์ค๋ช
ํ๋ ๊ฒ์
์ด ์ถ๊ตฌํ๋ QoS(Quality of Service)๋ฅผ ์ ํ ๊ณ ๋ คํ์ง ์๊ณ ํจ ๋งค์ฐ ์ด๋ ค์ด ์ผ์ด๋ฏ๋ก, ํ์์ ์จ๋ผ์ธ ๋์์ ์ฐธ๊ณ ์๋ฃ๋ฅผ ํ์ฉํ
ํด์ ์ ์ฉํ๋ ๊ฒ์ด๋ค. ์ค์ ๋๋ถ๋ถ์ ํจํด์ด ์ถ๊ตฌํ๋ ๊ฒ์ ์ ๊ธธ ๋ฐ๋๋ค). ์ฌ๋ฌ๋ถ์ด Observer, Model-View-Controller, Pub
์ฐ์ฑ๊ณผ ํ์ฅ์ฑ ๊ทธ๋ฆฌ๊ณ ์ ์ง๋ณด์์ฑ์ด์ง๋ง, ์๊ฐ์ ๋ฐ๋๋ผ์ธ์ ์ lisher-Subscriber, Event Channel ํจํด์ ๊ฐ๊ฐ ๋ณ๊ฐ์ ํจํด์ผ
๊ตฌํ๋ ๋ฆฌ์ผํ์ ์์คํ
์ด๋ ๋ฉ๋ชจ๋ฆฌ ๋ฐ CPU์ ์ ์ฝ์ ๋ฐ๋ ์ ๋ก ์๊ฐํ๋ค๋ฉด, ๋ฌด์๋ณด๋ค ํจํด์ ๋ง๋๋ 5๊ฐ์ง ๋ฒ์น์ ์ดํด๋ณผ ํ
๋ฒ ๋๋ ์์คํ
๋ฑ์์ ์ฌ์ฉํ๊ธฐ์๋ ๋ค์ ๋ฌด๋ฆฌ๊ฐ ๋ฐ๋ฅด๋ ํจํด์ด ์๊ฐ ์๋ค. ์ด ํจํด๋ค์ ์ฌ์ฉ๋๋ ๋๋ฉ์ธ์ ๋ชจ๋ ๋ค๋ฅด์ง๋ง, DIP
์กด์ฌํจ์ ์์ด์๋ ์ ๋๋ค. (Dependency Inversion Principle, ์์กด ๊ด๊ณ ์ญ์ ์ ๋ฒ์น)์
์๊ฑฐํ๋ฉด ๋ชจ๋โ์๋ค์์ด ๊ฐ์ฒดโ ๋ง๋ ๋ ์ ์ฉ๋จ์ ์ ์ ์๋ค.
๋ฅผ
๋ชจ๋ ๊ฐ๋ฐ์๊ฐ ํจํด์ ์ต์ํ์ง ์๋ค
๋ ํ๋์ ๋ฌธ์ ๋ ํจํด์ ์ด์ฉํด ์ถฉ๋ถํ ํ์
์ด ๊ฐ๋ฅํ ๋งํผ ํจํด๊ฐ์ ์ฐ๊ด์ฑ์ ์ดํด๋ณด๋ผ
๋ชจ๋ ๊ฐ๋ฐ์๋ค์ด ํจํด์ ์ต์ํ์ง ์๋ค๋ ์ ์ด๋ค. ์ฐ๋ฆฌ ์ฃผ์์ ํจํด์ ๊ฒฐ์ฝ ๋
๋จ์ ์ผ๋ก ์ฌ์ฉ๋์ง ์๋๋ค. ํจ๊ป ์ฌ์ฉ๋๋ ํจํด
๋น์ผ๋น์ฌํ๊ฒ ์ผ์ด๋๋ ํ ๊ฐ์ง ์๋ฅผ ๋ค๊ฒ ๋ค. GoF ํจํด์ ์ ์ ๋ค์ ์ฃผ์ ๊น๊ฒ ์ดํด๋ณด๊ธธ ๋ฐ๋๋ค. Component Configurator,
๋ ๊ฐ๋ฐ์ A๊ฐ ๋ณํ์ ์ ์ฐํ๋ฉด์ ํ์ฅ์ด ์์ ๋ก์ด ํ๋ก๊ทธ๋จ์ Reflection, Template Method(Strategy)๋ ํญ์ ํ๋์ ๋ฌถ์์ผ
๋ง๋ค์๋ค๊ณ ํ์. ํ์ง๋ง ์ด๋ ๋ ๊ฐ๋ฐ์ A๊ฐ ๋ค๋ฅธ ํํธ๋ก ์๋ฆฌ ๋ก, Chain of Responsibility๋ ์ญ์ Iterator ํจํด๊ณผ ํจ๊ป ์ฐ๋
๋ฅผ ์ฎ๊ธฐ๊ฒ ๋๋ฉด์ ๊ฐ๋ฐ์ B๊ฐ A์ ์
๋ฌด๋ฅผ ๋์ ๋งก๊ฒ ๋์๋ค. ํ ๋์ด ์ฌ์ฉ๋๋ค.
์ง๋ง ๊ณ ๊ธ ํจํด์ ๋ ์ ์๊ณ ์๋ B๋ ์ง๊ธ์ ์ํฉ์ ๊ทธ ๊ตฌ์กฐ๊ฐ
์ ํฉํ์์๋ ๋ถ๊ตฌํ๊ณ , ํฅํ ์ฌํ์ฉ์ฑ์ ๋์ด๊ธฐ ์ํด A๊ฐ ๋ง๋ ํจํด์ ํฌ๊ฒ ๋ ๊ฐ์ง ์์น์ ์๊ฑฐํ๋ค.
๋ชจ๋์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์์ํฌ๋ฅผ ๋ง๋ค์๋ค. ๊ทธ๋ฌ๋ ์ค์ ๊ฐ์์ค๋ ์ด๋ค ๊ด์ ์์ ๋ณด๋ฉด ํจํด์ ํฌ๊ฒ ๋ ๊ฐ์ง ์์น์ ์๊ฑฐํ๊ณ ์
B๊ฐ ํ์ฌ๋ฅผ ๊ทธ๋ง๋๊ณ ๋ ๋ฌ๋ค. ๊ทธ ํ ํจํด์ ์ต์ํ์ง ๋ชปํ ๊ฐ๋ฐ ๋ค. GoF ์๋์ ๋์จ ์ด ๋ ์์น์ ๊ณผ์ํ๊ฐํ๋ ๊ฐ๋ฐ์๋ค์ด ์
m a s o 159
- 3. ๊ฐ๋ฐ ๊ณ ์ 12์ธ์ด ๋งํ๋ ์ค์ ๋
ธํ์ฐ_ ๋ฏธ์๋ ๋ค์ ๋ณด๋ ํจํด ์ด์ผ๊ธฐ
๊ฐ๋ณด๋ค ๋ง์ด ์กด์ฌํ๋ค. ํจํด๊ณผ ๊ด๋ จ๋ ์ฑ
ํ ๊ถ์ ์ฝ์ ๊ฐ๋ฐ์๋ผ ๋ณํ์ ์ ์ฐํ ํ๋ก๊ทธ๋จ์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์๊ฐํ๊ณ ์ ํ๋ค. ์์ฆ
๋ฉด ์ด ๋ ๊ฐ์ง ์์น์ ๋ค์ ํ ๋ฒ ์ดํด๋ณด๊ธธ ๋ฐ๋๋ค. ๋ค์๊ธ ์ ์จ ๋ง์ ํ๋ซํผ์ด๋ ๊ฐ๋ฐ์๋ค ์ฌ์ด์์ ๋ฉํ๋ฐ์ดํฐ(Metadata) ์ง
์ ๋๋ผ๊ฒ ๋๋ ์๊ฐ์ ๋ง์ดํ๊ฒ ๋ ๊ฒ์ด๋ค. ํฅ์ ์ธ ํ๋ก๊ทธ๋๋ฐ์ด ๋๋๋๊ณ ์๋ค. ๋ณํ๊ฐ ์์ฃผ ๋ฐ์ํ๋ ๋ถ๋ถ
(๋ณด์ ํ๋กํ ์ฝ ๊ต์ฒด, DB ์ฐ๊ฒฐ ๋ฌธ์์ด ๋ณ๊ฒฝ, ๋คํธ์ํฌ ํ๋กํ
์ฝ)๋ค์ ๋ฉํ๋ฐ์ดํฐ์ ๊ธฐ์ ํจ์ผ๋ก์จ, ํ๋ก๊ทธ๋จ์ ์์ ์์ด ๋ณ
โ 1์์น : Program to an interface, not to an implementation
โ์ธํฐํ์ด์ค(๊ณ์ฝ) ๊ธฐ๋ฐ์ ํ๋ก๊ทธ๋๋ฐ์ ํด๋ผ.โ์ง๊ธ ํ๋ฒ ๋ ํ์ ๋น ๋ฅด๊ฒ ๋์ฒํ๊ธฐ ์ํด ๋ง์ด ์ฌ์ฉํ๊ณ ์๋ค. ํ์ง๋ง ์ด๋ฐ ๊ณผ
์์ธ ํจํด ์์ ์ ํผ์ณ๋ณด๊ธธ ๋ฐ๋๋ค. ๋ชจ๋ ํจํด๋ค์ด ์ถ์ ํด๋์ค ์ ์์๋ ๋ ๋ค๋ฅธ ๋ฌธ์ ์ ์ด ๋ฐ์ํ๋ค. ํ์ผ(file)์ ์ค์ ์ ๋ณด๊ฐ
(Abstract Class)๋ ์ธํฐํ์ด์ค(Interface)๋ก๋ถํฐ ์์์ ๋ฐ๊ณ ์๋ค ๋ณด๋ ์์ฃผ ์ฝ์ด ๋ค์ด๋ ๋ถ๋ถ์ ๊ฒฝ์ฐ์๋ ํ์ผ ์ ๊ทผ์ ์ํด
์๋ค. ์ด๊ฒ์ ๋คํ์ฑ์ ์ ์งํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก ๋์ผํ ์ธํฐํ์ด ์ง๋์น๊ฒ ๋น๋ฒํ I/O๊ฐ ๋ฐ์ํ๋ค๋ ๊ฒ์ด๋ค. ์ด๋ ๋น ๋ฅธ ์๋ต์๋
์ค(Interface)๋ฅผ ์์๋ฐ์ ๊ฐ์ฒด๋ผ๋ฉด ๋ฐํ์(Runtime)์์ ์ธ์ ๋ ๋ง์ ํด๋ผ์ด์ธํธ๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๋ ํ๋ก๊ทธ๋จ์์๋ ์ฑ๋ฅ ์ ํ
๋ ์ง ์ฝ๊ฒ ๋ฐ๊ฟ ์ฌ์ฉํ ์ ์๋ค. ์ฌ๋ฌ๋ถ์ ํ๋ก๊ทธ๋จ์์ ์ ๋ ฌ ์ ์ ์ฃผ๋ ์์ธ์ด ๋๋ค. ๋ฐ๋ผ์ ์ค์ ํ์ผ(App.Config ๋๋
๊ณ ๋ฆฌ์ฆ์ผ๋ก Quick Sorting์ ์ฌ์ฉํ๋๋ฐ, ๋๊ตฐ๊ฐ ๋ ๋น ๋ฅธ Super Web.Config)์ ์ ๋ณด๋ฅผ ๊ณ ์ค๋ํ ๋ค๊ณ ์๋ Configuration
Quick Sorting ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ๋ฐํ๋ค๊ณ ํ์. Handler๋ฅผ <๋ฆฌ์คํธ 1>์ฒ๋ผ ๋ง๋ค๊ณ , ํ๋ก๊ทธ๋จ์ ๋ก๋ฉํ ๋
์ด ๋ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ด ๋์ผํ ์ธํฐํ์ด์ค๋ง ๊ฐ์ง๊ณ ์๋ค๋ฉด ์ Handler์์ ์ค์ ํ์ผ์ ์ ๋ณด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ๊ฒ ๋๋ค. ๊ทธ๋ฌ
์คํ
์ ์ค์ง ์์ด ๊ต์ฒดํ ์ ์์ ๊ฒ์ด๋ค. ์ธํฐํ์ด์ค์ ์์(๊ณ ๋ฉด ํด๋ผ์ด์ธํธ(Client)๋ค์ด Handler๋ฅผ ํตํด ์ ๋ณด๋ฅผ ์ป์ด์ค๊ฒ ๋
์ฝ ๊ธฐ๋ฐ)์ด ์ด๋ป๊ฒ ๋ณด๋ฉด ๊ฐ ๊ฐ์ฒด๊ฐ ์ง๋ ํํ์ ์์ ๋ฅผ ์ต์ํ๋ ๋ฏ๋ก, ํ์ผ I/O์ ๋ํ ์ฑ๋ฅ ์ ํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
๊ฒ์ผ๋ก ์๊ฐํ ์ ์์ง๋ง, ์ด๋ฐ ์ฝ๊ฐ์ ์ต์์ผ๋ก ์ธํด ์์ ๋กญ๊ฒ
<๋ฆฌ์คํธ 1> ์ค์ ํ์ผ์ ์ ๋ณด๋ฅผ ์ฝ์ด์ค๋ Handler์ ์ - .NET ์ฉ
๊ต์ฒดํ ์ ์๋ ์ฅ์ ์ ์ป์ ๊ฒ์ ๋ถ๋ช
ํ๋ค. ์ฌ์ค ๋ชจ๋ ํจํด์ด
using System.Collections.Specialized;
Strategy๋ Template Method ํจํด์ ์ฝ๊ฐ ๋ณํํ๋ค๊ณ ํด๋ ๊ณผ
using Microsoft.ApplicationBlocks.ExceptionManagement;
์ธ์ ์๋ ๊ฒ์ด๋ค.
public class WebAppConfig
{
โ 2์์น : Favor Object Composition over Class Inheritance private static string mSiteName;
โํด๋์ค ์์(Class Inheritance)๋ณด๋ค๋ ๊ฐ์ฒด ์กฐํฉ์ ์ ํธํด private static string mConnectString;
static WebAppConfig()
๋ผ.โ ๋ ๋ฒ์งธ ์์น์ ํ์ฌ ๋ง์ ๋
ผ๋์ ์ง๋๊ณ ์๋ค. ์ฌ์ง์ด ๊ตญ
์ด
{
๋ด์ธ์ ๋ช ๊ฐ์ง ์์ ๋ค์ ์ด ๋ ๋ฒ์งธ ์์น์ ์๋ฏธ๋ฅผ ์ ๋๋ก ๋ถ์ NameValueCollection nvc = new
NameValueCollection();
ํ์ง ์์ ์ฑ,
โ์์๋ณด๋ค๋ ์กฐํฉ์ ์ ํธํ๋ผโ ๊ทน๋จ์ ์ธ ํํ์
๋
try {
์ฌ์ฉํ๊ธฐ๋ ํ๋ค. GoF์ ๋์ค๋ ๋ชจ๋ ํจํด์ด ์์์ ์ฌ์ฉํ๋๋ฐ // GetConfig ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด web.config์ ๋ฑ๋ก๋ ํด๋์ค ๋ด์
์์์ ์ฌ์ฉํ์ง ๋ง๋ผ๋ ์๋ฏธ๋ฅผ ์ด๋ป๊ฒ ๋ฐ์๋ค์ฌ์ผ ํ ๊น? GoF // Create method๊ฐ ํธ์ถ๋์ด NameValueCollection ๊ฐ์ฒด๋ฅผ
// ๋๋๋ฆฐ๋ค.
๋์์ธ ํจํด์ด ๋ฑ์ฅํ ์๋์ ๋ฐฐ๊ฒฝ์ ๊ณ ๋ คํ๋ฉด ์ด๋ ์์ธ๋ก ๊ฐ๋จ
nvc =
ํด์ง๋ค. ๋น์ ์ด ์์น์ C++๋ฅผ ๊ธฐ์ค์ผ๋ก ์ฐ์๋ ํฐ๋ผ ์ธํฐํ์ด (NameValueCollection)System.Configuration.ConfigurationSet
tings.GetConfig(quot;AppConfigquot;);
์ค๋ผ๋ ๋ช
์์ ์ธ ๊ฐ๋
์ด ์กํ ์์ง ์์ ์๋ฏธ์ ์ฐจ์ด๋ฅผ ๋ฐ์์ํจ
if ((nvc != null))
๊ฒ์ด๋ค. ํด๋์ค ์์์ ํ๋์ ์ธ ์๋ฏธ๋ก ํ์ดํ์๋ฉด ๊ตฌํ ์์์
{
๊ฐ๊น๋ค. ์ด๋ฏธ ์์๋ ํด๋์ค๋ฅผ ๊ตฌํ ๋ฐ์ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค๋ ๊ฐ mConnectString = nvc(quot;ConnectStringquot;);
mSiteName = nvc(quot;SiteNamequot;);
์ฒด ์กฐํฉ(Component ๋ฐฉ์)์ ์ ํธํ๋ผ๋ ์๋ฏธ์ธ ๊ฒ์ด๋ค. ์ค์ํ
}
๊ฒ์ ๊ฐ์ฒด ์กฐํฉ์ด ๋ด๋ถ์ ์ผ๋ก ์ธํฐํ์ด์ค ์์(์ง๊ธ์ ์ฉ์ด๋ก๋ }
Interface Implementation)์ ์ฌ์ฉํ๋ค๋ ๊ฒ์ด๋ค. ์ด์ ๊ด๋ จํด catch (Exception exp)
{
ใGoF Design Patternใ ์ ์์ธ Eric Gamma์ ์ธํฐ๋ทฐ๋ฅผ ์ฐธ
์
ExceptionManager.Publish(exp);
๊ณ ํ๋ฉด ๋ณด๋ค ์์ธํ ๋ด์ฉ์ ํ์ธํ ์ ์๋ค. }
}
์์คํ
์ค์ง๊ฐ ์๋ ์ ์ฐํ ํ๋ก๊ทธ๋จ ๋ง๋ค๊ธฐ public static string SiteName
ํ์๋ ๋ช ๊ฐ์ง ํจํด์ ์กฐํฉ์ ์๋ก ๋ค์ด ์์คํ
์ ์ค์ง ์์ด
160 m a s o
- 4. Subscriber ํจํด์ ์ ์ฉํ ํ์๊ฐ ์๋ค.
{ get { return mSiteName; } }
public static string ConnectString
{ get { return mConnectString; } }
Get Info
Load Change
} Config File
Handler
Client A
Notify
using System.Collections.Specialized;
using Microsoft.ApplicationBlocks.ExceptionManagement;
FileSystemWatcher
Configuration File
public class WebAppConfigHandler : .NotifyFilter
App.config
IConfigurationSectionHandler Web.config
{
public object A Smart Developer
IConfigurationSectionHandler.Create(object parent, object
<๊ทธ๋ฆผ 1> Publisher-Subscriber์ Configuration Handler์ ๋ง๋จ
configContext, Xml.XmlNode input)
{
// 1. xpath๋ฅผ ํตํ ์ฒ๋ฆฌ <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ์ด ์ค์ ํ์ผ์ ๊ฐ์ํ๋ ํ๋์ Monitor(Wa
// 2. xml elements enumeration
tcher)๋ฅผ ํ๋์ Publisher๋ก ๋ง๋ค๊ณ Handler๋ค์ Subscriber
// 3. NameValueSectionHandler์ ์ด์ฉ
๋ก ๋ง๋ค๋ฉด ๋ ๊ฒ์ด๋ค. ์ค์ํ ๊ฒ์ ์ค์ ํ์ผ์ ๋ณ๊ฒฝ ๋ด์ฉ์ ๊ฐ์ง
NameValueCollection nvc;
NameValueSectionHandler handler;
ํ๋ ๊ฐ์์(Watcher)๋ฅผ ์ด๋ป๊ฒ ๊ตฌํํ๋๋๋ค. ๋คํ์ค๋ฝ๊ฒ๋
try {
.NET 2.0 SDK๋ถํฐ๋ System.IO ๋ค์์คํ์ด์ค์์ File
handler = new NameValueSectionHandler();
nvc = SystemWatcher.NotifyFileter๋ฅผ, ์๋ฐ์์๋ ๊ฐ๋ฐ์์ ์ํด ๋ง
(NameValueCollection)handler.Create(parent, configContext,
๋ค์ด์ง ์ ์ฌํ NotifyFilter๋ฅผ ์ ๊ณตํ๊ณ ์๋ค(๊ตฌํ ๋ชจ๋์ ์ฐธ๊ณ
input);
์๋ฃ์ ์๊ฐ).
}
catch (Exception exp) {
์ด๋ฌ์ ๋์ค์ผ์ ์๋ก๋ <๋ฆฌ์คํธ 2>์ Event Handler ๋ถ๋ถ์
ExceptionManager.Publish(exp);
ํ๋ฉด ์ถ๋ ฅ ๋์ ์ค์ ์ ๋ณด๋ฅผ ๊ฐ์ง Handler๋ก ๋ณ๊ฒฝ ๋ด์ฉ์ ํต๋ณด
throw exp;
} ํ๋ ๋ก์ง๋ง ์ถ๊ฐํ๋ฉด ๋ฐํ์์์๋ ์ ์ฐํ ๋ณํ๋ฅผ ๋ํ๋ด๋ ํ
return nvc;
๋ก๊ทธ๋จ์ ๋ง๋ค ์ ์๋ค. ์ฌ๊ธฐ์๋ ํ์ด์ง ์ ์ฝ ํ์ ์๋ฒฝํ ์์ค
}
์ฝ๋๋ฅผ ๋ณด์ฌ์ฃผ์ง ๋ชปํด ์์ฝ์ง๋ง, ํฐ ํํธ๋ ๋ชจ๋ ์ฃผ์์ผ๋ฏ๋ก ๋
}
๋จธ์ง์ ๊ตฌํ์ ๋
์๋ค์ ๋ชซ์ผ๋ก ๋จ๊ธฐ๊ณ ์ ํ๋ค.
ํ์ง๋ง ์ฐ๋ฆฌ๋ ๋ถ์์ฉ์ด๋ผ ํ ๋งํ ์๋ก์ด ๋ฌธ์ ๋ฅผ ๋ง๋๊ฒ ๋
๋ค. ๋ฐ๋ก ํ์ผ ์ ๋ณด์ Handler๊ฐ์ ๋ฐ์ดํฐ ์ผ์น์ฑ์ ๋ณด์ฅํ ์
์๋ค๋ ์ ์ด๋ค. ํ๋ก๊ทธ๋จ ๋ก๋ฉ์์๋ง ํด๋น ์ ๋ณด๋ฅผ ๋ก๋ํ๊ธฐ ๋๋ฌธ ์ด๋ฌ์ ๋์ค์ผ : Pattern.zip
์ ์ค์ ํ์ผ์ ์ ๋ณด๋ฅผ ๋ณ๊ฒฝํ๋๋ผ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ ์๋
Handler์ ์ ๋ณด๊ฐ ๋ณ๊ฒฝ๋์ง ์๋ ๊ฒ์ด๋ค. ๊ฒฐ๊ตญ ์์คํ
์ ์ ์ ์ฐธ๊ณ ์๋ฃ
1. Design Principles from Design Patterns(Eric Gamma์ ์ธํฐ๋ทฐ),
์ ์ง์ํค๊ณ ์ฌ ์์ํจ์ผ๋ก์จ ์ค์ ํ์ผ ์ ๋ณด์ ๋ณ๊ฒฝ๋ ๋ด์ฉ์ ์ฝ
http://www.artima.com/lejava/articles/designprinciplesP.html
์ด์ค๋ ๋ฐฉ๋ฒ ๋ฐ์๋ ์๋ค. ๋ค์ ๋งํ์๋ฉด, ํ์ผ I/O๋ฅผ ์ค์ด๋ค ๋ณด 2. Windows File System Watcher for Java,
http://www2.hawaii.edu/~qzhang/FileSystemWatcher/index.html
๋ Handler์ ์ค์ ํ์ผ๊ฐ์ ๋ฐ์ดํฐ ๋ถ์ผ์น๊ฐ ๋ฐ์ํด ์์คํ
์
3. Eric Gamma et al,
ใDesign Patterns : Elements of Reusable Object Oriented
์ค์ง ์์ด, ๋ฐํ์(Runtime)์์ ๊ฐ์ฒด์ ์์ฑ์ ์์ ๋กญ๊ฒ ๋ณ๊ฒฝ Softwareใ Addison Wesley
,
4. FileSystemWatcher.NotifyFilter,
ํ์ง ๋ชปํ๊ฒ ๋์๋ค. ๊ทธ๋ฌ๋ ์ค์ ํ์ผ์ ๋ด์ฉ์ด ๋ณ๊ฒฝ๋ ๋ http://msdn2.microsoft.com/en-
us/library/system.io.filesystemwatcher.notifyfilter(VS.80).aspx
Handler๊ฐ ๋ค์ ์ค์ ํ์ผ๋ก๋ถํฐ ์ ๋ณด๋ฅผ ์ฝ์ด์ค๋ ๋ก์ง์ ์ถ๊ฐ
5. Frank Buschmann et al,
ใPattern-Oriented Software Architecture : A System
ํ๋ค๋ฉด Handler์ ํ์ผ๊ฐ์ ๋ฐ์ดํฐ ๋ถ์ผ์น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์ of PatternsใVolume 1, Wiley
,
6. Douglas Schmidt et al,
ใPattern-Oriented Software Architectureใ
,Volume 2,
๋ค. ๋จ ์ฃผ๊ธฐ์ ์ผ๋ก ์ค์ ํ์ผ์ ์ฒดํฌํ๋ ๋ก์ง์ ๋ฃ๋๋ค๋ ๊ฒ์
Wiley
์ฑ๋ฅ์์ ์ ํ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ผ๋ฏ๋ก ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๊ฐ๊ตฌํด์ผ ํ 7. ํจํด์ 5๊ฐ์ง ๋ฒ์น, ์์์, ๋ฐฑ๋ฒํธ,
http://www.devpia.com/DevStudy/Lecture/LectureDetail.aspx?nSemiID=1171
๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด DIP๋ฅผ ์ ์ฉํ Publisher-
m a s o 161