๋ณตํ•ฉ ํŒจํ„ด(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 ํ”Œ๋žซํผ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๊ฐ•๋ ฅํ•˜๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์œ ์ง€ ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์†”๋ฃจ์…˜์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.