1. ์ฑํดํค(singletion) ํจํด
ํ๋์ ํด๋์ค์ ์ค์ง ํ๋์ ์ธ์คํด์ค๋ง ๊ฐ์ง๋ ํจํด์ด๋ค. ๋ณดํต ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ๋ชจ๋์ ๋ง์ด ์ฌ์ฉ๋๋ค. ํ๋์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด ๋๊ณ ํด๋น ์ธ์คํด์ค๋ฅผ ๋ค๋ฅธ ๋ชจ๋๋ค์ด ๊ณต์ ํ๋ฉฐ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ ๋ ๋๋ ๋น์ฉ์ด ์ค์ด๋๋ ์ฅ์ ์ด ์๋ค. ํ์ง๋ง ์์กด์ฑ์ด ๋์์ง๋ค๋ ๋จ์ ์ด ์๋ค.
ํ๋ก๊ทธ๋จ์ ๊ตฌํํ ๋ ํด๋์ค์ ์ธ์คํด์ค๊ฐ ๋จ ํ๋๋ง ์กด์ฌํ๊ฒ ๋ง๋ค๋ ค๋ฉด ์ฑ๊ธํด ํจํด์ ์ ์ฉํ๋ฉด ๋๋ค. ์ฑ๊ธํด ํจํด์ ์ ํธ๋ฆฌํฐ ํด๋์ค ๊ตฌํ์ ์ ํฉํ๋ค. ๋ง์ ์ดํ๋ฆฌ์ผ์ด์ ์์๋ ์ํ ์ ๋ณด, ๋๋ฒ๊น ๋ฐ์ดํฐ, ํน์ ํ ์ง์ ์์ ๋ฐ์ํ ์๋ฌ๋ฅผ ๊ธฐ๋กํ๋ ํด๋์ค์ธ ๋ก๊ฑฐ(logger)๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ๋ก๊ฑฐ ํด๋์ค๋ ์ฑ๊ธํด์ผ๋ก ๊ตฌํํ๋ ๊ฒ์ด ์ข๋ค.
๊ตฌํ ๋ฐฉ๋ฒ:
(1). static ๋ฉ์๋๋ง ๊ฐ์ง๋ ํด๋์ค๋ก ๊ตฌํํ๋ ๊ฒ.
(2). ์ ๊ทผ ์ ์ด ๋ฉ์ปค๋์ฆ์ ์ด์ฉํ์ฌ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ํ๋๋ง ์์ฑํ๊ณ ์ ๊ทผํ๊ฒ ๋ง๋๋ ๊ฒ.
< ์ฝ๋ >
2. ์ถ์ ํฉํ ๋ฆฌ(factory) ํจํด
์์ฑํ๋ ค๋ ๊ฐ์ฒด์ ํ์ ์ด ์ํฉ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ๋ ํฉํ ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ํธํ๋ค. ํฉํ ๋ฆฌ ํจํด์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ๊ทธ ๊ฐ์ฒด์ ์์ฑ์๋ฅผ ์ง์ ํธ์ถํ์ง ์๊ณ , ๊ฐ์ฒด ์์ฑ์ ๋ด๋นํ๋ ํฉํ ๋ฆฌ์ ์์ฒญํ๋ค.
๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋์์ ๊ฐ์ฒด ์์ฑ ๋ถ๋ถ์ ๋ผ์ด๋ด ์ถ์ํ ํจํด์ด์ ์์ ๊ด๊ณ์ ์๋ ๋ ํด๋์ค์์ ์์ ํด๋์ค๊ฐ ์ค์ํ ๋ผ๋๋ฅผ ๊ฒฐ์ ํ๊ณ , ํ์ ํด๋์ค์์ ๊ฐ์ฒด ์์ฑ์ ๊ดํ ๊ตฌ์ฒด์ ์ธ ๋ด์ฉ์ ๊ฒฐ์ ํ๋ ํจํด์ด๋ค. ์์ ํฌ๋์ค์ ํ์ ํด๋์ค๊ฐ ๋ถ๋ฆฌ๋๊ธฐ ๋๋ฌธ์ ๋์จํ ๊ฒฐํฉ์ ๊ฐ์ง๋ฉฐ ์์ ํด๋์ค์์๋ ์ธ์คํด์ค ์์ฑ ๋ฐฉ์์ ๋ํด ์ ํ ์ ํ์ ์๊ธฐ ๋๋ฌธ์ ๋ ๋ง์ ์ ์ฐ์ฑ์ ๊ฐ๊ฒ ๋๋ค. ๋ํ ๊ฐ์ฒด ์์ฑ ๋ก์ง์ด ๋ฐ๋ก ๋ผ์ด์ ธ ์๊ธฐ ๋๋ฌธ์ ์ฝ๋๋ฅผ ๋ฆฌํฉํฐ๋งํ๋๋ผ๋ ํ ๊ณณ๋ง ๊ณ ์น ์ ์๊ฒ ๋๋ ์ ์ง ๋ณด์์ฑ์ด ์ฆ๊ฐ๋๋ค.
์ฅ์ :
- ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ์ฝ๋๊ฐ ํ๋ก๊ทธ๋จ์ด ์ฐ๋งํ๊ฒ ํฉ์ด์ง์ง ์๊ณ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ธฐ๋ฅ์ ํ ๊ณณ์ ๋ชจ์๋ ์ ์๋ค.
- ํด๋์ค ํ์
์ ์ ํํ ๋ชฐ๋ผ๋ ํด๋์ค ๊ณ์ธต์ ๋ง๊ฒ ๊ฐ์ฒด๋ฅผ ์์ฑ ํ ์ ์๋ค.
- ํฉํ ๋ฆฌ์์ ๊ด๋ฆฌํ๋ ํน์ ํ ์ ๋ณด๋ ์ํ, ๋ฆฌ์์ค ๋ฑ์ ๋ง๊ฒ ๊ฐ์ฒด๋ฅผ ๊ตฌ์ฑํ ์ ์๋ค๋ ์ฅ์ ๋ ์๋ค.
- ๊ฐ์ฒด ์์ฑ ๊ณผ์ ์ ์ถ์ํํ ์ ์๋ค.
< ์ฝ๋ >
3. ์ต์ ๋ฒ(observer) ํจํด
์ฃผ์ฒด๊ฐ ์ด๋ค ๊ฐ์ฒด์ ์ํ ๋ณํ๋ฅผ ๊ด์ฐฐํ๋ค๊ฐ ์ํ ๋ณํ๊ฐ ์์ ๋๋ง๋ค ๋ฉ์๋ ๋ฑ์ ํตํด ์ต์๋ฒ ๋ชฉ๋ก์ ์๋ ์ต์ ๋ฒ๋ค์๊ฒ ๋ณํ๋ฅผ ์๋ ค์ฃผ๋ ๋์์ธ ํจํด์ด๋ค. ๋ํ์ ์ธ ์ต์ ๋ฒ ํจํด์ ํ์ฉํ ์๋น์ค๋ก๋ ํธ์ํฐ๊ฐ ์๋ค. ์ต์ ๋ฒ ํจํด์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๋ค.
- ๊ฐ์ฒด์ ์ฃผ์ฒด(๊ฐ์ฒด์ ์ํ ๋ณํ๋ฅผ ๋ณด๊ณ ์๋ ๊ด์ฐฐ์)๊ฐ ๋ถ๋ฆฌ๋๋ ์ต์ ๋ฒ ํจํด
- ๊ฐ์ฒด์ ์ฃผ์ฒด(๊ฐ์ฒด์ ์ํ ๋ณํ๋ฅผ ๋ณด๊ณ ์๋ ๊ด์ฐฐ์)๊ฐ ํฉ์ณ์ง ์ต์ ๋ฒ ํจํด
< ์ฝ๋ >
4. ํ๋ก์(proxy) ํจํด๊ณผ ํ๋ก์ ์๋ฒ
ํด๋์ค ์ถ์ํ๋ฅผ ๋ด๋ถ ํํ๊ณผ ๋ถ๋ฆฌํ๋ ํจํด์ด๋ค. ์์ด๋จ์ด proxy์ ๋ป์ฒ๋ผ ์ค์ ๊ฐ์ฒด์ ๋ํ ๋๋ฆฌ์ธ ์ญํ ์ ํ๋ค. ๊ฐ์ฒด๋ฅผ ์ง์ ๋ค๋ฃฐ ์ ์๊ฑฐ๋ ๊ทธ๋ ๊ฒ ํ๊ธฐ์ ์๊ฐ์ด ๋๋ฌด ๊ฑธ๋ฆด ๋ ์ฃผ๋ก ํ๋ก์๋ฅผ ์ฌ์ฉํ๋ค.
๋์ ๊ฐ์ฒด์ ์ ๊ทผํ๊ธฐ ์ ๊ทธ ์ ๊ทผ์ ๋ํ ํ๋ฆ์ ๊ฐ๋ก์ฑ ๋์ ๊ฐ์ฒด ์๋จ์ ์ธํฐํ์ด์ค ์ญํ ์ ํ๋ ๋์์ธ ํจํด์ด๋ค. ๊ฐ์ฒด์ ์์ฑ, ๋ณํ ๋ฑ์ ๋ณด์ํ๋ฉฐ ๋ณด์, ๋ฐ์ดํฐ ๊ฒ์ฆ, ์บ์ฑ, ๋ก๊น ์ ์ฌ์ฉํ๋ค.
ํ๋ก์ ์๋ฒ๋ ์๋ฒ์ ํด๋ผ์ด์ธํธ ์ฌ์ด์์ ํด๋ผ์ด์ธํธ๊ฐ ์์ ์ ํตํด ๋ค๋ฅธ ๋คํธ์ํฌ ์๋น์ค์ ๊ฐ์ ์ ์ผ๋ก ์ ์ํ ์ ์๊ฒ ํด์ฃผ๋ ์ปดํจํฐ ์์คํ ์ด๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋งํ๋ค.
5. ์ด๋ํฐ(adaptor) ํจํด or ๋ํผ ํด๋์ค
์ด๋ค ๊ธฐ๋ฅ์ ๊ตฌํ ์ฝ๋์ ๋ํ ๋ฐ๋์งํ ์ถ์ํ๋ฅผ ์ ๊ณตํ๋ฉด์ ๊ทธ ๊ธฐ๋ฅ์ ์ฌ์ฉ์์ ๊ตฌํ ์ฝ๋๋ฅผ ์ฐ๊ฒฐํด์ฃผ๋ ์ญํ ์ ํ๋ค. ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๋ํฐ ํจํด์ ์ด์ฉํ stack์ด๋ queue์ ๊ฐ์ ์ปจํ ์ด๋๋ฅผ deque์ด๋ list์ ๊ฐ์ ๋ค๋ฅธ ์ปจํ ์ด๋๋ก ๊ตฌํํ๋ค.
์ดํญํฐ์ ๋ชฉ์ ์ ๋ด๋ถ ๊ธฐ๋ฅ์ ์ข ๋ ์ ํฉํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ ๋ฐ ์์ผ๋ฏ๋ก ๊ตฌํํ ์ด๋ํฐ๋ ์ฌ์ฉํ๊ธฐ ์ฝ๊ณ ๋ค์ํ ์ฉ๋์ ์ ๋ง์์ผ ํ๋ค.
Reference.
1. ๋ฉด์ ์ ์ํ cs ์ ๊ณต์ง์ ๋ ธํธ (๊ธธ๋ฒ, ์ฃผํ์ฒ )
2. ์ ๋ฌธ๊ฐ๋ฅผ ์ํ C++ (ํ๋น๋ฏธ๋์ด, ๋งํฌ ๊ทธ๋ ๊ณ ๋ฆฌ ์ ์/ ๋จ๊ธฐํ ๋ฒ์ญ)
'๐จ๐ปโ๐ป programming > โฝ c, c++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ ํ๋ ๊ฒ ๋ณด๋ค ๋ซ๊ฒ ์ง
ํฌ์คํ ์ด ์ข์๋ค๋ฉด "์ข์์โค๏ธ" ๋๋ "๊ตฌ๋ ๐๐ป" ํด์ฃผ์ธ์!