GoF์ ๋์์ธ ํจํด, ํ๋ผ์ด๊ธ ํจํด์ ๋ํด ์์๋ณธ๋ค.
ํด๋น ๊ธ์, ๋ค์์ ์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ดํดํ๋ ๊ฒ์ด ํธ๋ฆฌํฉ๋๋ค.
ํต์ฌ ์์ฝ
- ํ๋ผ์ด๊ธ - ๊ฐ๋ณ๊ณ ๋ฏผ์ฒฉํ ๋ณต์ฑ ์ ์์ ์ฒด๊ธ์ ์๋ฏธ
- ์ด๋ค ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ๋งค๋ฒ ์์ฑํ์ง ์๊ณ ํ๋ฒ๋ง ์์ฑํจ
- ๋ค์ ํ์ํด์ง๋ ๊ฒฝ์ฐ ์ด์ ์ ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฌ์ฉ
- ๊ฐ์ฒด ์์ฑ์ ๋ง์ ์์์ด ์๋ชจ๋๋ ๊ฒฝ์ฐ ์ ์ ์์์ผ๋ก ํ์ํ ๊ฐ์ฒด๋ฅผ ์ฌ์ฌ์ฉํ ์ ์์
์์
Digit
- 0~9 ์ ์ซ์๋ฅผ ํ๋ฉด์ ํ์
- ํ๋ฉด์ ํ์ == ํฝ์ ๋ก ํ๋ฉด์ ๊ทธ๋ ค์ผ ํจ
- ๋ง์ ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค๊ณ ๊ฐ์
- ์ด ๋ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋
0.txt
์ ๊ฐ์ ํํ๋ก ์ ์ฅ๋์ด ์๋ค๊ณ ํ์. - ์์ฑ์ ํ์ผ์ ์ฝ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด ์ถ๋ ฅํ๋ค.
- ์ด๋ ๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๋ด์ฉ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ชจ๋ ์ ์ฌํด์ผ ํ๋ค๋ ์ ์์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋ง๋ค.
DigitFactory
- ๋ฐ๊นฅ ์ชฝ์์ ์ํ๋ ์ซ์๋ฅผ ๋๊ธฐ๋ฉด ๋ฐํ
- Digit ๊ฐ์ฒด๋ฅผ ๋ฏธ๋ฆฌ ์์ฑํด๋์ง ์๊ณ , ์ฒ์ ์์ฒญ ๋ฐ์์ ํ๋ฒ๋ง ์์ฑ
- ๋์ผํ ์์ฒญ์ ๋ฐ์ผ๋ฉด ๊ทธ๋๋ก ๋ฆฌํด
Number
- ๊ธด ์ซ์๊ฐ์ ํ๋ฉด์ ์ถ๋ ฅ
์ถ๊ฐ ์์
- Number class๋ฅผ ์์ฑ์ 434331์ ๊ฐ์ ๊ฐ์ง๊ณ ์์ฑํ๋ผ๊ณ ํ๋ค๊ณ ๊ฐ์ ํ์.
- ๊ทธ๋ ๋ค๋ฉด ๊ฐ ์ซ์์ ํด๋นํ๋ ์ซ์๋ฅผ ํ๋ฉด์ ํ์ํ๊ธฐ ์ํด Digit ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
- ๊ทธ๋ ๋ค๋ฉด 4, 3๊ณผ ๊ฐ์ด ๋ฐ๋ณต๋๋ ์ซ์์ ๋ํด์ ๊ฐ๊ฐ์ ํด๋นํ๋ Digit ์ธ์คํด์ค๋ฅผ ๊ฐ์ ธ์ผํ ๊น?
- ์ด๋ด ๊ฒฝ์ฐ Flyweight ํจํด์ ์ด์ฉํ์ฌ ์ด๋ฏธ ์์ฑ๋ ๊ฐ์ฒด์ค 1, 3, 4 ๊ฐ์ฒด 3๊ฐ๋ง ์ฌ์ฉํ๋ฉด ๋๋ค.
์ฝ๋
Main
Number
DigitFactory
Digit
๊ฒฐ๊ณผ
๋๊ธฐ
- ๊ฐ์ฒด ์ค์ฌ์ผ๋ก ์ค๊ณํ๋ ๊ฒ์ ๋ง์ ํจ๊ณผ๋ฅผ ์ป์ ์ ์์ง๋ง, ๊ตฌํ ๋น์ฉ์ด ๋์ ๊ฒฝ์ฐ๊ฐ ์์ ์๋ ์๋ค.
- ๋ฌธ์ ํธ์ง๊ธฐ ๊ฐ์ ๊ฒ์ ์๊ฐํ ๋, ํ๋ฉด์ ์ค์ ๋ก ํํ๋๊ธฐ ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ณ์ํด์ ์์ฑํด์ ์ฌ์ฉํ๋ค๋ฉด ๋น์ฉ์ด ๋ง์ด ๋ ๋ค.
ํ์ฉ์ฑ
- ์์ฉ ํ๋ก๊ทธ๋จ์ด ๋๋์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด์ผ ํ ๋
- ๊ฐ์ฒด์ ์๊ฐ ๋๋ฌด ๋ง์์ ธ ์ ์ฅ ๋น์ฉ์ด ๋์์ง ๋
- ๋๋ถ๋ถ์ ๊ฐ์ฒด ์ํ๋ฅผ ๋ถ๊ฐ์ ์ธ ๊ฒ์ผ๋ก ๋ง๋ค ์ ์์ ๋
- ๊ฐ์ฒด์ ๋ง์ ๋ถ๋ถ์ ์ ์ ์์ ๊ณต์ ๊ฐ์ฒด๋ก ๋์ฒดํ ์ ์์ ๋
๊ตฌ์กฐ
์ฐธ์ฌ์
- FlyWeight(
Digit
) - FlyWeightFactory(
DigitFactory
) - Number(
client
)
ํ๋ ฅ ๋ฐฉ๋ฒ
client
๋Flyweight
์ธ์คํด์ค๋ฅผFlyWeightFactory
์ ์์ฒญํ์ฌ ์ฌ์ฉํ๋ค.
๊ฒฐ๊ณผ
- ์ฅ์
- ๊ณต์ ๊ฐ์ฒด ์ฌ์ฉ์ ํตํด ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ
- ์ธ์คํด์ค ๊ฐ์ ์ค์ผ ์ ์์
- ๋ณธ์ง์ ์ํ(์ซ์๋ 10๊ฐ - 10๊ฐ๋ง ์์ผ๋ฉด ๋จ)๋ฅผ ์ค์ผ ์ ์์
- ๋จ์
- ๋ฐํ์ ๋น์ฉ ์ฆ๊ฐ
- ๋ถ๊ฐ์ ์ํ(์ซ์๋ฅผ ์๋ฏธํ๋ ๊ฒ ์ด์ธ์ ์ํ -
Number
์ ๊ฐ์ ๊ฒ, ์์ ๋ฑ๋ฑ)๋ฅผ ์ฐ์ฐํด์ผ ํจ
๊ตฌํ
- ๊ณต์ ํ์ฌ ์ฌ์ฉํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ณธ์ง์ ์ํ๋ก ๋ง๋๋ ๊ฒ์ด ์ค์ํ๋ค.
- ๋ถ๊ฐ์ ์ธ ์ํ๋ ์ ์ธํ๊ณ ์ฐ์ฐ์ ํตํด ์ฒ๋ฆฌํ๋ค.
- ๊ณต์ ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํ ๋ ์์ ๋ง๋ ๋ค.
์๊ฐํด๋ณผ ์
- ๋ฆ์ ์์ฑ (lazy Initialzation)์ ์ธ์ด ์ฐจ์์์ ์ง์ํด์ฃผ๋ ๊ฒ์ด ๋ณด๋ค ์ข๋ค๊ณ ๋๊ผ๋ค.
- ๊ทธ๋ฆฌ๊ณ ์ปดํ์ผ๋ฌ ๋จ์์ ์ต์ ํ๊ฐ ์ผ์ด๋ ์๋ ์๋ค.
- ๊ฐ์ด ์ด๊ธฐ์ ์์ฑ๋๋ ๊ฒฝ์ฐ์๋ง ๋ฃ๋ ๊ฐ๋ ์์ฒด๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๊ตณ์ด ํจํด์ ์ฌ์ฉํ์ง ์์๋ ๊ฐ๋ฅํ๋ค.
- dictionary๋ฅผ ์ฌ์ฉํ์ฌ ๋ช ํํ๊ฒ ๋ค์ด์จ ๊ฒฝ์ฐ์๋ง ์์ฑํ๋ ๋ฐฉ๋ฒ๋ ์๋ค.
- ํด๋น ํจํด์ ๊ฐ๋ ์ ๋ํด์๋ ์ดํดํ๋, ์ด๋ ํ ๊ตฌํ ๋ฐฉ๋ฒ์ ๋งค๋ชฐ๋์ง ์๋ ๊ฒ์ด ์ข๋ค.
- ์ฑ๋ฅ์ด ๋์์ง ๊ฒ๋ ํด๋น ํจํด์ ์ค์์ฑ์ด ์ค์ด๋๋๋ฐ ์ญํ ์ ํ๋ค.
- ๋ค๋ง, ๊ณต์ ๋ ์ํ๊ฐ ํ์ํ ๊ฒฝ์ฐ ๋ณธ์ง์ , ๋ถ๊ฐ์ ์ธ ์ํ๋ฅผ ๋๋๋ ๊ฒ์ ์๋ฏธ๊ฐ ์์ด ๋ณด์ธ๋ค.