๐ŸŒณASH84

Maker, Developer, Adventurer ๐Ÿคฉ

[Cocoa Design pattern] 23. Decorator

2011-07-13
![](http://ash84.net/wp-content/uploads/1/cfile23.uf.205946374E1D407127DB25.jpg)ย  **๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ž€?** โ€“ ์„œ๋ธŒํด๋ž˜์‹ฑ์„ ํ†ตํ•ด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋Œ€์‹  ์ปดํฌ์ง€์…˜์„ ํ†ตํ•ด์„œ ๊ณตํ†ต์ ์œผ๋กœ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ์ฒด์— ์ถ”๊ฐ€ โ€“ ์„œ๋ธŒ ํด๋ž˜์‹ฑ์€ ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ ์ •์˜ํ•ด์•ผ ํ•˜์ง€๋งŒ, ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋Š” ๋Ÿฐํƒ€์ž„ ๋‹จ๊ณ„์—์„œ ์ถ”๊ฐ€ ๋ฐ ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•จ.ย  ex) NSScrollViewย  **ํŒจํ„ด์ด ๋งŒ๋“ค์–ด์ง„ ๋™๊ธฐ ** โ€“ ๊ธฐ์กด ๊ฐ์ฒด์— ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์Œ. ๊ทธ๋Ÿฌ๋‚˜, ํด๋ž˜์Šค ์ˆ˜์˜ ์ฆ๊ฐ€๊ฐ€ ๋ฌธ์ œ์ž„.ย  โ€“ ์„œ๋ธŒ ํด๋ž˜์Šค = is โ€“ a ๊ด€๊ณ„ Text โ€“ RulerText โ€“ BorderedRulerText โ€“ ์ƒ์†์„ ํ†ตํ•ด์„œ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•ด ๋‚˜๊ฐ€๋Š” ํ˜•ํƒœ, ํŠน์ • ๊ธฐ๋Šฅ์„ ์œ„ํ•ด ๊ณ„์ธต์ด ๋ณต์žกํ•ด์ง.ย  โ€“ ๋‹ค์ค‘ ์ƒ์†์„ ํ†ตํ•ด์„œ ๊ฐ„๋‹จํ•œ ๊ณ„์ธต์„ ์‹œ๋„ํ•˜์ง€๋งŒ, ย  ๋‹ค์ค‘์ƒ์†์€ ํด๋ž˜์Šค์˜ ์ˆ˜๋ฅผ ์ค„์ด๋Š”๊ฒƒ ๋ณด๋‹ค๋Š” ์ƒ์† ๊ด€๊ณ„๋ฅผ ๋ฐ”๊ฟ”์คŒ.ย  **๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด์˜ ๋ชฉํ‘œย **
1. ์ƒ์† ๋Œ€์‹  ์กฐํ•ฉ์œผ๋กœ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋™์ž‘์„ ์‚ฌ์šฉ์žํ™” ํ•œ๋‹ค.ย  2. ๋Ÿฐํƒ€์ž„์˜ ์œ ์—ฐ์„ฑ ์ œ๊ณต, ๋Ÿฐํƒ€์ž„ ์ƒํƒœ์—์„œ ๊ธฐ๋Šฅ์„ ๋™์ ์œผ๋กœ ์ถ”๊ฐ€ ๋ฐ ์ œ๊ฑฐ ๊ฐ€๋Šฅ 3. ํด๋ž˜์Šค ๋Œ€์‹  ๊ฐ๊ฐ์˜ ์ธ์Šคํ„ด์Šค์— ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•œ๋‹ค.ย  4. ํ•„์š”ํ•œ ํด๋ž˜์Šค์˜ ์ˆ˜๋ฅผ ์ค„์—ฌ์ค€๋‹ค.
**ํŒจํ„ด์œผ๋กœ ๋ฌธ์ œ ํ•ด๊ฒฐ** โ€“ ์กฐํ•ฉ(Composition)์€ Has โ€“ a ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•œ๋‹ค. ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด์€ ์•”๋ฌต์ ์œผ๋กœ has-a ๊ด€๊ณ„๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.ย  ex)ย 
NSClipView ์ธ์Šคํ„ด์Šค๊ฐ€ ์ž์‹ ์˜ ๋„ํ๋จผํŠธ ๋ทฐ๋ฅผ ๋ฐ์ฝ”๋ ˆ์ดํŠธํ•œ๋‹ค.ย  = NSClipVIew ์ธ์Šคํ„ด์Šค๊ฐ€ ๋„ํ๋จผํŠธ ๋ทฐ๋ฅผ ์†Œ์œ ํ•œ๋‹คย  โ€“ ์กฐํ•ฉ์€ ๋Ÿฐํƒ€์ž„์‹œ์— ๊ตฌ์„ฑ๋˜๊ณ , ๋™์ ์œผ๋กœ ๋ฐ”๊ฟ€์ˆ˜ ์žˆ๋‹ค
*** NSScrollViewย  **โ€“ setDocumentView ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•ด์„œ ๋‚ด์žฅ๋œ ํด๋ฆฝ๋ทฐ์˜ ๋„ํ๋จผํŠธ ๋ทฐ๋ฅผ ์„ค์ •ํ•˜๋„๋ก ์ œ๊ณตย  โ€“ ๋„ํ๋จผํŠธ ๋ทฐ๋Š” NSView์˜ ์„œ๋ธŒํด๋ž˜์Šค๋ผ๋ฉด ๊ฐ€๋Šฅ ์ฆ‰, ์‚ฌ์šฉ์ž ์ •์˜์˜ ์ปค์Šคํ…€ ๋ทฐ๋„ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ˆซ์ž ์ œํ•œ์ด ์—†๋‹ค.ย  **์ฝ”์ฝ”์•„ ์‚ฌ์šฉ ์˜ˆ์ œ **
์ผ๋ฐ˜ ์ ์ธ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด์˜ ์‚ฌ์šฉ ์˜ˆ์ œ : [http://mrhook.co.kr/79](http://mrhook.co.kr/79)
โ€“ ์ด ํŒจํ„ด์€ ์ฃผ๋กœ MVC์˜ ๋ทฐ ๋‹จ๊ณ„ ์—์„œ๋งŒ ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.ย โ€“ ์˜ˆ์™ธ๋„ ์žˆ๋‹ค.ย  **NSAttributedStringย  **โ€“ NSString + (ํฐํŠธ, ๋ฌธ๋‹จ ์Šคํƒ€์ผ, ์ด๋ฏธ์ง€ ๋‚ด์žฅ ๋“ฑ๋“ฑ) : ์†์„ฑ์„ ๋ฐ์ฝ”๋ ˆ์ดํŠธย  โ€“ ์ž์‹ ์ด ๊พธ๋ฏธ๋Š” ๋ฌธ์ž์—ด์„ ์ˆ˜์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋‹จ์ง€, ๊ทธ ๋ฌธ์ž์—ด๊ณผ ์ถ”๊ฐ€ ์ •๋ณด๋งŒ์„ ํ•จ๊ป˜ ์ €์žฅํ•จ.ย  *365p. ํ‘œ23.1 ์ค‘์š”ํ•œ ์ฝ”์ฝ”์•„ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํด๋ž˜์Šคย * **์•ก์„ธ์„œ๋ฆฌ ๋ทฐย ** โ€“ ์ฝ”์ฝ”์•„ ํ‘œ์ค€ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ํŒจ๋„ : ์‚ฌ์šฉ์ž๊ฐ€ ๋งŒ๋“  ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ์ถ”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.ย  **NSSavePanel, NSColorPanel ๋“ฑ๋“ฑ** **โ€“** setAccessoryView ๋ฉ”์†Œ๋“œ ์ œ๊ณต : ํ•ด๋‹น ํŒจ๋„์— ์›ํ•˜๋Š” ์•ก์„ธ์„œ๋ฆฌ๋ทฐ๋ฅผ ํ‘œ์‹œ ํ• ์ˆ˜ ์žˆ์Œ. ย  โ€“ ํ‘œ์ค€ ํŒจ๋„์€ ๋‹ค์–‘ํ•œ ํŒจ๋„ ํด๋ž˜์Šค๋ฅผ ์„œ๋ธŒ ํด๋ž˜์‹ฑ ํ•˜์ง€ ์•Š์•„๋„ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋‹คย  *** OS X 10.5 ๋ถ€ํ„ฐ NSPrintPanel๊ณผ NSPageLayout ํด๋ž˜์Šค์— ย addAccessoryContoller ๋ฉ”์„œ๋“œ๋กœ ์•ก์„ธ์„œ๋ฆฌ๋ทฐ๋ฅผ ๊ด€๋ฆฌ ํ•˜๋Š” ์ƒˆ๋กœ์šด ๋ฐฉ์‹ ์ œ๊ณตํ•จ.ย ** โ€“ ์•ก์„ธ์„œ๋ฆฌ ๋ทฐ๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์—์„œ ์•ก์„ธ์„œ๋ฆฌ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ณ€ํ™”ย  โ€“ MVC ํŒจํ„ด์˜ ์ผ๊ด€๋œ ์‚ฌ์šฉ์„ ์žฅ๋ ค, ์•ก์„ธ์„œ๋ฆฌ ๋ทฐ์™€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง ์‚ฌ์ด์— ์œ„์น˜ํ•œ ์ปจํŠธ๋กค๋Ÿฌ ์ฝ”๋“œ๋ฅผ ์–ด๋””์— ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š”์ง€ ๋ช…ํ™•ํžˆ ํ•จ.ย  ** ํŒจํ„ด ์‚ฌ์šฉ ๊ฒฐ๊ณผ **ย  โ€“ ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์ƒ์†๊ด€๊ณ„๋Š” ๊ฐ•๋ ฅ ๊ทธ๋Ÿฌ๋‚˜, ์˜์กด์„ฑ์˜ ์›์ธ์ž„. โ€“ ์ปดํŒŒ์ผ์‹œ ์ •์ ์œผ๋กœ ์„ค์ •๋˜๊ณ , ์„œ๋ธŒํด๋ž˜์Šค์˜ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค์— ์˜ํ–ฅ์„ ์ค€๋‹ค. โ€“ ์ปดํฌ์ง€์…˜์€ ๋ณด๋‹ค ์œ ์—ฐํ•œ ๋Œ€์•ˆ์„ ์ œ๊ณตํ•จ. โ€“ ๊ฐ์ฒด๋ฅผ ๋Ÿฐํƒ€์ž„์‹œ ํ™•์žฅํ•˜๋Š”๊ฒƒ์€ ๋” ๋™์ ์ด๊ณ , ํด๋ž˜์Šค๊ฐ€ ์•„๋‹Œ ์ธ์Šคํ„ด์Šค ๋‹จ์šฐ์—์„œ์˜ ์ ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. โ€“ ๋‹ค์ˆ˜์˜ ํด๋ž˜์Šค ์‚ฌ์šฉ์„ ํ•˜์ง€ ์•Š๊ณ ๋„ ๋” ์ปดํฌ์ง€์…˜์œผ๋กœ ๋‹ค์ˆ˜์˜ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.ย  โ€“ ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„ ์›Œํฌ ์—์„œ๋Š” ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๊ฐ€ ๊พธ๋ฏธ๋Š” ๊ฐ์ฒด์™€ ๋™์ผํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ–๋„๋ก ์š”๊ตฌํ•จ.ย  โ€“ ์ฝ”์ฝ”์•„์—์„œ๋Š” ์ œ์•ฝ์ด ์—†์Œ.ย  ย 

#cocoa design pattern  #Composition  #Decorator  #dev  #has-a  #IOS  #is-a  #๋ฐ์ฝ”๋ ˆ์ดํ„ฐ  #์ฝ”์ฝ”์•„ ๋””์ž์ธ ํŒจํ„ด