์ง์ ์ ์ธ ์ข ์์ฑ์ ๋ฉ์์ง์ผ๋ก ๋์ฒด
๋๋๋ก ๋ชจ๋์ ์ผ๋ถ ์ด๋ฒคํธ/๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์ํ์์ ๋ค๋ฅธ ์ฌ๋๋ค์๊ฒ ์๋ฆฌ๊ธฐ๋ง ํ๋ฉด ๋๋ฉฐ ๋์ค์ ์ด ์ ๋ณด์ ์ด๋ค ์ผ์ด ๋ฐ์ํ๋์ง๋ ์ค์ํ์ง ์์ต๋๋ค.
์ด ๊ฒฝ์ฐ ๋ชจ๋์ "์๋ก์ ๋ํด ์" ํ์๊ฐ ์ ํ ์์ต๋๋ค. ์ฆ, ์ง์ ๋งํฌ๋ฅผ ํฌํจํ๊ณ ์ง์ ์ํธ ์์ฉํ์ง๋ง ๋ฉ์์ง (๋ฉ์์ง) ๋๋ ์ด๋ฒคํธ (์ด๋ฒคํธ)๋ฅผ ๊ตํํ๋ ๊ฒ์ผ๋ก ์ถฉ๋ถํฉ๋๋ค.
๋๋ก๋ ๋ฉ์์ง์ ํตํ ๋ชจ๋ ํต์ ์ด ์ง์ ์ข ์์ฑ๋ณด๋ค ํจ์ฌ ์ฝํ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค. ์ค์ ๋ก ๋ฉ์๋๊ฐ ํธ์ถ๋์ง ์๊ธฐ ๋๋ฌธ์ ํด๋์ค์ ๋ํ ์ ๋ณด๊ฐ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ํ์์ ์ง๋์ง ์์ต๋๋ค.
๋ฉ์๋ ์ด๋ฆ ๋์ ๋ก์ง์ด ๋ฉ์์ง ์ ํ, ํด๋น ๋งค๊ฐ๋ณ์ ๋ฐ ์ ์ก๋ ๋ฐ์ดํฐ์ ์ฐ๊ฒฐ๋๊ธฐ ์์ํฉ๋๋ค. ์ด๋ฌํ ๋ชจ๋์ ์ฐ๊ฒฐ์ด ๋ฒ์ง๋๋ค.
์ด์ ์๋ ๋ค์๊ณผ ๊ฐ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค. ์ฐ๊ฒฐ์ด ์๊ณ ๋ฉ์๋๋ฅผ ํธ์ถํ์ง ์์ต๋๋ค. ์ฐ๊ฒฐ์ด ์์ต๋๋ค. ์ด์ ๋ชจ๋ A๊ฐ ๋ฉ์์ง์์ ์ฝ๊ฐ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ธฐ ์์ํ๋ค๊ณ ์์ํด ๋ณด์ญ์์ค. ๋์์ ์ด๋ฌํ ๋ฉ์์ง์ ์์กดํ๋ ๋ชจ๋ ๋ชจ๋์ด ์ ๋๋ก ์๋ํ์ง ์์ต๋๋ค.
์ด์ ์ ์ ์ฌ์ฉ์๋ฅผ ์ถ๊ฐํ ๋ ์ธ์ฆ ๋ชจ๋์ด USER_ADDED ๋ฉ์์ง๋ฅผ ๋ณด๋๊ณ ์ ๋ฐ์ดํธ ํ ๋ฑ๋ก์ ์๋ํ ๋ ์ด ๋ฉ์์ง๋ฅผ ๋ณด๋ด๊ธฐ ์์ํ์ผ๋ฉฐ ์ถ๊ฐ๋ก ์ฑ๊ณต์ ์ธ ๋ฑ๋ก ์ฌ๋ถ๋ฅผ ๋งค๊ฐ๋ณ์์ ํ์ํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
๋ฐ๋ผ์ ๋ฉ์์ง ๋ฉ์ปค๋์ฆ์ ๋งค์ฐ ์ ๋ฅํ๊ฒ ๊ตฌํํ๋ ๊ฒ์ด ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ด์ ๋ํ ๋ค์ํ ํ ํ๋ฆฟ์ด ์์ต๋๋ค.
๊ด์ฐฐ์. ๋ง์ ๋ชจ๋์ด ํ๋์ ์ฃผ ์ํ์ ์์กดํ๋ ์ผ๋ ๋ค ์ข ์์ฑ์ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋ฉ๋๋ค. ๋ฉ์ผ๋ง ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํฉ๋๋ค. ์ฆ, ๋ฉ์ธ ๋ชจ๋์ ๋จ์ํ ๋์ผํ ๋ฉ์์ง๋ฅผ ๋ชจ๋ ๊ตฌ๋ ์์๊ฒ ๋ณด๋ด๊ณ ์ด ์ ๋ณด์ ๊ด์ฌ์ด ์๋ ๋ชจ๋์ "๊ตฌ๋ ์" ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ๋ฉ์ผ๋ง ๋ฆฌ์คํธ์ ๊ฐ์ ํฉ๋๋ค.
์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๊ฐ ์๋ ์์คํ ์์ ๋๋ฆฌ ์ฌ์ฉ๋๋ฏ๋ก ์์ฉ ํ๋ก๊ทธ๋จ(๋ชจ๋ธ)์ ํต์ฌ์ด ๋ ๋ฆฝ์ ์ผ๋ก ์ ์ง๋๋ ๋์์ ๊ด๋ จ ์ธํฐํ์ด์ค์ ๋ฌด์ธ๊ฐ ๋ณ๊ฒฝ๋์ด ์ ๋ฐ์ดํธ๊ฐ ํ์ํจ์ ์๋ฆด ์ ์์ต๋๋ค.
์ฌ๊ธฐ์์ ๋ฉ์์ง ํ์์ ์ด์ ์ฒด์ ์์ค์์ ํ์คํ๋๋ฉฐ ๊ฐ๋ฐ์๋ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ๊ณผ ์ฐ์ํ ๋ฌธ์๋ฅผ ๊ด๋ฆฌํด์ผ ํฉ๋๋ค.
๋ฉ์์ง ๋ฐฐํฌ๋ฅผ ํตํ ์ํธ ์์ฉ ๊ตฌ์ฑ์๋ ์ถ๊ฐ "๋ณด๋์ค"๊ฐ ์์ต๋๋ค. "๊ฒ์๋"(์ฆ, ์ ์ก๋) ๋ฉ์์ง์ ๋ํ "๊ตฌ๋ ์"์ ์ ํ์ ์ธ ์กด์ฌ์ ๋๋ค. ์ด์ ๊ฐ์ด ์ ์ค๊ณ๋ ์์คํ ์์๋ ๋ชจ๋์ ์ธ์ ๋ ์ง ์ถ๊ฐ/์ ๊ฑฐํ ์ ์์ต๋๋ค.
๋ฉ์์ง ๋ฒ์ค
๋ฉ์์ง ๊ตํ์ ๊ตฌ์ฑํ๊ณ ์ด๋ฅผ ์ํด ์ค์ฌ์ ํจํด์ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค .
๋ชจ๋ ๊ฐ์ ๋ค๋๋ค ์ข ์์ฑ์ด ์์ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ์ค์ฌ์๋ ๋ชจ๋ ๊ฐ์ ํต์ ์์ ์ค๊ฐ์ ์ญํ ์ ํ๋ฉฐ ํต์ ์ผํฐ ์ญํ ์ ํ๊ณ ๋ชจ๋์ด ๋ช ์์ ์ผ๋ก ์๋ก๋ฅผ ์ฐธ์กฐํ ํ์๊ฐ ์์ต๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ๋ชจ๋ ๊ฐ์ ์ํธ ์์ฉ("all with all")์ ๋ชจ๋๊ณผ ์ค๊ฐ์ ๊ฐ์ ์ํธ ์์ฉ("one with all")์ผ๋ก ๋์ฒด๋ฉ๋๋ค. ์ค์ฌ์๋ ์ฌ๋ฌ ๋ชจ๋ ๊ฐ์ ์ํธ ์์ฉ์ ์บก์ํํ๋ค๊ณ ํฉ๋๋ค.
์ด๊ฒ์ ์์ ์ค๋งํธ ์ค๊ฐ์ ์ ๋๋ค . ๊ฐ๋ฐ์๊ฐ ํน์ ๋ฉ์์ง ์์ ์ ์ผ๊ฑฐ๋ ๊บผ์ ๊ฐ๋ณ ๋ชจ๋์ ๋์์ ์ํฅ์ ๋ฏธ์น๋ ๋ชฉ๋ฐ์ ์ถ๊ฐํ๊ธฐ ์์ํ๋ ๊ณณ์ด ๊ฐ์ฅ ๋ง์ต๋๋ค.
์ ํ์ ์ธ ์ค์ ์ฌ๋ก๋ ๊ณตํญ ๊ตํต ํต์ ์ ๋๋ค. ํญ๊ณต๊ธฐ์ ๋ชจ๋ ๋ฉ์์ง๋ ํญ๊ณต๊ธฐ ๊ฐ์ ์ง์ ์ ์ก๋๋ ๋์ ์ปจํธ๋กค๋ฌ์ ๊ด์ ํ์ผ๋ก ์ด๋ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ด์ ์ฌ๋ ์ด๋ฏธ ์ด๋ค ๋นํ๊ธฐ๊ฐ ์ด๋ฅํ๊ฑฐ๋ ์ฐฉ๋ฅํ ์ ์๋์ง์ ๋ํ ๊ฒฐ์ ์ ๋ด๋ฆฌ๊ณ ๋นํ๊ธฐ์ ๋ฉ์์ง๋ฅผ ๋ณด๋ ๋๋ค.
์ค์ํ! ๋ชจ๋์ ๋จ์ํ ๋ฉ์์ง๋ฟ๋ง ์๋๋ผ ๋ช ๋ น ๊ฐ์ฒด๋ ์๋ก ๋ณด๋ผ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ํธ ์์ฉ์ ๋ช ๋ น ํ ํ๋ฆฟ ์ผ๋ก ์ค๋ช ๋ฉ๋๋ค . ๊ฒฐ๋ก ์ ํน์ ์์ ์ ๋ณ๋์ ๊ฐ์ฒด๋ก ์ํํ๋ผ๋ ์์ฒญ์ ์บก์ํํ๋ ๊ฒ์ ๋๋ค.
์ค์ ๋ก ์ด ๊ฐ์ฒด์๋ ๋จ์ผ execute() ๋ฉ์๋ ๊ฐ ํฌํจ๋์ด ์์ด ์ด ์์ ์ ๋ค๋ฅธ ๋ชจ๋์ ์ ๋ฌํ์ฌ ๋งค๊ฐ ๋ณ์๋ก ์คํํ๊ณ ์ผ๋ฐ์ ์ผ๋ก ์ผ๋ฐ ๊ฐ์ฒด์์ ์ํํ ์ ์๋ ๋ช ๋ น ๊ฐ์ฒด๋ก ๋ชจ๋ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
๋ฐ๋ฉํ ๋ฅด์ ๋ฒ์น
Demeter์ ๋ฒ์น์ ์์์ ์ข ์์ฑ์ ์ฌ์ฉ์ ๊ธ์งํฉ๋๋ค. "๊ฐ์ฒด A๊ฐ ๊ฐ์ฒด B์ ์ก์ธ์คํ ์ ์๊ณ ๊ฐ์ฒด B๊ฐ ๊ฐ์ฒด C์ ์ก์ธ์คํ ์ ์๋ ๊ฒฝ์ฐ ๊ฐ์ฒด A๋ ๊ฐ์ฒด C์ ์ง์ ์ก์ธ์คํ ์ ์์ด์ผ ํฉ๋๋ค."
์ด๋ ์ฝ๋์ ๋ชจ๋ ์ข ์์ฑ์ด "๋ช ์์ "์ด์ด์ผ ํจ์ ์๋ฏธํฉ๋๋ค. ํด๋์ค/๋ชจ๋์ ์์ ์์ "์์ ์ ์ข ์์ฑ"๋ง ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ์ด๋ฅผ ํตํด ๋ค๋ฅธ ๊ฒ์ผ๋ก ์ฌ๋ผ๊ฐ์๋ ์ ๋ฉ๋๋ค. ์ข์ ์๋ 3๊ณ์ธต ์ํคํ ์ฒ์ ๋๋ค. ์ธํฐํ์ด์ค ๊ณ์ธต์ ๋ ผ๋ฆฌ ๊ณ์ธต๊ณผ ํจ๊ป ์๋ํด์ผ ํ์ง๋ง ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ณ์ธต๊ณผ ์ง์ ์ํธ ์์ฉํด์๋ ์ ๋ฉ๋๋ค.
๊ฐ๋จํ ๋งํด์, ์ด ์์น์ ๋ค์๊ณผ ๊ฐ์ด ๊ณต์ํ๋ฉ๋๋ค. "์น๊ตฌ์ ์น๊ตฌ๊ฐ ์๋ ์ง๊ณ ์น๊ตฌ์๋ง ์ํธ ์์ฉํ์ญ์์ค." ์ด๋ ๊ฒ ํ๋ฉด ์ฝ๋์ ์ผ๊ด์ฑ์ด ์ค์ด๋ค๊ณ ๋์์ธ์ ๊ฐ์์ฑ๊ณผ ํฌ๋ช ์ฑ์ด ๋์์ง๋๋ค.
Demeter์ ๋ฒ์น์ ์ด๋ฏธ ์ธ๊ธํ "์ต์ ์ง์์ ์์น"์ ๊ตฌํํฉ๋๋ค. ์ด๋ ๋์จํ ๊ฒฐํฉ์ ๊ธฐ์ด์ด๋ฉฐ ๊ฐ์ฒด/๋ชจ๋์ด ๋ค๋ฅธ ๊ฐ์ฒด/๋ชจ๋์ ๊ตฌ์กฐ ๋ฐ ์์ฑ์ ๋ํด ๊ฐ๋ฅํ ํ ์ ์ ์ธ๋ถ ์ฌํญ์ ์์์ผ ํ๋ค๋ ์ฌ์ค๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์์ฒด ๊ตฌ์ฑ ์์๋ฅผ ํฌํจํ์ฌ ์ผ๋ฐ์ ์ผ๋ก ๋ชจ๋ ๊ฒ .
์ถ์ ๋น์ : ๊ฐ๊ฐ ๋ฐ๊ธฐ๋ฅผ ์ํ๋ค๋ฉด ๋ฐ์ ๋ช ๋ นํ๋ ๊ฒ์ ์ด๋ฆฌ์์ ์ผ์ด๋ฉฐ ๊ฐ์๊ฒ ๋ช ๋ น์ ๋ด๋ฆฌ๋ ๊ฒ์ด ๋ ๋ซ์ต๋๋ค.
์์ ๋์ ๊ตฌ์ฑ
์ด๊ฒ์ ๋งค์ฐ ํฌ๊ณ ํฅ๋ฏธ๋ก์ด ์ฃผ์ ์ด๋ฉฐ ์ต์ํ ๋ณ๋์ ๊ฐ์๊ฐ ํ์ํฉ๋๋ค. ํฉ์์ ๋๋ฌ ํ ๋๊น์ง ์ธํฐ๋ท์์์ด ์ฃผ์ ์ ๋ํด ๋ง์ ์ฌ๋ณธ์ด ์์๋์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์์์ ์ต์๋ก, ๊ตฌ์ฑ์ ์ต๋๋ก ์ฌ์ฉํฉ๋๋ค.
์์ ์ ์์์ด ์ค์ ๋ก ํด๋์ค ๊ฐ์ ๊ฐ์ฅ ๊ฐ๋ ฅํ ์ฐ๊ฒฐ์ ์ ๊ณตํ๋ฏ๋ก ํผํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค. ์ด ์ฃผ์ ๋ Herb Sutter์ ๊ธฐ์ฌ " Prefer Composition Over Inheritance "์์ ์ ๋ค๋ฃน๋๋ค.
๋์์ธ ํจํด์ ๋ฐฐ์ฐ๊ธฐ ์์ํ๋ฉด ๊ฐ์ฒด ๋๋ ๊ฐ์ฒด์ ๋ด๋ถ ๊ตฌ์กฐ ์์ฑ์ ์ ์ดํ๋ โโ์ ์ฒด ํจํด์ ๋ณด๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ด ๋งฅ๋ฝ์์ ์ ๋ ๊ฒ์์์ ๋์จ Delegate/Delegate ํจํด ๊ณผ Component ํจํด์ ์ฃผ๋ชฉํ๋ผ๊ณ ์กฐ์ธํ ์ ์์ต๋๋ค .
ํจํด์ ๋ํด์๋ ์ ์ ํ์ ๋ ์์ธํ ์ด์ผ๊ธฐํ๊ฒ ์ต๋๋ค.