[Cocoa Design Pattern] 22. Flyweight pattern

2011-07-12
![](http://ash84.net/wp-content/uploads/1/cfile24.uf.122D734C4E1C04261DF168.jpg) **22. ํ”Œ๋ผ์ด ์›จ์ดํŠธ ํŒจํ„ดย ** **ํ”Œ๋ผ์ด์›จ์ดํŠธ ํŒจํ„ด์ด๋ž€?** โ€“ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ์˜ ์–‘๊ณผ ํ”„๋กœ์„ธ์„œ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ตœ์†Œํ™”์‹œํ‚จ๋‹ค.ย  โ€“ ์ธ์Šคํ„ด์Šค ๊ณต์œ ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜์—ฌ, ์‹ค์ œ ์ธ์Šคํ„ด์Šค์˜ ์ˆ˜๋ฅผ ์ค„์—ฌ์ค€๋‹ค.ย  **ํŒจํ„ด์ด ๋งŒ๋“ค์–ด์ง„ ๋™๊ธฐ ** โ€“ ๋น„ โ€“ ๊ฐ์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ์บก์Аํ™”ํ•˜์—ฌ ๊ฐ์ฒด๊ฐ€ ํ•„์š”ํ•œ ์ปจํ…์ŠคํŠธ์— ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.ย  โ€“ ๋งŽ์€ ์ˆ˜์˜ ์ธํŠธ์„ ํŠธ๊ฐ€ ํ•„์š”ํ• ๋•Œ ์ €์žฅ๊ณต๊ฐ„ ์š”๊ตฌ๋ฅผ ์ค„์—ฌ์ค€๋‹ค.ย  โ€“ ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ๋Œ€์—ญ์œผ๋กœ ํ–‰๋™ํ•œ๋‹ค.ย  **ํŒจํ„ด์œผ๋กœ ๋ฌธ์ œ ํ•ด๊ฒฐ** ์Šคํ”„๋ ˆ๋“œ ์‹œํŠธ์˜ ๊ฒฝ์šฐย  โ€“ ํ–‰๊ณผ ์—ด์˜ ๋ชจ๋“  ์…€์„ ๊ฐ๊ฐ์˜ ์ธ์Šคํ„ด์Šค๋กœ ํ‘œ์‹œํ•  ๊ฒƒ์ธ๊ฐ€? โ€“ ๊ณต์œ ๊ฐ€๋Šฅํ•œ ์ธ์Šคํ„ด์Šค : ์…€์ด ๋น„์–ด ์žˆ๋Š” ๊ฒฝ์šฐ, ๋™์ผํ•œ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ (SpreadSheetCell) โ€“ ํฌ๋งท ์ •๋ณด์˜ ๋ถ„๋ฆฌ (SpreadSheetCellFormat) โ€“ ์ธ์Šคํ„ด์Šค ๊ณต์œ ๋ฅผ ํ†ตํ•ด์„œ ์ด ์‚ฌ์šฉํ•˜๋Š” ์ธ์Šคํ„ด์Šค์˜ ์ˆ˜๋ฅผ ์ค„์ผ์ˆ˜ ์žˆ๋‹ค.ย  โ€“ ์ธ์Šคํ„ด์Šค์— ์ €์žฅ๋œ ์ •๋ณด์˜ ์ผ๋ถ€๋ฅผ ๋”ฐ๋กœ ํด๋ž˜์Šคํ™” ํ•จ์œผ๋กœ์จ ์ €์žฅ์„ ์ตœ์†Œํ™” ์‹œํ‚จ๋‹ค.ย  ** ์ฝ”์ฝ”์•„ ์‚ฌ์šฉ ์˜ˆ์ œ ** **3๊ฐ€์ง€ ๋ชฉ์  : **
1. ๋น„-๊ฐ์ฒด ๊ฐ’์„ ์บก์Аํ™”ย  2. ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ์ค„์ด๊ธฐย  3. ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ๋Œ€์—ญ์œผ๋กœ ์‚ฌ์šฉ
**๋น„-๊ฐ์ฒด ๊ฐ’์„ ์บก์Аํ™”ย  ** * NSNumber ย โ€“ char, int, long, float ์™€ ๊ฐ™์€ ์ˆซ์žํ˜• ๋ฐ์ดํ„ฐ ํƒ€์ž…, bool ๊ณผ ๊ฐ™์ธ ๋ฐ์ดํ„ฐ ํƒ€์ž…๋„ ๊ฐ์ฒดํ˜•์œผ๋กœ ์ „ํ™˜ ๊ฐ€๋Šฅ ย โ€“ NSNumber ์˜ ์Šˆํผํด๋ž˜์Šค์ธ NSValue ๊ฐ€ ๋น„๊ฐ์ฒด ๋ฐ์ดํ„ฐ ํƒ€์ž…์— ๊ฐ์ฒด ๋ž˜ํผ๋ฅผ ์ œ๊ณต.ย  * NSDecimalNumber, NSDate, NSString ๋“ฑ๊ณผ ๊ฐ™์€ ํด๋ž˜์Šค ๋ชจ๋‘ ๋น„ ๊ฐ์ฒด ๊ฐ’์ด๋‚˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ์‹ผ๋‹ค.ย  **์ €์žฅ๊ณต๊ฐ„ ์š”๊ตฌ ๊ฐ์†Œย ** NSNumber ์ธ์Šคํ„ด์Šค ๊ณต์œ ย  โ€“ ์ตœ๊ทผ์— ์‚ฌ์šฉํ•œ ํ˜น์€ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” NSNumber ์ธ์Šคํ„ด์Šค๋Š” ์บ์‹œ์— ์ €์žฅํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์š”์ฒญ์ด ์˜ค๋ฉด ๊บผ๋‚ด์„œ ๋ฐ˜ํ™˜ํ•จ.ย  โ€“ ์ธ์Šคํ„ด์Šค ๊ณต์œค๋Š” ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ์ˆ˜์ • ๋ถˆ๊ฐ€๋Šฅ ํ• ๋•Œ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.ย  NSFont, NSColor ์—ญ์‹œ ์ˆ˜์ • ๋ถˆ๊ฐ€๋Šฅํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ์บ์‹œํ•˜๊ณ  ์žฌ์‚ฌ์šฉํ•จ.ย  NSCellย  โ€“ NSCell ์˜ ์ธ์Šคํ„ด์Šค๋Š”, NSString, NSImage ์˜ ํฌ์ธํ„ฐ์™€ ๊ฐ™์ด ์ƒ๋Œ€์ ์œผ๋กœ ๋‹จ์ˆœํ•œ ๊ฐ’๋งŒ ์ €์žฅ.ย  โ€“ NSView ๊ฐ€ 80๋ฐ”์ดํŠธ๋ฅผ ์‚ฌ์šฉํ•จ์— ๋น„ํ•ด NSCell์€ 20๋ฐ”์ดํŠธ ์‚ฌ์šฉํ•จ.ย  โ€“ NSTableView์™€ NSMatrix ์—์„œ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์ €์žฅ๊ณต๊ฐ„ ๊ฐ์†Œ ํšจ๊ณผย  **๋‹ค๋ฅธ ๊ฐœ๊ฐœ์ฒด์˜ ๋Œ€์—ญ์œผ๋กœ ์‚ฌ์šฉย ** โ€“ ์ข€๋” ๋ฌด๊ฑฐ์šด ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ์ž„์‹œ ์ž๋ฆฌํ‘œ์‹œ์ž ์—ญํ•  ์ˆ˜ํ–‰ โ€“ NSTextView : ํ…์ŠคํŠธ ํ‘œ์‹œ์™€ ์ž…๋ ฅ์„ ๋‹ค๋ฃจ๋Š” ํด๋ž˜์Šคย  โ€“ ๊ทธ๋Ÿฌ๋‚˜, ๋ฐฐ์น˜ ์ €์žฅ, ์ฒ ์žํ™•์ธ ๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ํ…์ŠคํŠธ ๊ด€๋ จ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋ถ€๋ถ„์€ ๋‹ค๋ฅธ ํด๋ž˜์Šค์™€ ํ˜‘๋ ฅํ•œ๋‹ค.ย  โ€“ ๋ณต์žกํ•œ ํ…์ŠคํŠธ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์˜ ํ”Œ๋ผ์ด์›จ์ดํŠธ ์ž๋ฆฌํ‘œ์‹œ์ž๋กœ NSCell์„ ์‚ฌ์šฉย  **ํŒจํ„ด ์‚ฌ์šฉ ๊ฒฐ๊ณผ ย ** โ€“ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋Š˜ ๋””์ž์ธ์„ ๋ณต์žกํ•˜๊ฒŒ ํ•œ๋‹ค.ย  ex) C ์–ธ์–ด์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…๊ณผ NSNumber ์‚ฌ์ด์—์„œ์˜ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜ย  โ€“ ๋ถ„๋ช…ํžˆ ์ €์žฅ๊ณต๊ฐ„๊ณผ ์„ฑ๋Šฅ์˜ ์ตœ์ ํ™” ํšจ๊ณผ๊ฐ€ ์žˆ๋‹ค.ย  โ€“ ๊ทธ๋Ÿฌ๋‚˜, ๋งŒ์•ฝ NSCell์„ NSView ๋Œ€์‹ ์— ์‚ฌ์šฉ ํ–ˆ๋‹ค๋ฉด, ์ฝ”์–ด ์• ๋‹ˆ๋ฉ”์ด์…˜๊ณผ ๊ฐ™์€ ๊ณ ๊ธ‰ ๋ทฐ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.ย  โ€“ ์„ฑ๋Šฅ์ ์ธ ๋ถ€๋ถ„์—๋„ ๋ฌธ์ œ๊ฐ€ ์žˆ์„์ˆ˜๊ฐ€ ์žˆ๋‹ค.ย  โ€“ ํ”Œ๋ผ์ด์›จ์ดํŠธ์˜ ์‚ฌ์šฉ์ด ๋ณต์žก๋„๋ฅผ ์ฆ๊ฐ€ โ€“ ๊ฐœ๋ฐœํ•˜๋ ค๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ €์žฅ๊ณต๊ฐ„๊ณผ ์„ฑ๋Šฅ์˜ ์ตœ์ ํ™”์— ๋Œ€ํ•œ ์ด์Šˆ๊ฐ€ ์žˆ๋‹ค๋ฉด ์‚ฌ์šฉํ•ด๋ผ. ์•„๋‹ˆ๋ฉด ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.ย  ย  ย  ย 
#cocoa design pattern  #dev  #Flyweight  #IOS  #ios dev  #pattern  #์•„์ดํฐ ์•ฑ ๊ฐœ๋ฐœ