์์กด์ฑ๊ณผ ๊ฒฐํฉ๋์ ๋ํ ์ ํํ ์๋ฏธ๋ฅผ ์ดํดํด๋ณธ๋ค.
์์กด์ฑ(Dependency)
- A ๋ชจ๋์ด ๋์ํ๋ ค๋ฉด B ๋ชจ๋์ด ํ์ํ ๊ฒฝ์ฐ
- OO์์ ๋ชจ๋ == ํด๋์ค
- ํด๋์ค A๊ฐ ํด๋์ค B์ ์์กด
์์กด์ฑ์ด ์์ผ๋ฉด ์๋ชป๋ OO ์ค๊ณ๋ค? (code smell)
- ์๋ชป๋ ๋ง์ด๋ค.
- ์์กด์ฑ์ด ์์ด์ผ ์ข์ ์ค๊ณ
- ๊ฐ ํด๋์ค์ ๋ชฉ์ ์ด ๋๋ ทํ๋ค๋ ๋ง
- ์บก์ํ๊ฐ ์ ๋์ด ์๋ค๋ ๋ง
- ํด๋์ค ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค๋ ๋ง
- ์์กด์ฑ์ ์์ ํ ์์ ๋ ค๋ฉด ํ๋ก๊ทธ๋จ ์ ์ฒด๋ฅผ ํจ์ํ๋์ ์์ฑํ๋ฉด ๋จ
์ ์์กด์ฑ์ด ๋์๋ค๊ณ ์๊ฐํ ๊น?
- ๊ฒฐํฉ๋๋ผ๋ ์ฉ์ด์ ํผ์ฉํด์ ์ฌ์ฉ
- ์ฉ์ด ์์ฒด์ ์๋ฏธ๋ฅผ ์๋ตํด์ ์๋ชป ์ฌ์ฉ
์ฆ, ํน์ ์ํฉ์ ์ค๋ช ํ๋ ๋ค๋ฅธ ๋จ์ด๊ฐ ์์์๋ ๋ถ๊ตฌํ๊ณ ํ์น๊ณ ๋์ด๊ฐ๋ ๊ฒฝํฅ์ด ์๋ค. ์ ๋๋ก๋ ์ฉ์ด์ ๋ํ ์ ์๋ฅผ ์์๋ณด๊ณ ์ ๋๋ก ์ฌ์ฉํด๋ณด์.
๊ฒฐํฉ๋(Coupling)
- ๋ ์ํํธ์จ์ด ๋ชจ๋ ๊ฐ์ ์ํธ ์์กด์ฑ ์ ๋
- ์ํธ ์ฐธ์กฐ
- ๊ฐ๊ฐ์ด ๋ ์ ์์กด์ด ๋ถ๊ฐ
OO์์ ๋ ผํ๋ ๊ฒฐํฉ๋
A๊ฐ B๋ฅผ ์์กดํ๋ ์ํฉ์์ B๋ณ๊ฒฝ์ ๋์ํ๋๊ฐ?
- A์ ๋ด๋ถ๋ฅผ ๋ณ๊ฒฝ์ํด๋ ๋จ
- A๊ฐ B์ ์์กดํ๋ ์ ๋๊ฐ ๋์ง ์์ (A depends lightly on B)
- ๊ฒฐํฉ๋๊ฐ ๋ฎ์ (loose coupling)
- A์ ๋ด๋ถ๋ฅผ ๋ณ๊ฒฝํด์ผ ํจ
- ์์กด๋๊ฐ ๋์ (A depends heavily on B)
- ๊ฒฐํฉ๋๊ฐ ๋์ (tight coupling)
์ ๋ฆฌ: B ์ฝ๋ ๋ณ๊ฒฝ์, A ์ฝ๋๋ ๋ณ๊ฒฝํด์ผ ํ๋ฉด ๊ฒฐํฉ๋๊ฐ ๋๋ค.
๋์ ๊ฒฐํฉ๋๋ฅผ ์๋ฏธํ๋ ํํ๋ค
- A์ B๊ฐ ๊ฒฐํฉ๋์ด ์๋ค. (A and B are coupled.)
- โ๊ฒฐํฉโ ์์ฒด๋ ๋์์๋ฏธ๋ฅผ ์ง๋๊ณ ์์ง ์์
- โ๊ฒฐํฉ == ์์กดโ์ ์๋ฏธ๋ฅผ ํ์ฐ์ ์ผ๋ก ๋ดํฌํ๊ธฐ ์๊ธฐ ๋๋ฌธ
- ์์กด ์์ฒด๋ ๋์ ๊ฒ์ด ์๋
- ๋์ ๊ฒฐํฉ๋๋ ๋์ ๊ฒ.
- ํ์ง๋ง, ๊ฒฐํฉ๋์ด ์๋ค๋ ๋ง๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ๋ณดํต ๋์ ๊ฒฐํฉ๋๋ฅผ ์๊ฐํ๊ณ ๋งํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์
- A๊ฐ B์ ์์กดํ๋ค. (A depends on B.)
- A์ B์ฌ์ด์ ์์กด์ฑ์ด ์๋ค. (There is a dependency between A and B.)
์ด๋ ๊ฒ ๋ณ๊ฒฝ๋์ด์ผ ํ๋ค.
- A๊ฐ B์ ์ฌํ๊ฒ ์์กดํ๋ค. (A depends heavily on B.)
- A์ B์ ๊ฒฐํฉ๋๊ฐ ๋๋ค. (A and B are tightly coupled.)
๋ฎ์ ๊ฒฐํฉ๋๋ฅผ ์๋ฏธํ๋ ํํ๋ค
- A์ B๊ฐ ๊ฒฐํฉ๋์ด ์์ง ์๋ค. (A and B are decoupled.)
์ด๋ ๊ฒ ๋ฐ๊ฟ์ผ ํ๋ค.
- A์ B์ ๊ฒฐํฉ๋๊ฐ ๋ฎ๋ค. (A and B are loosely coupled.)
- A๊ฐ B์ ๋ฏธ๋ฏธํ๊ฒ ์์กดํ๋ค. (A depends lightly on B.)
๊ฒฐํฉ๋๋ฅผ ์ค์ด๋ ๊ฒ์ ์๋ฏธํ๋ ํํ๋ค
- A์ B์ ๊ฒฐํฉ๊ด๊ณ๋ฅผ ์ ๊ฑฐํ๋ค. (Decouple A and B.)
- A์ B์ ์์กด์ฑ์ ์ ๊ฑฐํ๋ค. (Break dependencies between A and B.)
์ด๋ ๊ฒ ๋ฐ๊ฟ์ผ ํ๋ค.
- A์ B์ ๊ฒฐํฉ๋๋ฅผ ์ค์ธ๋ค. (Reduce coupling between A and B.)
์์กด์ฑ ์ฃผ์ (Dependency Injection)
- ํด๋์ค ๊ฐ์ ์์กด์ฑ์ ์๋ ๊ฒ์ด ์ข๋ค.
- ๊ทธ๋ฐ๋ฐ, ์ด ์์กด์ฑ์ด ๊ฐํ๊ฒ ์ฎ์ฌ ์๋ ๊ฒฝ์ฐ ์ข์ง ์๋ค.
- A๊ฐ B์ ์์กดํ ๋, B์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ๊ฒฝ์ฐ A๋ ๋ณ๊ฒฝํด์ผ ํ๋ค๋ฉด ์ข์ง ์๋ค.
- ๋ณดํต ์ด๋ฐ ๊ฒฝ์ฐ A๊ฐ B์ ์์กดํ ๋, B์์ฒด๋ฅผ ์์ฑํด์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ฐ์ํ๋ค.
- ์ฆ, ์์กด์ฑ์ ์์ฒด์ ์ผ๋ก ํด๊ฒฐํ๊ณ ์๋ ๊ฒ.
- ์ด๋ฐ ๊ฒฝ์ฐ ์ด ์์กด์ฑ ์์ฒด๋ฅผ ๋ฐ๊นฅ์์ ๋ฐ์์ฌ ์๋ ์์๊น?
- ๊ทธ๊ฒ์ด ์์กด์ฑ ์ฃผ์ ์ด๋ค.
DI ์ฉ์ด ์ฃผ์
๋ค์๊ณผ ๊ฐ์ ๊ฒ๋ค์ ์๋ฏธํ๊ธฐ ์ํด ์ฌ์ฉํ ์๋ ์๋ค.
- ์์กด์ฑ ์ฃผ์ (Dependency Injection)
- ์์กด์ฑ ์ฃผ์ ์ปจํ ์ด๋ (DI Container)
- ์์กด์ฑ ์ญ์ (Dependency Inversion)
์์กด์ฑ ์ฃผ์ ์ข ๋ฅ
- ์์ฑ์ ์ฃผ์
- setter ์ฃผ์
- setter ํจ์ํ๋ ๋ง๋ค๊ณ ๊ทธ ํจ์๋ฅผ ํตํด ๋ฃ์ด์ฃผ๋ ๋ฐฉ์
setter ์ฃผ์ ์ ๋ฌธ์
- ์์ฑ์ ์ฃผ์ ์ ์์จ ์๋ ์์ผ๋..
- ๊ฐ์ฒด์ ์ ํจํ ์ํ์ ํด๊ฐ ๋ ์ ์๋ค.
- ๊ฐ์ฒด๋ ์์ฑ์ ๋ถํฐ ์ ํจํ ์ํ๋ฅผ ๊ฐ์ ธ์ผ ํ๋ค.
- setter๊ฐ ๋ง๊ตฌ ์ถ๊ฐ๋๋ค๋ฉด? ์บก์ํ๊ฐ ๊นจ์ง ์๋..
์์กด์ฑ ์ฃผ์ ์ ๋ถํธํจ
- ๋ก๋ด์ ๋ง๋๋๋ฐ, ๋จธ๋ฆฌ๋ฅผ ์ ๋ฌํด์ค์ผ๋ง ๋ง๋ค์ด์ง๋ ๊ฒ์ด ์ด์ํ๋ค.
- ์ฆ, ํ๋์ ๊ฐ์ฒด๋ก ์๊ฐํ๊ณ ๋ก๋ด() ์ด๋ ๊ฒ ์ฐ๊ณ ์ถ์๋ฐ,
- ๋จธ๋ฆฌ๋ ๋ญ๊ณ , ๋ค๋ฆฌ๋ ๋ญ๊ณ ์ด๋ฐ์์ผ๋ก ์ ๋ฌํ๋ ๊ฒ์ด ๋ถํธํ๋ค.
- ํ๋์ ์์ ํ์ผ๋ก ์์ฑํด์ ์ฐ๊ณ ์ถ๋ค!
DI๋ฅผ ํตํด ์ป์ ๊ฒ๊ณผ ์์ ๊ฒ
- ์ป์ ๊ฒ
- ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถค
- Head์ ์์ฑ์๊ฐ ๋ฐ๋์ด๋ Robot์ ๋ฐ๊ฟ ํ์๊ฐ ์์
- Head๊ฐ ๋ฐ๋๋ฉด, ์ด ํด๋์ค๋ง ๋ฐ๋ก ์ปดํ์ผํ์ฌ ๋ฐฐํฌ ๊ฐ๋ฅ
- ์์ ๊ฒ
- ํธ์์ฑ - ๋ก๋ด์ ์์ฑํ๋ ค๋ฉด ๋จธ๋ฆฌ๋ ์์์ผ ํจ
- ํ๋ก๊ทธ๋๋จธ์ ์๋ ์๋๋ฅผ ์ ๋ณด์ฌ์ฃผ๋ ํด๋์ค
- ๋จธ๋ฆฌ ๋ฃ์ ํ์์์ด ์์ ํ์ด์ผ~ ๋ผ๋ ์๋๋ฅผ ๋ณด์ฌ์ค ์ ์์
์ฅ๋จ์ ์ด ์กด์ฌํ๋ค. ๋ฌด์กฐ๊ฑด์ ์ผ๋ก ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถฐ์ผ ํ๋ค๋ ์ฃผ์ฅ์ ์์ ์ ์๋ค. ํ ๋ฐฉ์์ด ๋ฌด์กฐ๊ฑด ์ณ๋ค๊ณ ํ ์ ์๋ค.
๋ณต์กํ ์์คํ ์์ ๋ฌธ์ ์ธ ์ปคํ๋ง
- ๊ฐ๋จํ ๊ตฌ์กฐ์์๋ DI์ ์ค์ต์ด ํฌ์ง ์๋ค.
- ํ์ง๋ง ๋ณต์กํ ์์คํ ์์๋ ๋ค๋ฅด๋ค.
๋์ปคํ๋ง์ ์ ์ฐ์ฑ/์ฌ์ฌ์ฉ์ฑ์ ๋์
- ์ถ์ํ๋ ์ ์ฐ์ฑ/์ฌ์ฌ์ฉ์ฑ์ ๋์
- ๋์ปคํ๋ง๋ ๋ง์ฐฌ๊ฐ์ง
- ๋ฏธ๋์ ๋ณํ์ ๋๋น๋์ด ์๋ค๋ ์๋ฏธ
- ํ์ง๋ง ๊ทธ๋ก ์ธํ ๋จ์ ๋ ์๋ค.
๋จ์
- ์ง๊ด์ ์ด์ง ๋ชปํ๋ค.
- ๋ด๋ถ๋ฅผ ์์์ผ ์ข์ ๊ฒฝ์ฐ๋ ์๋ค.
- ์์ ๊ฐ์ ์ํฉ์ด๋ผ๋ฉด, ์ด
dataset
์ด ์ด๋ค ํด๋์ค๋์ ๋ฐ๋ผ ์ฐจ์ด๊ฐ ์๊ธด๋ค.- Set: ์ค๋ณต ์ฒดํฌ ํ์์์, add๋ง ํธ์ถ
- ArrayList: contains๋ก ์ค๋ณต๊ฒ์ฌ, ์๋ ๊ฒฝ์ฐ๋ง add
- ์ ๋ ฌ๋ ArrayList: ์ด์ง ํ์์ผ๋ก ์ค๋ณต ๊ฒ์ฌ, ์๋ ๊ฒฝ์ฐ๋ง add
- ์ด๋ฐ ๊ฒฝ์ฐ๋ค์ ๋ชจ๋ ์์ฐ๋ฅด๊ธฐ ์ํด์๋ ๊ฐ์ฅ ๋๋ฆฌ๊ณ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ์ฒ๋ฆฌํด์ผ ํ๋ค.
- contains๋ก ์ค๋ณต๊ฒ์ฌ, ์๋ ๊ฒฝ์ฐ๋ง add
- ์ฆ, ์ฑ๋ฅ์ด ์ค์ํ ๊ฒฝ์ฐ์๋ ์ผ๋ฐํ/์ถ์ํ๊ฐ ๋นํจ์จ์ ์ผ ์ ์๋ค.
- ๊ตฌ์ฒด ํ์ ์ด ๋ค์ด์ค๋ฉด ์ต์ ํ๊ฐ ๊ฐ๋ฅ
- ๊ตฌํ์ ์์์ผ ๋ฌธ์ ํด๊ฒฐ์ด ๊ฐ๋ฅ
- ๋ ๊ฒ์ด๋ผ ์๊ฐํ๊ณ ์์ฑํ๋๋ฐ, ์๊ณ ๋ณด๋ ๋ด๋ถ ๊ตฌํ์ฌํญ์ ๋ฌธ์ ๊ฐ ์๋ ๊ฒฝ์ฐ