DI
Last updated
Last updated
์ฐ์ ์๋๋ก์ด๋ DI ๋ฅผ ์ ์ฉํ๋ฉด ํ๋ฅญํ ์ฑ ์ํคํ ์ฒ๋ฅผ ์ํ ํ ๋๋ฅผ ๋ง๋ จํ ์ ์๋ค. ์๋๋ก์ด๋ ๊ณต์๋ฌธ์์ ๋ฐ๋ฅด๋ฉด DI ๋ฅผ ์ ์ฉํ๋ฉด ์๋์ ๊ฐ์ ์ด์ ์ด ๋๋ฆด ์ ์๋ค.
์ฝ๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅ
๋ฆฌํฉํ ๋ง ํธ์์ฑ
ํ ์คํธ ํธ์์ฑ
์ด ๊ธ์ ์์ฑํ๋ฉด์ ๋ ์ค์ค๋ก ์์ ์ด์ ๋ค์ ์ ๋๋ฆฌ๊ณ ์์๋์ง ๋๋์ ๋ณผ ๊ฒ์ด๋ค.
์ฐ์ ํด๋์ค์๋ ๋ค๋ฅธ ํด๋์ค ์ฐธ์กฐ๊ฐ ํ์ํ๋ค. ์๋ฅผ ๋ค์ด Car
ํด๋์ค๋ Engine
ํด๋์ค ์ฐธ์กฐ๊ฐ ํ์ํ ์ ์๋ค.
์ด์ฒ๋ผ ํ์ํ ํด๋์ค๋ฅผ ์ข
์ ํญ๋ชฉ(dependencies) ์ด๋ผ๊ณ ํ๋ฉฐ, Car
ํด๋์ค๊ฐ ์คํ๋๊ธฐ ์ํด์๋ Engine
ํด๋์ค์ ์ธ์คํด์ค๊ฐ ํ์ํ๋ค.
ํด๋์ค๊ฐ ํ์ํ ๊ฐ์ฒด๋ฅผ ์ป๋ ๋ฐฉ๋ฒ์ 3๊ฐ์ง๊ฐ ์๋ค.
ํด๋์ค๊ฐ ํ์ํ ์ข ์ ํญ๋ชฉ (Engine Class) ์ ๊ตฌ์ฑํ๋ค. ์ ์์์๋ Car ํด๋์ค๋ ์์ฒด Engine ์ธ์คํด์ค๋ฅผ ์์ฑํ์ฌ ์ด๊ธฐํํ๋ค.
๋ค๋ฅธ ๊ณณ์์ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์จ๋ค. Context
getter & getSystemService
() ์ ๊ฐ์ ์ผ๋ถ Android API๋ ์ฌ๋ฌํ ๋ฐฉ์์ผ๋ก ์๋ํ๋ค.
๊ฐ์ฒด๋ฅผ ๋งค๊ฒ๋ณ์๋ก ์ ๊ณต๋ฐ๋๋ค. ์ฑ์ ํด๋์ค๊ฐ ๊ตฌ์ฑ๋ ๋ ์ด๋ฌํ ์ข ์ ํญ๋ชฉ์ ์ ๊ณตํ๊ฑฐ๋ ๊ฐ ์ข ์ ํญ๋ชฉ์ด ํ์ํ ํจ์์ ์ ๋ฌํ ์ ์๋ค. ์ ์์์๋ Car ์์ฑ์๋ Engine ์ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๋๋ค.
์ฌ๊ธฐ์ ๋งํ๋ 3๋ฒ์งธ ๋ฐฉ๋ฒ์ด ๋ฐ๋ก DI / ์์กด์ฑ์ฃผ์ ์ด๋ค ๐ฅ ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ํด๋์ค ์ธ์คํด์ค๊ฐ ์์ฒด์ ์ผ๋ก ์ข ์ ํญ๋ชฉ์ ์ป๋ ๋์ ํด๋์ค์ ์ข ์ ํญ๋ชฉ์ ๋ฐ์์ ์ ๊ณตํ๋ค.
์ฐ์ 1๋ฒ๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์ธ์คํด์คํ ํ๋๊ฑฐ๋ ์๋ ์ฝ๋์ ๊ฐ๋ค.
์ด ์๋ Car ํด๋์ค๊ฐ ์์ฒด Engine ์ ๊ฐ์ฒด์์ฑ ํ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ DI ๊ฐ ์๋๋ค. ๋ํ ์๋์ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
Car ์ Engine ์ ๋ฐ์ ํ๊ฒ ์ฐ๊ฒฐ๋์ด์๋ค. Car ์ธ์คํด์ค๋ ํ ๊ฐ์ง ์ ํ์ Engine ์ ์ฌ์ฉํ๋ฏ๋ก ์๋ธํด๋์ค ๋๋ ๋์ฒด ๊ตฌํ์ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ค. Car ๊ฐ ์์ฒด Engine ์ ๊ตฌ์ฑํ๋ค๋ฉด Gas
/ Electric
์ ํ์ ์์ง์ ๋์ผํ Car ๋ฅผ ์ฌ์ฌ์ฉํ๋ ๋์ ๋ ๊ฐ์ง ์ ํ์ Car์ ์์ฑํด์ผ ํ๋ค.
์ ์์ ์ ๊ฐ์ด ์์กด์ฑ์ด ๋์ ๊ฒฝ์ฐ ๋ค์ํ ํ ์คํธ ์ผ์ด์ค์์ ํ ์คํธ๋ฅผ ๋์ฑ ์ด๋ ต๊ฒ ๋ง๋ ๋ค.
์์กด์ฑ ์ฃผ์ ์ ํ๋์ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด์ ์์กด์ฑ์ ์ ๊ณตํ๋ ๊ธฐ์ ์ด๋ค.
์์กด์ฑ ์ฃผ์ ์ ๊ด๋ฒ์ํ ์ญ์ ์ด ํ ํฌ๋์ ํ ํํ์ด๋ค. ์ด๋ค ์๋น์ค๋ฅผ ํธ์ถํ ๋ ค๋ ํด๋ผ์ด์ธํธ๋ ๊ทธ ์๋น์ค๊ฐ ์ด๋ป๊ฒ ๊ตฌ์ฑ๋์๋์ง ์์ง ๋ชปํด์ผ ํ๋ค. ํด๋ผ์ด์ธํธ๋ ๋์ ์๋น์ค ์ ๊ณต์ ๋ํ ์ฑ ์์ ์ธ๋ถ ์ฝ๋(์ฃผ์ ์)๋ก ์์ํ๋ค. ํด๋ผ์ด์ธํธ๋ ์ฃผ์ ์ ์ฝ๋๋ฅผ ํธ์ถํ ์ ์๋ค. ๊ทธ ๋ค์ ์ฃผ์ ์๋ ์ด๋ฏธ ์กด์ฌํ๊ฑฐ๋ ์ฃผ์ ์์ ์ํด ๊ตฌ์ฑ๋์์ ์๋น์ค๋ฅผ ํด๋ผ์ธํธ๋ก ์ฃผ์ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ ํด๋ผ์ด์ธํธ๋ ์๋น์ค๋ฅผ ์ฌ์ฉํ๋ค. ์์กด์ฑ ์ฃผ์ ์ ๋ค ๊ฐ์ง ์ญํ ์ ๋ด๋นํ๋ ๊ฐ์ฒด ๋ฐ ์ธํฐํ์ด์ค๋ฅผ ์ ์ ๋ก ํ๋ค.
์ฌ์ฉ๋ ์๋น์ค ๊ฐ์ฒด - ์ ๊ธฐ, ๊ฐ์ค, ํ์ด๋ธ๋ฆฌ๋ ๋๋ ๋์ ค ์๋์ฐจ
์ฌ์ฉํ๋ ์๋น์ค์ ์์กดํ๋ ํด๋ผ์ด์ธํธ ๊ฐ์ฒด - ์์ง์ ์๊ด ์์ด ๋์ผํ๊ฒ ์ฐจ๋ฅผ ์ฌ์ฉํ๋ ์ด์ ์
ํด๋ผ์ด์ธํธ์ ์๋น์ค ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์ ์ํ๋ ์ธํฐํ์ด์ค - ์ด์ ์๊ฐ ๊ธฐ์ด์ ๊ฐ์ ์์ง์ ์ธ๋ถ ์ฌํญ์ ์ดํดํ ํ์๊ฐ ์๋๋ก ๋ณด์ฅํด์ฃผ๋ ์๋๋ณ์๊ธฐ
์๋น์ค๋ฅผ ์์ฑํ๊ณ ํด๋ผ์ด์ธํธ๋ก ์ฃผ์ ํ๋ ์ฑ ์์ ๊ฐ๋ ์ฃผ์ ์ - ์์ด์๊ฒ ์ด๋ค ์ฐจ๋ฅผ ์ฌ์ค์ง ๊ฒฐ์ ํ๊ณ ๊ตฌ๋งคํด์ค ๋ถ
1. ์์ฑ์ ์ฝ์
2. ํ๋ ์ฝ์
์ ์์ ์ ๊ฐ์ DI ๊ธฐ๋ฐ ์ ๊ทผ๋ฐฉ๋ฒ์ ์ด์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
Car ์ ์ฌ์ฌ์ฉ๊ฐ๋ฅ. Engine ์ ๋ค์ํ ๊ตฌํ์ Car ์ ์ ๋ฌํ ์ ์๋ค. ์๋ฅผ ๋ค์ด GasEngine ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, Engine ํด๋์ค๋ฅผ ์์๋ฐ์ ์๋ธํด๋์ค๋ฅผ ์ ์ํ ์ ์๋ค. GasEngine ์ ์ธ์คํด์ค๋ก ์ ๋ฌํ๋ฉด Car ํด๋์ค๋ ์๋ฌด๋ฐ ๋ณ๊ฒฝ์์ด ์ฌ์ฉํ ์ ์๋ค.
ํ ์คํธ ๋๋ธ์ ์ ๋ฌํ์ฌ ๋ค์ํ ์๋๋ฆฌ์ค ํ ์คํธ๋ฅผ ํ ์ ์๋ค.
์ด์ ์์์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ง์ ์์ฑ ๋ฐ ๊ด๋ฆฌ๋ฅผ ํ์๋ค. ์ด๋ฅผ ์ง์ ์ข ์ | ์๋ ํญ๋ชฉ ์ฝ์ ์ด๋ผ๊ณ ํ๋ค. ์ข ์ ํญ๋ชฉ์ด ๋ง์ ์ง ์๋ก ์ข ์ ํญ๋ชฉ์ ์ฝ์ ํ๋ ์์ ์ด ์ง๋ฃจํด ์ง ์ ์๋ค. ๋ฟ๋ง ์๋๋ผ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ์ ๋ค์ด ์๋ค.
๋๊ท๋ชจ ์ฑ์ ๊ฒฝ์ฐ ๋ชจ๋ ์ข ์ ํญ๋ชฉ์ ๊ฐ์ ธ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฐ๊ฒฐํ๋ ค๋ฉด ๋๋์ ์์ฉ๊ตฌ ์ฝ๋๊ฐ ํ์ํ๋ค. ์๋ก, ์๋์ฐจ๋ฅผ ๋ง๋ค๋ ค๋ฉด ์์ง,๋ณ์๊ธฐ ๊ธฐํ ๋ถํ ์์ง์๋ ์ค๋ฆฐ๋, ์ ํ ํ๋ก๊ทธ ๋ฑ์ด ํ์๋ก ํ๋ค.
์ข ์ ํญ๋ชฉ์ ์ ๋ฌํ๊ธฐ ์ ์ ๊ตฌ์ฑํ ์ ์์ ๋๋ ๋ฉ๋ชจ๋ฆฌ์์ ์ข ์ ํญ๋ชฉ์ ์ ์ฒด ๊ธฐ๊ฐ์ ๊ด๋ฆฌํ๋ ๋ง์ถค ์ปจํ ์ด๋๋ฅผ ์์ฑํ๊ณ ์ ์งํด์ผ ํ๋ค.
์ด๋ฌํ ๋ฌธ์ ์ ๋ค์ ํด๊ฒฐํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ์กด์ฌํ๋ฉฐ, ์ด๋ ๋ ๊ฐ์ง ์นดํ ๊ณ ๋ฆฌ๋ก ๋ถ๋ฅ๋๋ค.
๋ฐํ์ ์ ์ข ์ ํญ๋ชฉ์ ์ฐ๊ฒฐํ๋ ๋ฆฌํ๋ ์ ๊ธฐ๋ฐ ์๋ฃจ์ - Koin...
์ปดํ์ผ ํ์์ ์ข ์ ํญ๋ชฉ์ ์ฐ๊ฒฐํ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ์ ์ ์๋ฃจ์ - Dagger / Hilt...