[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] Item01 ์™„๋ฒฝ๊ณต๋žต. ํ”Œ๋ผ์ด์›จ์ดํŠธ ํŒจํ„ด Flyweight ํŒจํ„ด

2023. 1. 3. 14:48ใ†JAVA/Effective JAVA

728x90
item01. ์ƒ์„ฑ์ž ๋Œ€์‹  ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ๊ณ ๋ คํ•˜๋ผ. 

" p9. ๊ฐ™์€ ๊ฐ์ฒด๊ฐ€ ์ž์ฃผ ์š”์ฒญ๋˜๋Š” ์ƒํ™ฉ์ด๋ผ๋ฉด ํ”Œ๋ผ์ด์›จ์ดํŠธ ํŒจํ„ด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค."

 

 

Flyweight Pattern ์ด๋ž€? 

: ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ณ๊ฒŒ ๋งŒ๋“ค์–ด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ค„์ด๋Š” ํŒจํ„ด์œผ๋กœ ์ž์ฃผ ๋ณ€ํ•˜๋Š” ์†์„ฑ๊ณผ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ์†์„ฑ์„ ๋ถ„๋ฆฌํ•˜๊ณ  ์žฌ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. 

 

https://velog.io/@hoit_98/%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4-Flyweight-%ED%8C%A8%ED%84%B4

 

[๋””์ž์ธ ํŒจํ„ด] Flyweight ํŒจํ„ด

Flyweight(ํ”Œ๋ผ์ด์›จ์ดํŠธ) ํŒจํ„ด โ€‹ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋Šฅํ•œ ํ•œ ๊ณต์œ ํ•ด์„œ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ˆ์•ฝํ•˜๋Š” ํŒจํ„ด ๐Ÿ‘ฟ ๋ฌธ์ œ์ƒํ™ฉ โ€‹ ๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ ๊ฒŒ์ž„์— ๋‚˜๋ฌด๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. โ€‹ ๋‚˜๋ฌด๋Š” ์ƒ‰(color)์„ ์ •

velog.io

์ด ๋ธ”๋กœ๊ทธ์—์„œ 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์€ ๋‚˜๋ฌด ํด๋ž˜์Šค ์ž์ฒด๊ฐ€ ๋”ฑ ํ•˜๋‚˜์˜ ๋‚˜๋ฌด๋งŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ, ๋งŒ์•ฝ ์ƒ‰์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๊ทธ ํ•˜๋‚˜ ๋ฟ์ธ ๋‚˜๋ฌด์˜ ์ƒ‰์„ ๋ฐ”๊ฟ”์•ผ ํ•œ๋‹ค! 

-> ์‹ฑ๊ธ€ํ†ค์€ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค์— ๋‹จ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ์„ ์ƒ์„ฑํ•˜๊ณ , ๋Œ€์‹  ๋ณ€์ˆ˜๋ฅผ ํ•„์š”์‹œ ๋ณ€๊ฒฝํ•ด๊ฐ€๋ฉด์„œ ์“ด๋‹ค๋Š” ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90