GoF์ ๋์์ธ ํจํด, ๋ณตํฉ์ฒด ํจํด์ ๋ํด ์์๋ณธ๋ค.
ํด๋น ๊ธ์, ๋ค์์ ์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ดํดํ๋ ๊ฒ์ด ํธ๋ฆฌํฉ๋๋ค.
ํต์ฌ ์์ฝ
- ๋จ์ผ์ฒด์ ์งํฉ์ฒด๋ฅผ ํ๋์ ๋์ผํ ๊ฐ๋ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํ ํจํด
- ํด๋ ๊ตฌ์กฐ, View ๊ตฌ์กฐ ๋ฑ์ด ์๊ฐ ๋ ์ ์๊ฒ ๋ค.
- ๋ถ๋ถ๊ณผ ์ ์ฒด์ ๊ณ์ธต์ ํํํ๊ธฐ ์ํด ๊ฐ์ฒด๋ค์ ๋ชจ์ ํธ๋ฆฌ๊ตฌ์กฐ๋ก ๊ตฌ์ฑํ๋ค.
์์
- ํด๋๊ตฌ์กฐ๋ฅผ ์๊ฐํด๋ณด์.
- ํ์ผ ์ ์ฅ ๊ตฌ์กฐ๋ ํ์ผ๊ณผ ํด๋ ๋๊ฐ์ง๋ก ๋๋ ์ ์๋ค.
- ๋ ํ์ ์ ํ๋๋ก ๋ฌถ๋ unit์ด ์๊ณ , ์ด unit์์๋ ์ด๋ฆ๊ณผ ํฌ๊ธฐ๋ฅผ ์ง์ ๊ฐ๋ฅํ๋ค.
- Folder์ ๊ฒฝ์ฐ์๋ ๋ด๋ถ์ ์ผ๋ก ๋ค๋ฅธ ํ์ผ ํน์ ํด๋๋ฅผ ๊ฐ์ง ์ ์๋ค.
- ๋จ์ผ์ฒด๋ ํ์ผ, ์งํฉ์ฒด๋ ํด๋๊ฐ ๋ ๊ฒ์ด๋ค.
- ์ด๋ฐ ๊ฒฝ์ฐ, Folder๋ ์์ ์๊ฒ ์ํ unit์ ์ํํ๋ฉด์ ํฌ๊ธฐ๋ฅผ ๊ตฌํ ์ ์์ด์ผ ํ๋ค.
- ์ถ๊ฐ์ ์ผ๋ก ๋ด๋ถ ํ์ผ, ํด๋๋ฅผ ์ํํ ์ ์์ด์ผ ํ๋ค.
- ์ด๋ฌํ ์ ์์ Composite ํจํด์ ์ฌ๊ทํจ์๊ฐ ํ์ฐ์ ์ผ๋ก ์ฌ์ฉ๋ ์ ๋ฐ์ ์๋ค.
- ์ฝ๋
๋๊ธฐ
- ๋ง์ฝ ์์ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๊ณ ์๊ฐํด๋ณด์.
- ๊ฐ๊ฐ์ File๊ณผ ์ด File๋ค์ ๊ฐ๋ Container๊ฐ ์์ ๊ฒ์ด๊ณ ,
- ์์ ์์์ฒ๋ผ ํ๋์ ํ์ ์ผ๋ก ๊ด๋ฆฌํ์ง ์๋ ๊ฒฝ์ฐ, ๋ ํ์ ์์ฒด๋ฅผ ๊ด๋ฆฌํด์ผ ํ๋ค.
- ์ด ๊ณผ์ ์์ ํ๋์ ํ์ ์ผ๋ก ๋ฌถ์ด ํธ๋ฆฌ๊ตฌ์กฐ๋ก ์ฒ๋ฆฌํ๋ ๊ฒฝ์ฐ ๋์ ํตํฉํด์ ์ฒ๋ฆฌํ ์ ์๋ค.
- ์ฌ์ฉํ๋ ์ชฝ์์๋ ์ด๋ค ํ์
์ธ์ง ์ ํ์๊ฐ ์์ด ํ๋์
Unit
์ด๋ผ๋ ํ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๊ฒ ๋๋ค.
ํ์ฉ์ฑ
- ๋ถ๋ถ-์ ์ฒด์ ๊ฐ์ฒด ๊ณํต์ ํํํ๊ณ ์ถ์ ๋
- ์ฌ์ฉ์๊ฐ ๊ฐ์ฒด์ ํฉ์ฑ์ผ๋ก ์๊ธด ๋ณตํฉ ๊ฐ์ฒด์ ๊ฐ๊ฐ์ ๊ฐ์ฒด ์ฌ์ด์ ์ฐจ์ด๋ฅผ ๋ชจ๋ฅด๊ณ ๋ ์ผ์ ํ ์ ์๋๋ก ํ๊ณ ์ถ์ ๋
UIView
๋ฅผ ์๊ฐํด๋ณด์.
๊ตฌ์กฐ
์ฐธ์ฌ์
- Component(
Unit
)- ์งํฉ ๊ด๊ณ์ ์ ์๋ ๋ชจ๋ ๊ฐ์ฒด์ ๋ํ ์ธํฐํ์ด์ค ์ ์
- ์ ์ฒด ํด๋์ค์ ์ํ ์์๋ค์ ๊ด๋ฆฌํ๋ ๋ฐ ํ์ํ ์ธํฐํ์ด์ค ์ ์
- Leaf(
File
)- ๊ฐ์ฅ ๋ง๋จ์ ๊ฐ์ฒด
- ํฌํจ๋๋ ๊ฒ์ด ์๋ ๊ฐ์ฒด
- Composite(
Folder
)- ์์์ด ์๋ ๊ตฌ์ฑ์์์ ๋ํ ํ๋ ์ ์
- Client(
main()
)
ํ๋ ฅ ๋ฐฉ๋ฒ
- ์ฌ์ฉ์๋ ๊ฐ์ฒด๊ฐ์ ์ํธ์์ฉ์ ์ํด Component ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ค.
- Leaf ์ธ์คํด์ค๊ฐ ์์ฒญ์ ๋ฐ์๋ค๋ฉด, ์์ ์ด ์ ์ํ ํ๋์ ์ง์ ์ํํ๋ค.
- Composite ์ธ์คํด์ค ์๋ค๋ฉด, ์์ ๊ฐ์ฒด๋ค์๊ฒ ์์ฒญ์ ์์ํ๋ค.
- ๊ทธ ์ ์ ๋ค๋ฅธ ์ฒ๋ฆฌ๋ฅผ ์งํํ ์๋ ์๋ค.
๊ฒฐ๊ณผ
- ๊ธฐ๋ณธ ๊ฐ์ฒด์ ๋ณตํฉ ๊ฐ์ฒด๋ก ๊ตฌ์ฑ๋ ํ๋์ ์ผ๊ด๋ ํด๋์ค ๊ณํต์ ์ ์ํ๋ค.
- ์ผ๋ฐํ๋ ์์ ๊ฐ๋ ์ ๊ฐ์ฒด๋ฅผ ์กฐ์ํ์ฌ ์ผ๊ด๋๊ฒ ์ฒ๋ฆฌํ ์ ์๋ค.
- ์ฌ์ฉ์์ ์ฝ๋๊ฐ ๋จ์ํด์ง๋ค.
- ์๋ก์ด ์ข ๋ฅ์ ๊ตฌ์ฑ ์์๋ฅผ ์ฝ๊ฒ ์ถ๊ฐ๊ฐ๋ฅํ๋ค.
๊ด๋ จ ํจํด๊ณผ ์ฐจ์ด์
- ๊ตฌ์ฑ ์์์ ๋ถ๋ชจ๊ฐ์ ์ฐ๊ฒฐ์ ์ฑ ์ ์ฐ์ ํจํด์์ ๋ง์ด ์ฌ์ฉ๋๋ค.
- ์ฅ์์ ํจํด๊ณผ ๋ณตํฉ์ฒด ํจํด์ ํจ๊ป ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
- ํ๋ผ์ด๊ธ ํจํด์ผ๋ก ๊ตฌ์ฑ์์์ ๊ณต์ ๋ฐฉ๋ฒ์ ์ป์ ์ ์๋ค.
- ๋ฐ๋ณต์ ํจํด์ ์ฌ์ฉํ๋ฉด ๊ตฌ์ฑ์์๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ ์ป์ ์ ์๋ค.
์๊ฐํด๋ณผ ์
- View ํ๋ก๊ทธ๋๋ฐ์์ ํด๋น ๊ตฌ์กฐ๋ฅผ ์ฟ๋ณผ ์ ์๋ค.
UIView
์ ๊ฒฝ์ฐ, View๊ฐ ์งํฉ์ฒด์ด์ ๋จ์ผ์ฒด๊ฐ ๋ ์ ์๋ค.- View์ ๊ตฌ์กฐ๋ฅผ ๋ณผ ๊ฒฝ์ฐ ์์ ๊ฐ์ ๊ตฌ์กฐ๋ก ๋์ด ์์์ ์ง๊ด์ ์ผ๋ก ํ์ธํ ์ ์๋ค.
- ๊ทธ๋์
hitTest
์ ๊ฐ์ ํจ์๋ ์ฌ๊ทํจ์๋ก ์ง์ฌ์๋ค.