์ปดํฌ์งํธ ํจํด์ ๊ตฌ์กฐ ํจํด ์ค ํ๋๋ก, ์ฌ์ฉ์๊ฐ ๋ณตํฉ ๊ฐ์ฒด(group of object) ๋ ๋จ์ผ ๊ฐ์ฒด๋ฅผ ๋์ผํ๊ฒ ์ทจ๊ธํ๋ ๊ฒ์ ๋ชฉ์ ์ผ๋ก ํ๋ค. ๊ฐ์ฒด๋ค์ ๊ด๊ณ๋ฅผ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ๊ตฌ์ฑํ์ฌ ๋ถ๋ถ-์ ์ฒด(whole-part) ๊ณ์ธต์ ํํํ๋ ํจํด์ด๋ค.
โ ๊ตฌ์กฐ ํจํด
๊ตฌ์กฐ ํจํด์ ์์ ํด๋์ค๋ค์ ์์๊ณผ ํฉ์ฑ์ ์ด์ฉํด ๋ ํฐ ํด๋์ค๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ ํจํด์ด๋ค. ์ด ํจํด์ ์ฌ์ฉํ๋ฉด ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐํ ํด๋์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ๋์ฒ๋ผ ์ฌ์ฉํ ์ ์๋ค. ๋ ์ฌ๋ฌ ์ธํฐํ์ด์ค๋ฅผ ํฉ์ฑํด ์๋ก ๋ค๋ฅธ ์ธํฐํ์ด์ค๋ค์ ๋์ผํ ์ถ์์ ์ ๊ณตํ๋ค. ๋ฐํ์ ๋จ๊ณ์์ ๋ณตํฉ ๋ฐฉ๋ฒ์ด๋ ๋์์ ๋ณ๊ฒฝํ ์ ์๋ค๋ ์ ์์ ์ ์ฐ์ฑ์ ๊ฐ๋๋ค.
โ ๋ถ๋ถ-์ ์ฒด ๊ณ์ธต
์ด ์ฉ์ด๋ ์์ ๊ฒ์ ๊ธฐ๋ฐ์ผ๋ก ๋ ํฐ ๋ฌผ์ฒด๋ฅผ ๊ตฌ์ฑํ๋ ๊ฑธ ๋ํ๋ธ๋ค.
์ปดํฌ์งํธ ํจํด์ ๋งฅ๋ฝ์์ ํฌ๊ณ ์์ ๊ฐ์ฒด๋ ๋ชจ๋ ๊ฐ์ ํด๋์ค์ ์ธ์คํด์ค๋ค.
์์คํ ์ ํ์ ์์คํ ๋๋ ๊ตฌ์ฑ์์๋ก ๊ตฌ์ฑ๋๋ค. ๊ตฌ์ฑ์์๋ ๋ ์์ ๊ตฌ์ฑ์์๋ก ๋ ๋๋ ์ ์๋ค. ์ด๊ฒ์ด ๋ถ๋ถ-์ ์ฒด ๊ณ์ธต์ด๋ค. ํฉ์ฑ(composite)์ ๋ชฉ์ ์ ๊ฐ์ฒด๋ฅผ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ๊ตฌ์ฑํด์ ๋ถ๋ถ-์ ์ฒด ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ํ๋ด๋ ๊ฒ์ด๋ค.
๊ฐ๋จํ ์ ๋ฆฌํ๋ฉด, ์ปดํฌ์งํธ ํจํด์ ์์ ๊ฐ์ฒด๋ค์ ํธ๋ฆฌ ๊ตฌ์กฐ ํํ๋ก ์ฎ์ด์ ํฐ ํ๋ก๊ทธ๋จ์ ๋ง๋ค ๋ ์ฌ์ฉํ ์ ์๋ ํจํด์ด๋ค.
Component : ๋ชจ๋ component ๋ค์ ์ํ ์ถ์ํ๋ ๊ฐ๋ ์ผ๋ก์จ, Leaf ํด๋์ค์ Composite ํด๋์ค์ ๊ณตํต์ ์ธ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๋ค. ๋ํ ์์ ์ปดํฌ๋ํธ์ ์ ๊ทผ, ๊ด๋ฆฌํ๊ธฐ ์ํ ์ธํฐํ์ด์ค ์ ์ธํ๋ค.
Leaf : Composite ๊ฐ์ฒด์ ๋ถํ์ผ๋ก ์ค์ ๋๋ค. Leaf์๋ ์์์ด ์๊ณ ์ปดํฌ์ง์ ์ ๊ฐ์ฒด ๋์์ ์ ์ํ๋ค. ์ด ํด๋์ค๋ค์ ์์์ ํ๋์ ๊ตฌ์ฑ๋ฌผ์ ๋ง๋ ๋ค.
Composite : ๋ณต์ ๊ฐ์ Component๋ฅผ ๊ฐ๋๋ก ์ ์๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋ณต์ ๊ฐ์ Leaf, ์ฌ์ง์ด ๋ณต์ ๊ฐ์ Composite ๊ฐ์ฒด๋ฅผ ๋ถ๋ถ์ผ๋ก ๊ฐ์ง ์ ์๋ค. ์์์ด ์๋ ์ปดํฌ๋ํธ์ ๋์ ์ ์ํ๊ณ ์ปดํฌ๋ํธ ์ธํฐํ์ด์ค์์ ์์ ๊ด๋ จ ์์ ๊ตฌํํ๋ค. ์ฆ, Composite ํด๋์ค๋ Component ๊ฐ์ฒด ์์๋ค์ ์ ์งํ๋ฉฐ operation() ๊ณผ ๊ฐ์ ์์ฒญ์ ํตํดย ์์๋ค์๊ฒ ์ ๋ฌํ๋ค.
์ฌ์ฉ์ : ์ปดํฌ๋ํธ ์ธํฐํ์ด์ค๋ฅผ ํตํด ์ปดํฌ์ง์
์ ๊ฐ์ฒด๋ฅผ ์กฐ์ํ๋ค.
โ
์ฌ์ฉ์๋ ํธ๋ฆฌ ๊ตฌ์กฐ์์ ์ต์๋จ์ ์กด์ฌํ๋ "Composite1"์ ์์ฒญ์ ๋ณด๋ธ๋ค. ๊ทธ๋ฌ๋ฉด "Component" ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ฐ์ฒด๋ค์ย ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ํ ๋๋ก ์์์ ์๋ ๋ฐฉํฅ์ผ๋ก ๋ชจ๋ ์์ ์์์๊ฒ ์ ๋ฌํ๊ฒ ๋๋ค. ์ด๊ฒ์ ๋ฐํ์์์ ์ผ์ด๋๋ ํ์๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
โ
์ปดํฌ์งํธ ํจํด์ ์ฌ์ฉํ๋ฉด ์ข์ ๊ฒฝ์ฐ
์ปดํฌ์งํธ ํจํด์ ์ฌ์ฉ์๊ฐ ๊ฐ์ฒด์ ๊ตฌ์ฑ, ๊ฐ๋ณ ๊ฐ์ฒด ๊ฐ์ ์ฐจ์ด๋ฅผ ๋ฌด์ํด์ผ ํ ๋ ์จ์ผ ํ๋ค. ๊ฐ๋ฐ์๊ฐ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ฌ๋ฌ ๊ฐ์ฒด๋ฅผ ์ฐ๊ณ ์์ผ๋ฉฐ ๊ฐ๊ฐ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๊ฑฐ์ ๋์ผํ ์ฝ๋๋ฅผ ์ฐ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค๋ฉด ๊ธฐ๋ณธ(primitives) ๋ฐ ๋ณตํฉ์ ๊ฐ์ ์ข
๋ฅ๋ก ์ทจ๊ธํ๋ ๊ฒ์ด ๋ ๋ณต์กํ๋ค.
์ปดํฌ์งํธ ํจํด์ ์ฌ์ฉํ๋ฉด ์ข์์
1. ๊ฐ์ฒด ์๊ฐ ์ ์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ค๊ณ OutOfMemoryError ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๊ฒ ๊ด๋ฆฌํ ์ ์๋ค.
2. ๊ฐ์ฒด๋ฅผ ๊ณต์ ํจ์ผ๋ก์จ ํ๋ก๊ทธ๋จ ์คํ ์๊ฐ์ ์ค์ผ ์ ์๋ค.
์ปดํฌ์งํธ ํจํด์ด ๊ถ์ฅ๋์ง ์๋ ๊ฒฝ์ฐ
1. ์ปดํฌ์งํธ ํจํด์ ์ฐ๋ฉด ๋ณตํฉ ์ปดํฌ๋ํธ์ ์ ํ์ ์ ํํ๊ธฐ๊ฐ ์ด๋ ค์์ง๋ค. ๋ฐ๋ผ์ ๊ฐ์ฒด์ ์ ์ ๋๋ ๋ถ๋ถ ๊ณ์ธต์ ๋ํ๋ด์ง ์์ผ๋ ค๋ ๊ฒฝ์ฐ์ ์ฐ์ง ๋ง์์ผ ํ๋ค.
2. ์ปดํฌ์งํธ ํจํด์ ๋์์ธ์ ์ง๋์น๊ฒ ์ผ๋ฐ์ ์ผ๋ก ๋ง๋ค ์ ์๋ค. ๋๋ก๋ ์ปดํฌ์งํธ์ ํน์ ์ปดํฌ๋ํธ๋ง ํฌํจ๋๊ธฐ๋ฅผ ์ํ ์ ์๋ค. ์ปดํฌ์งํธ ํจํด์ ์ฐ๋ฉด ์ด๋ฐ ์ ์ฝ ์กฐ๊ฑด์ ์ ์ฉํ๊ธฐ ์ํด ํ์
์์คํ
์ ์์กดํ ์ ์๋ค. ๋์ ๋ฐํ์ ๊ฒ์ฌ๋ฅผ ์จ์ผ ํ๋ค.
โ ํ์ ์์คํ
ํ์ ์ ํ๋ก๊ทธ๋จ์ โ์ฌ๋ฐ๋ฅธ ๋์โ์ด ๋ฌด์์ธ์ง์ ๋ํ ํ๋ก๊ทธ๋๋จธ์ ์๋๋ฅผ ์ธ์ฝ๋ฉํ๋ ์ญํ ์ ํ๋ค. ์ฃผ์์ด๋ ๋ณ์๋ช ๊ณผ ๋ค๋ฅด๊ฒ ํ์ ์ ํ๋ก๊ทธ๋จ์ ์ค์ ๋์๊ณผ ์ผ์ ์์ค ์ด์์ผ๋ก ๋๋จ์ด์ง ์ ์๋ค๋ ๊ฒ์ด ๋ณด์ฅ๋๋ค. ํ์ ์์คํ ์ ํ๋ก๊ทธ๋จ ๋ด์ ํ์ ์ ์ด์ฉํด ๊ธฐ์ ๋ ํ๋ก๊ทธ๋๋จธ์ ์ฌ๋ฌ ์๋๊ฐ ๋ง์ด ๋๋์ง, ์๋ก ๋ชจ์์ ์ผ์ผํค์ง ์๋์ง ๊ฒ์ฌ(type check)๋ฅผ ํ๋ ๊ฒ์ฌ์์ด๋ค.
ex) TypeError: "x" is not a function
โ ๋ฐํ์ ๊ฒ์ฌ
๋ฐํ์ ์ค๋ฅ ๊ฒ์ฌ๋ฅผ ์ฌ์ฉํ๋ฉด ํน์ ์ข ๋ฅ์ ๋ฐํ์ ์ค๋ฅ๊ฐ ๋ณด๊ณ ๋๋๋ก ํ๋ก๊ทธ๋จ์ ๋น๋ํ ์ ์๋ค. ์ปดํ์ผ๋ฌ๊ฐ ์ปดํ์ผ์ ์งํํ๋ฉด์ ์๋ชป๋ ๋ถ๋ถ์ ์ฐพ์ ์ ์๊ฒ ํ๋ ๊ฒ์ด ๋ฐํ์์ ๊ฒ์ฌํ๋๋ก ํ๋ ๊ฒ๋ณด๋ค ์ข์ ๋ฐฉ๋ฒ์ด๋ค. ๋ฐํ์ ๊ฒ์ฌ๋ ์ปจํธ๋กค๊ณผ ๋ฐ์ดํฐ์ ์์กด์ ์ด๊ธฐ ๋๋ฌธ์, ์๋ฒฝํ๊ฒ ๋๋นํ๊ธฐ ํ๋ค๋ค. ๋ฐ๋๋ก ์ปดํ์ผ ์์ ๊ฒ์ฌ๋ ์ปจํธ๋กค๊ณผ ๋ฐ์ดํฐ์ ์์กดํ์ง ์๊ธฐ ๋๋ฌธ์ ๋น๊ต์ ์๋ฒฝํ ์ ๋ขฐ๋ฅผ ์ค ์ ์๋ค.
โ