2023. 1. 3. 14:48ใJAVA/Effective JAVA
item01. ์์ฑ์ ๋์ ์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋๋ฅผ ๊ณ ๋ คํ๋ผ.
" p9. ๊ฐ์ ๊ฐ์ฒด๊ฐ ์์ฃผ ์์ฒญ๋๋ ์ํฉ์ด๋ผ๋ฉด ํ๋ผ์ด์จ์ดํธ ํจํด์ ์ฌ์ฉํ ์ ์๋ค."
Flyweight Pattern ์ด๋?
: ๊ฐ์ฒด๋ฅผ ๊ฐ๋ณ๊ฒ ๋ง๋ค์ด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ค์ด๋ ํจํด์ผ๋ก ์์ฃผ ๋ณํ๋ ์์ฑ๊ณผ ๋ณํ์ง ์๋ ์์ฑ์ ๋ถ๋ฆฌํ๊ณ ์ฌ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ค์ผ ์ ์๋ค.
์ด ๋ธ๋ก๊ทธ์์ Flyweight ํจํด ์์ ๋ฅผ ๋ณด๊ณ , ํ์ตํ๋ค.
๋ธ๋ก๊ทธ์์ ์ ๊ณตํ๋ ์์ ๋ ๋ง์ธํฌ๋ํํธ๋ผ๋ ๊ฒ์์ด ์๊ณ , ๊ฑฐ๊ธฐ์ ๋๋ฌด๋ฅผ ์ค์นํ๊ณ ์ถ๋ค๊ณ ํ๋ค.
๋๋ฌด๋ ์ color๋ฅผ ์ง์ ํ ์ ์๊ณ , ํน์ ์์น x, y์ ๋๋ฌด๋ฅผ ์ฌ์ ์ ์๋ค๊ณ ํ ๋,
๋๋ฌด ํ ๊ทธ๋ฃจ์ ๋ค์ด๊ฐ๋ ๋ฐ์ดํฐ๋
color: 4 byte, x : 4 byte, y : 4 byte ๋ผ๊ณ ํ๋ค.
๋๋ฌด๋ฅผ ์ฌ์ ๋ ๋ง๋ค ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค๊ณ ๊ฐ์ ํ๋ฉด ์๋ก์ด ๋๋ฌด ๊ฐ์ฒด๋ 12 byte์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ๊ณ ,,,
๋ง์ฝ 10000๊ฐ๋ฅผ ์ฌ๋๋ค ํ๋ฉด, 120000 byte๊ฐ ์์๋๋ค.
10000๊ฐ๋ฅผ ๋์ด ๋๋ฌด๋ฅผ ๋๋๋ ๋ง์ด ์ธ์ด๋ค๋ฉด ๋์ค์๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ๊ฒ ๋ ๊ฒ์ด๋ค.
๐ง ๊ทธ๋ ๋ค๋ฉด ์ด ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํด์ผ ํ๋๊ฐ?
์๊ฐํด๋ณด๋ฉด ๋๋ฌด์ ์์น๋ ๊ฐ์ ๊ณณ์ 10000๊ทธ๋ฃจ๋ฅผ ์ฌ์ ์๋ ์์ผ๋ฏ๋ก ๊ฐ๊ฐ ๋ค๋ฅธ ์์น์ ์ฌ์ด์ง ๊ฒ์ด์ง๋ง, ๋๋ฌด์ ์์ ํญ์ ๋ฐ๋ ํ์๋ ์๋ค.
๊ทธ๋ ๋ค๋ฉด ๋๋ฌด ๊ฐ์ฒด๋ฅผ ๊ณ์ ์๋ก ์์ฑํ๋ ๊ฒ์ด ์๋๋ผ ๋ฏธ๋ฆฌ ์ ์ฅํด๋๋ค๊ฐ ์ฌ์ฉํด๋ ๋์ง ์์๊น ? ๋ผ๋ ์๊ฐ์ด ๋ ๋ค.
์ฆ, ์๋ก์ด ์์์ ๋๋ฌด๊ฐ ํ์ํ ๋๋ง ์ ๋๋ฌด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค๋ฉด 12 * ( ์๋กญ๊ฒ ์ถ๊ฐ๋ ๋๋ฌด ์์) byte ๋ก๋ง ํ์ํ๋ค.
์ด๋ ๊ฒ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฅํ๋๋ก ๊ณต์ ํด์ ํ์ํ์ง ์์ ๊ฐ์ฒด ์์ฑ์ ์ค์ฌ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ฅผ ์ค์ด๋ ๋์์ธ ํจํด์ flyweight ํจํด์ด๋ผ๊ณ ํ๋ค.
๐ฉ๐ป Flyweight pattern ์์
1. ์ค์ ๊ณต์ ๋ ๋๋ฌด ๊ฐ์ฒด
2. ๊ฐ์ฒด์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ๊ณต์ ํด์ฃผ๋ ํฉํ ๋ฆฌ factory
-> ๊ฐ์ ์์ ๋๋ฌด๊ฐ ์๋ค๋ฉด ์๋ก ์์ฑ, ์๋ค๋ฉด ๊ทธ ์์ ๋๋ฌด ๋ฐํ (์๋ก ์์ฑx)
3. ํจํด์ ์ฌ์ฉํ ๊ณ ๊ฐ, client
๐ฉ๐ป ๊ฒฐ๊ณผ
-> ๋ค๋ฅธ ์์์ ๋๋ฌด ์ฌ๊ธฐ๋ฅผ ์ํ ๋๋ง ์๋ก์ด ๋๋ฌด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ฒ์ ํ์ธํ ์์๋ค.
๐ Flyweight pattern vs Singleton pattern
flyweight pattern์ ๋๋ฌด์ ์๊น์ด ๋ฐ๋ ๋ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํด์ ์ฆ, ๋๋ฌด ์ ๋ณ๋ก ํ๋์ ๋๋ฌด ๊ฐ์ฒด๊ฐ ์๊ฒจ ์ฌ๋ฌ๊ฐ์ ๋๋ฌด๊ฐ ์๊ธฐ๋๋ฐ,
singleton pattern์ ๋๋ฌด ํด๋์ค ์์ฒด๊ฐ ๋ฑ ํ๋์ ๋๋ฌด๋ง ๋ง๋ค ์ ์๋ ๊ฒ์ผ๋ก, ๋ง์ฝ ์์ ๋ณ๊ฒฝํ๊ณ ์ถ๋ค๋ฉด ๊ทธ ํ๋ ๋ฟ์ธ ๋๋ฌด์ ์์ ๋ฐ๊ฟ์ผ ํ๋ค!
-> ์ฑ๊ธํค์ ํ๋์ ํด๋์ค์ ๋จ ํ๋์ ์ธ์คํด์ค๋ง์ ์์ฑํ๊ณ , ๋์ ๋ณ์๋ฅผ ํ์์ ๋ณ๊ฒฝํด๊ฐ๋ฉด์ ์ด๋ค๋ ์ฐจ์ด๊ฐ ์๋ค.
'JAVA > Effective JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ดํํฐ๋ธ ์๋ฐ] Item01 ์๋ฒฝ๊ณต๋ต. ๋ฆฌํ๋ ์ reflection (0) | 2023.01.04 |
---|---|
[์ดํํฐ๋ธ ์๋ฐ] Item01 ์๋ฒฝ๊ณต๋ต. ์๋น์ค ์ ๊ณต์ ํ๋ ์์ํฌ (0) | 2023.01.04 |
[์ดํํฐ๋ธ ์๋ฐ] Item01 ์๋ฒฝ๊ณต๋ต. ์ด๊ฑฐํ์ Enumeration (1) | 2023.01.03 |
[์ดํํฐ๋ธ ์๋ฐ] ํ๋ผ์ด์จ์ดํธ ํจํด flyWeight pattern (0) | 2022.08.31 |
[์ดํํฐ๋ธ ์๋ฐ] Enum ์ด๊ฑฐ ํ์ (0) | 2022.08.31 |