๋ณตํฉ ํจํด(Composite Pattern)์ ๊ฐ์ฒด๋ฅผ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ๊ตฌ์ฑํ์ฌ ๋ถ๋ถ-์ ์ฒด ๊ณ์ธต์ ๋ํ๋ผ ์ ์๋ ๊ตฌ์กฐ์ ๋์์ธ ํจํด์ ๋๋ค. ์ํํธ์จ์ด ์ํคํ ์ฒ ๋ฐ ํจํด์ ๋งฅ๋ฝ์์ ๊ฐ๋ฐ์๋ ์ผ๋ฐ์ ์ผ๋ก ํตํฉ ์ธํฐํ์ด์ค๋ฅผ ํตํด ๋ ๊ฐ๋จํ๊ณ ์์ฒด ์ ์ฌํ ๊ฐ์ฒด๋ฅผ ๊ฒฐํฉํ์ฌ ๋ณต์กํ ๊ฐ์ฒด ๋๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์ด ํจํด์ ํด๋ผ์ด์ธํธ ์ฝ๋๊ฐ ๊ฐ๋ณ ๊ฐ์ฒด์ ๋ณตํฉ ๊ฐ์ฒด๋ฅผ ๊ท ์ผํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋ ๋ค์ํ ์์ค์ ๋ณต์ก์ฑ๊ณผ ์ค์ฒฉ ๊ด๊ณ๊ฐ ์๋ ๊ฐ์ฒด์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ชจ๋ธ๋งํด์ผ ํ ๋ ํนํ ์ ์ฉํฉ๋๋ค.
์ด ํจํด์ "์์๋ณด๋ค ํฉ์ฑ"์ด๋ผ๋ ์์น์ ์ฅ๋ คํ๋ฉฐ, ๊ณ ์ ๋ ์์ ๊ณ์ธต ๊ตฌ์กฐ์ ์์กดํ๊ธฐ๋ณด๋ค๋ ๋ฐํ์์ ๋ ๋จ์ํ ๊ฐ์ฒด๋ฅผ ๊ตฌ์ฑํ์ฌ ๋ณต์กํ ๊ฐ์ฒด๋ฅผ ๊ตฌ์ถํ๋ ๊ฒ์ด ๋ ๋ซ๋ค๋ ๊ฒ์ ์์ํฉ๋๋ค. ๋ณตํฉ ํจํด์ ๊ฐ๋ณ ๊ฐ์ฒด(Leaf)์ ๋ณตํฉ ๊ฐ์ฒด(Composite) ๋ชจ๋์ ๋ํ ๊ณตํต ๋์์ ์ ์ํ๋ ๊ตฌ์ฑ ์์๋ผ๊ณ ํ๋ ์ถ์ ํด๋์ค ๋๋ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ์ฌ ์ด๋ฅผ ๋ฌ์ฑํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ๊ฐ์ฒด ๊ณ์ธต ๊ตฌ์กฐ์ ์ํธ ์์ฉํ๋ ํด๋ผ์ด์ธํธ ์ฝ๋๋ ๊ณ์ธต ๊ตฌ์กฐ ๋ด์์ ๊ฐ์ฒด๊ฐ ๊ตฌ์ฑ๋๋ ๋ฐฉ์์ ๋ํด ๊ฑฑ์ ํ์ง ์๊ณ ๊ตฌ์ฑ ์์ ์ธํฐํ์ด์ค์ ์ง์คํ ์ ์์ต๋๋ค.
๋ณตํฉ ํจํด์์ ๊ตฌ์ฑ ์์ ์ถ์ ํด๋์ค ๋๋ ์ธํฐํ์ด์ค๋ ์ผ๋ฐ์ ์ผ๋ก ํ์ ๊ตฌ์ฑ ์์ ์ถ๊ฐ, ์ ๊ฑฐ, ๊ฒ์๊ณผ ๊ฐ์ ์์-ํ์ ๊ด๊ณ์ ๊ตฌ์ฑ ์์์์ ์ํํด์ผ ํ๋ ๋ชจ๋ ์์ ์ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋ฉ์๋๋ฅผ ์ ์ธํฉ๋๋ค. ๊ฐ๋ณ ๊ฐ์ฒด๋ฅผ ๋ํ๋ด๋ Leaf ํด๋์ค์ ๋ณตํฉ ๊ฐ์ฒด๋ฅผ ๋ํ๋ด๋ Composite ํด๋์ค๋ ๋ ๋ค Component ์ธํฐํ์ด์ค๋ฅผ ์์ํ๊ฑฐ๋ ๊ตฌํํฉ๋๋ค. Leaf ํด๋์ค๋ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง Composite ํด๋์ค๋ ์ผ๋ฐ์ ์ผ๋ก ์์ ๊ตฌ์ฑ ์์ ์ปฌ๋ ์ ์ ์ ์ฅํ๊ณ ์ด๋ฌํ ์์์๊ฒ ์์ ์ ์์ํ๋ฉฐ ์ ํ์ ์ผ๋ก ๋ณตํฉ ๊ฐ์ฒด์ ๊ด๋ จ๋ ์ถ๊ฐ ๋์์ ๊ตฌํํฉ๋๋ค.
Composite Pattern์ ์ค์ํ ์ฅ์ ์ ํตํฉ Component ์ธํฐํ์ด์ค๋ฅผ ํตํด ๊ฐ๋ณ(Leaf) ์์์ ๋ณตํฉ(Composite) ์์๋ฅผ ๋์ผํ๊ฒ ์ฒ๋ฆฌํ์ฌ ํด๋ผ์ด์ธํธ ์ฝ๋๋ฅผ ๋จ์ํํ๋ ๊ธฐ๋ฅ์ ๋๋ค. ์ด๋ฅผ ํตํด ํด๋ผ์ด์ธํธ ์ฝ๋๋ ์ ํ ํ์ธ, ์กฐ๊ฑด๋ฌธ ๋๋ ๋ค๋ฅธ ๊ฐ์ฒด ์ ํ์ ์ฒ๋ฆฌํ๋ ๋ฐ ํ์ํ ๊ธฐํ ๋ฉ์ปค๋์ฆ ์์ด๋ ๊ฐ์ฒด ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ํ์ํ๊ณ ์ํธ ์์ฉํ ์ ์์ต๋๋ค.
์ค์ ๋ณตํฉ ํจํด์ ์ฃผ๋ชฉํ ๋งํ ์ ์ค ํ๋๋ ์น ๊ฐ๋ฐ์ DOM(๋ฌธ์ ๊ฐ์ฒด ๋ชจ๋ธ)์ ๋๋ค. DOM์ HTML ๋๋ XML ๋ฌธ์์ ๊ตฌ์กฐ๋ฅผ ํธ๋ฆฌ์ ๊ฐ์ ๊ฐ์ฒด ๊ณ์ธต ๊ตฌ์กฐ๋ก ๋ํ๋ ๋๋ค. ์ฌ๊ธฐ์ ํธ๋ฆฌ์ ๊ฐ ๋ ธ๋๋ ๊ฐ๋ณ ์์, ์์ฑ ๋๋ ํ ์คํธ ์ฝํ ์ธ ์ด๊ฑฐ๋ ๋ค๋ฅธ ์์๋ฅผ ํฌํจํ๋ ๋ณตํฉ ์์์ผ ์ ์์ต๋๋ค. DOM์ ์ฌ์ฉํ๋ฉด DOM์ ํตํด ๊ฐ๋ฐ์๋ ๋ฌธ์์ ๋ณต์ก์ฑ์ ๊ด๊ณ์์ด ์ผ๊ด๋๊ณ ํตํฉ๋ API๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์ ๊ตฌ์กฐ๋ฅผ ์์ฑ, ์์ ๋ฐ ํ์ํ ์ ์์ต๋๋ค.
๋ ๋ค๋ฅธ ์๋ ์ด์ ์ฒด์ ์ ํ์ผ ์์คํ ์ ๋๋ค. ์ด ์์์ Component ์ธํฐํ์ด์ค๋ ์ผ๋ฐ ํ์ผ ์์คํ ํญ๋ชฉ์ ๋ํ๋ด๋ฉฐ Leaf ํด๋์ค๋ ๊ฐ๋ณ ํ์ผ์ ๋ํ๋ด๊ณ Composite ํด๋์ค๋ ํ์ผ๊ณผ ๋ค๋ฅธ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ชจ๋ ํฌํจํ ์ ์๋ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ํ๋ ๋๋ค. ๊ทธ๋ฐ ๋ค์ ํด๋ผ์ด์ธํธ ์ฝ๋๋ ํตํฉ ํ์ผ ์์คํ ํญ๋ชฉ ์ธํฐํ์ด์ค๋ฅผ ํตํด ํ์ผ ์์คํ ๊ณผ ์ํธ ์์ฉํ์ฌ ํ์ผ๊ณผ ๋๋ ํฐ๋ฆฌ๋ฅผ ๊ท ์ผํ๊ฒ ์ฒ๋ฆฌํ๊ณ ์ ์ฒด ์ฝ๋ ๋ณต์ก์ฑ์ ๋จ์ํํ ์ ์์ต๋๋ค.
AppMaster ํ๋ซํผ์์ ๋ณตํฉ ํจํด์ UI ๊ตฌ์ฑ ์์ ๊ด๋ฆฌ, ๋ฐฑ์๋์์ ๋ณต์กํ ๋ฐ์ดํฐ ๋ชจ๋ธ ๊ตฌ์ถ, ๋น์ฆ๋์ค ํ๋ก์ธ์ค๋ฅผ ์ค์ฒฉ๋ ๋ชจ๋์ ์์ ์ผ๋ก ๊ตฌ์ฑ ๋ฑ ๋ค์ํ ์๋๋ฆฌ์ค์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ตฌ์ฑ ์์น๊ณผ ํตํฉ ์ธํฐํ์ด์ค๋ฅผ ํ์ฉํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ ๊ธฐ์ ์ ๋ถ์ฑ๋ฅผ ๋ฐ์์ํค๊ฑฐ๋ ์ ์ฐ์ฑ๊ณผ ์ฑ๋ฅ์ ํฌ์ํ์ง ์๊ณ ๋ AppMaster ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฅ ๊ฐ๋ฅํ๊ณ ์ ์ง ๊ด๋ฆฌ๊ฐ ์ฉ์ดํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์์ต๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก ๋ณตํฉ ํจํด์ ํด๋ผ์ด์ธํธ ์ฝ๋ ๋จ์ํ, ์์๋ณด๋ค ๊ตฌ์ฑ ์ด์ง, ๋ณต์กํ๊ณ ํธ๋ฆฌ์ ๊ฐ์ ๊ฐ์ฒด ๊ณ์ธต ๊ตฌ์กฐ์ ์ํํ ํํ ํ์ฑํ ๋ฑ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ ํ๋ก์ธ์ค์ ์๋ง์ ์ด์ ์ ์ ๊ณตํ๋ ๊ฐ๋ ฅํ ๋์์ธ ํจํด์ ๋๋ค. ๊ฐ๋ฐ์๋ ์ด ํจํด์ ์ฌ๋ฐ๋ฅธ ์ํฉ์์ ์ดํดํ๊ณ ์ ์ฉํจ์ผ๋ก์จ ์๊ฐ์ ๊ตฌ์ฑ, ๋ชจ๋์ฑ ๋ฐ ํตํฉ๋๊ณ ํจ์จ์ ์ธ ๊ฐ๋ฐ ์ํฌํ๋ก์ฐ๋ฅผ ๊ฐ์กฐํ๋ AppMaster ํ๋ซํผ์์ ์ ๊ณตํ๋ ๊ฒ๊ณผ ๊ฐ์ ๊ฐ๋ ฅํ๊ณ ํ์ฅ ๊ฐ๋ฅํ๋ฉฐ ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅํ ์ํํธ์จ์ด ์๋ฃจ์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.