[Cocoa Design pattern] 23. Decorator
ย
**๋ฐ์ฝ๋ ์ดํฐ๋?**
โ ์๋ธํด๋์ฑ์ ํตํด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ๋์ ์ปดํฌ์ง์
์ ํตํด์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๊ธฐ๋ฅ์ ๊ฐ์ฒด์ ์ถ๊ฐ
โ ์๋ธ ํด๋์ฑ์ ์ปดํ์ผ ๋จ๊ณ์์ ์ ์ํด์ผ ํ์ง๋ง, ๋ฐ์ฝ๋ ์ดํฐ๋ ๋ฐํ์ ๋จ๊ณ์์ ์ถ๊ฐ ๋ฐ ๊ตฌ์ฑ ๊ฐ๋ฅํจ.ย
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
#๋ฐ์ฝ๋ ์ดํฐ
#์ฝ์ฝ์ ๋์์ธ ํจํด