[Cocoa Design Pattern] 21. Prototype
![](http://ash84.net/wp-content/uploads/1/cfile21.uf.197E8A4E4E1BAD76357DCD.jpg)
**ํ๋กํ ํ์
์ด๋?**
โ ๊ธฐ๋ฅ ๊ตฌํ์ ์ํด ๋ณต์ฌํด์ ์ฌ์ฉํ๋ ๊ฐ์ฒด
โ ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํด์ ์ฌ์ฉํ๋ ๊ฒ์, ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ๊ฒ ๋ณด๋ค ๋ ์ ์ฐํ๋ค.
โ ๊ฐ์ฒด๊ฐ์ ๊ฐํ ์์กด์ฑ ๊ด๊ณ๋ฅผ ํผํ๋๋ก ํด์ค๋ค. โ**ํจํด์ด ๋ง๋ค์ด์ง ๋๊ธฐย **
โ ์๋ก ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ๊ฐ์ฒด์ ํด๋น ๊ฐ์ฒด์ ํ์
๊ฐ์ ์์กด์ฑ์ ์ต์ํย
โ ์์ฑ๋๋ ๊ฐ์ฒด์ ์ข
๋ฅ์ ๋ํ ์ ๋ณด๋ฅผ ์ปดํ์ผ์ ์ง์ ํ์ง ์๊ณ , ๋ฐํ์์ ์กฐ์ ํ ์ ์๋๋ก ํ๋ค.ย
**ํจํด์ผ๋ก ๋ฌธ์ ํด๊ฒฐ**
โ ํต์ฌ๊ธฐ๋ฅ : ๋ณต์ฌ ๋ ์ ์๋ค๋ ๊ฒย
โ NSCopying, NSCoding ํ๋กํ ์ฝ ์ ๊ณต
*** NSCopying protocol ย โ copyWithZone ย ๋ฉ์๋**
โ ๋ฉ์๋๋ฅผ ์์ ํ๋ ๊ฐ์ฒด์ ๋์ผํ ์ํ์ ๊ฐ์ฒด๋ฅผ ๋ฐํํด์ผํ๋ค.ย
1. Shallow Copy
โ ๋ณต์ฌ๋๋ ๊ฐ์ฒด์ ๋์ผํ ๊ฐ์ ์ ์ฅํ๋ค.ย
โ ์๋ณธ์ ๊ฐ๋ฆฌํค๋ ๋ ๋ค๋ฅธ ํฌ์ธํฐ๋ฅผ ๋ง๋๋ ๊ฒ, ํฌ์ธํฐ ๋ณต์ฌย 2. Deep Copy
โ ์๋ณธ ๊ฐ์ฒด์ ์ ์ฅ๋ ๊ฐ์ ์ค์ ๋ณต์ฌ๋ณธ์ ์ ์ฅ
* ํ๋กํ ํ์
ํจํด์ ๋ฅ ์นดํผ๋ฅผ ์ ๊ณตํ๋ ๊ฐ์ฒด์ ๊ฐ์ฅ ์ ๋์,
ย ์๋ฒฝํ ๋
๋ฆฝ์ ์ธ ์ฌ๋ณธ์ด ํ์ํ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ ๋๋ฌธ์.ย
ex) IB Library์ ๊ฒฝ์ฐ, ๋ณต์ฌ๋ ๊ฐ์ฒด๋ ์ธํฐํ์ด์ค ๋น๋๊ฐ ์ข
๋ฃ๋ ํ์๋ ๋์ํด์ผํจ.ย ๊ทธ๋ฌ๋, ๋๋ถ๋ถ์ ์ฝ์ฝ์ํด๋์ค๋ NSCopying ํ๋กํ ์ฝ์ ๊ตฌํํด์ Shallow copy๋ฅผ ๋ฐํํจ.ย
*** Deep Copy๊ฐ ์ฝ์ง ์์ ์ด์ **
ย : ์ฐธ์กฐํ๊ณ ์๋ ๊ฐ์ฒด์ค Shallow copy๋ฅผ ๋ฐํํ๋๋ก ๊ตฌํ๋์ด ์๋ค๋ฉด, ์์ด๊ฒ ๋๋ค.ย
*** NSArchiver, NSUnarchiver class ๋ ์ฌ์ด Deep Copy ๋ฐฉ์์ ์ ๊ณตย **
โ ๋ณต์ฌ๋๋ ๊ฐ์ฒด์ ๊ทธ ๊ฐ์ฒด ๋ด์์ ์ฐธ์กฐํ๋ ๋ชจ๋ ๊ฐ์ฒด๋ค์ด NSCoding Protocol์ ๋ฐ๋ฅธ๋ค๋ฉด, Deep Copy ๋ฐํ
โ 347p ์์ : ์์นด์ด๋น ํ ํ, ์ธ์์นด์ด๋นํ๋ ๊ฒ์ ๋ฅ ์นดํผ๋ฅผ ๋ง๋ค๊ธฐ ์ํ ์ต์ง ๊ธฐ๋ฒ
โ ย IB ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ ๋ ์ฌ์ฉํ๋ ๋ฐฉ์.ย
โ โ ์์
์ค์ธ .NIB ํ์ผ์ ๊ฐ์ฒด๋ฅผ ๋๋๊ทธ ํด์ ์ฎ๊ธฐ๋ฉด, ๊ฐ์ฒด๋ ๊ธฐ์กด์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ธ์คํด์ค๋ฅด์์ ๋จผ์ ์์นด์ด๋ธ ๋๊ณ ๋์ ์ธ ์์นด์ด๋ธํ์ฌ ์ถ๊ฐ ํธ์งํ ์ฌ๋ณธ์ ์์ฑํ๋ค. ๊ทธ๋ฆฌ๊ณ .NIB ํ์ผ์ด ์ ์ฅ๋ ๋, ๊ฐ์ฒด๋ค์ ๋ค์ ์์นด์ด๋ธ๋๋ค. .NIBํ์ผ์ด ๋ก๋๋๋ฉด ํ์ผ์์ ๊ฐ์ฒด๊ฐ ์ธ์์นด์ด๋ธ ๋์ด์ IB์ ๋ณต์๋๋ค.โ
*** NSCell โ NSCopyingํ๋กํ ์ฝ์ ๋ค๋ฅธ ๊ธฐ๋ฒ์ธ NSCopyObject() ํจ์ ์ฌ์ฉํจ.ย
**
NSCopyObject : ์๋ณธ์ด ์ฐจ์งํ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ทธ๋๋ก ๋ณต์ฌํด์ Shallow Copy ์์ฑํจ.ย
์ดํ, NSCell์ -copyWithZone์ด ์๋ณธ์ ์ ์ฅ๋ ์์ฑ์ด ์ฐธ์กฐํ๋ ๊ฐ์ฒด์ copy ๋ฉ์์ง๋ฅผ ๋ณด๋ด ๋ณต์ฌํจ.ย
NSCell์ Shallow copy ์ ย Deep Copy๋ฅผ ์์ด ์.ย
**
์ฝ์ฝ์ ์ฌ์ฉ ์์ ย **
โ IB ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ์ฒด๋ ๋ชจ๋ ํ๋กํ ํ์
: ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํจ์ผ๋ก์จ IB๋ฅผ ์ฌ ์ปดํ์ผ ํ์ง ์์๋ ํ์ฅ์ด ๊ฐ๋ฅํจ.ย
โ NSMatrix ํด๋์ค์์๋ ํ๋กํ ํ์
NSCell ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํจ.
โ ๋งคํธ๋ฆญ์ค์์ ํ, ์ด ์ถ๊ฐ๊ฐ ์์์์๋ ํ์ํ ๋งํผ ํ๋กํ ํ์
์
์ ๋ณต์ฌํ๋ค.ย
โ NSMatrix ํด๋์ค๋ ์์ ์ด ์ฌ์ฉํ๋ ์
์ ์์กดํ์ง ์๋๋ค.ย
**349p**
NSCell์ ์๋ธ ํด๋์คย MYLabeledBarCell์์ ์ ์ํ barValue ์ญ์ NSCopyObject()์ ์ํด์ ์์๋ ๋ณ์๋ค๊ณผ ํจ๊ป ์๋์ผ๋ก ๋ณต์ฌ๋๋ค. ย
ย
* NSCopyObject() ํจ์๋ ํฌ์ธํฐ๋ฅผ ์ ์ฅํ์ง ์๋ ํด๋์ค์๋ง ์ฌ์ฉํด์ผ ํ๋ค.ย
* NSCell์ NSCopyObejct() ์ฌ์ฉ์ NSCell์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ์ธ์คํด์ค ๋ณ์๋ฅผ ์ถ๊ฐํ๋ ์๋ธํด๋์ค ์์ฑํ๊ธฐ๋ฅผ ์ด๋ ต๊ฒ ๋ง๋ ๋ค.ย
**ํจํด ์ฌ์ฉ ๊ฒฐ๊ณผ**
โ ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ๋ ์์
์ด ์๋ก์ด ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ๊ฒ ๋งํผ ์๊ฐ๊ณผ ๋น์ฉ์์(์ ์ฝ๋๋ ๊ฒ์ด ์๋)
โ NSMatrix ์ ๊ฒฝ์ฐ, ํ์ํ ์
์ ์๊ฐ ์ค์ด๋ค๋๋ผ๋ ํ๋กํ ํ์
์ ์
์ฌ๋ณธ์ ๊ฑฐ์ ๋ฆด๋ฆฌ์ฆ ํ์ง ์๋๋ฐ, ๋ค์ ํ์ํ ๊ฒฝ์ฐ ์ ์งํ๊ณ ์๋ ์ฌ๋ณธ์ ์ฌ์ฉํ๋ค. ๊ทธ๋ฌ๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํ์ง ์๋ ์ฌ๋ณธ์ ์ ์ฅํ๋๋ฐ ์๋น๋๋ค๋ ์ธก๋ฉฐ์์ ๋ณด๋ฉด ๋จ์ ์ด๋ค.
ย โ ํ๋กํ ํ์
ํจํด ์ฃผ์์ฌํญ : ํ๋กํ ํ์
๊ฐ์ฒด๋ฅผ ์ง์ํ๋๋ฐ ํ์ํ ํ๋์ ๋ฌธ์ํ ํ๋ ๊ฒ์ด ํ์ํจ.ย