DI๋ ์ํํธ์จ์ด๊ณตํ์ ๋์์ธ ํจํด ์ค ํ๋๋ค. ์ฉ์ด ๊ทธ ์์ฒด๋ก '์์กด์ฑ์ ์ฃผ์ 'ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
public class User{
val Database mDatabase;
init {
this.mDataBase = Database()
}
}
์ ์ฝ๋๋ฅผ ๋ณด์. User ํด๋์ค์ ์์ฑ์ ๋ด๋ถ์์ Database ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์๋ค. ๊ทธ๋ ๋ค๋๊ฑด User ํด๋์ค๋ Database ํด๋์ค๊ฐ ์๊ฑฐ๋ ํด๋์ค ๋ด๋ถ์ ์ค๋ฅ๊ฐ ์๋ค๋ฉด ์์ฑ๋ ์ ์๋ ๊ฒ์ธ๋ฐ, ์ด๋ ๊ฒ ๋๋ฉด User ํด๋์ค๊ฐ Database ํด๋์ค์ ์์กด์ ์ด๋ผ๊ณ ํ ์ ์๊ณ , Database ํด๋์ค๋ User ํด๋์ค์ ์ข ์์ฑ์ ์ ๊ณตํ๋ค๋ผ๊ณ ํ ์ ์๋ค.
์ ์ฝ๋์์ User ํด๋์ค๋ Database ํด๋์ค์ ์์กดํ๊ณ ์๋ค๊ณ ํ๊ณ , User ํด๋์ค๋ ์์ฑ์ ๋ด๋ถ์์ Database ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํจ์ผ๋ก์ Database ํด๋์ค์ ๋ํ ์ข ์์ฑ์ ์ป๋๋ค.
์ฌ์ค ์์ ์์์ฒ๋ผ ์์ฑ์๋ฅผ ์ ์ธํ๋ ๊ฒ์ ์๋ก ์์กด๋๊ฐ ๋์ ์ข์ง ์๊ธฐ ๋๋ฌธ์, ์ฐ๋ฆฌ๋ ํด๋์ค๋ฅผ ์๋ก ๋ ๋ฆฝ์ ์ผ๋ก ๋ง๋ค์ด์ค์ผํ๋ค. ๋ ๋ฆฝ์ ์ผ๋ก ๋ง๋ค์ด์ฃผ๋ฉด ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๊ณ , ๋จ์ ํ ์คํธ๋ฅผ ์ํด์๋ ํ์์ ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด๋ฐ ๋ฐฉ๋ฒ์ผ๋ก ์์ฑ์๋ฅผ ์ ์ธํ๋ ๊ฒ์ ์ด๋จ๊น? User ํด๋์ค์ ์์ฑ์ ๋ด๋ถ์์ ์ง์ Database๋ฅผ ๊ฐ์ฒดํํ๋ ๊ฒ ๋์ ์, User ์์ฑ์์ argument๋ก ๋ฏธ๋ฆฌ ์์ฑ๋์ด ์๋ Database ์ธ์คํด์ค๋ฅผ ๋๊ธฐ๋ ๊ฒ์ด๋ค.
public class User(val database : Database){
val Database mDatabase;
init {
this.mDataBase = database
}
}
์ด๋ ๊ฒ ํด๋์ค ์ธ๋ถ์์ ์์กด์ฑ(์ ๊ฐ์ง ๊ฐ์ฒด)์ ์ฃผ์
ํ๋ ๊ฒ์ ์์กด์ฑ ์ฃผ์
, ์ฆ Dependency Injection ์ด๋ผ๊ณ ๋ถ๋ฅผ ์ ์๋ค.
DI ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํด ๊ฐ๋ฐ์ ํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ฅ์ ๊ณผ ๋จ์ ์ ์ป์ ์ ์๋ค.
์ฅ์
1. ์ ๋ ํ
์คํธ๊ฐ ๊ฐ๋ฅํ๋ค.
2. ์์กด์ฑ ์ด๊ธฐํ๊ฐ ๋ฏธ๋ฆฌ ์ํ๋๋ฏ๋ก ๋ณด์ผ๋ฌ ํ๋ ์ดํธ ์ฝ๋๋ฅผ ์ค์ผ ์ ์๋ค.
3. ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถฐ ์ข ๋ ๋
๋ฆฝ์ ์ธ ํ๋ก๊ทธ๋๋ฐ์ด ๊ฐ๋ฅํ๋ค.
๋จ์
1. ๋ฌ๋์ปค๋ธ๊ฐ ๋๊ณ , ๊ณผ๋ํ๊ฒ ์ฌ์ฉ๋๋ฉด ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
2. ์ปดํ์ผ ์๊ฐ ์๋ฌ๋ก ์ธํด ๋ฐํ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
3. reflection ๋๋ ๋์ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ๊ตฌํ๋๊ธฐ ๋๋ฌธ์ ์์ ํ ๋ฆฌํฉํ ๋ง๊ณผ ๊ฐ์ IDE ์๋ํ ์ฌ์ฉ์ ๋ฐฉํดํ ์ ์๋ค.
์ฌํผ ์ฅ์ ๋ ์๊ณ , ๋จ์ ๋ ์๋ DI์ง๋ง, ๊ฒฐ๋ก ์ ์ผ๋ก ๋งํ์๋ฉด ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ ์ ์๊ณ , ๊ทธ์ ๋ฐ๋ผ ์ ์ง๋ณด์๊ฐ ์ฌ์์ง๋ฉฐ, ๋ชจ๋ ์ฌ์ฌ์ฉ ๋ฐ ์ ๋ ํ ์คํธ๊ฐ ๊ฐ๋ฅํ๋ค๋ ๊ฒ ์ฐ๋ฆฌ๊ฐ DI๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ์ด์ ๋ค.
์๋๋ก์ด๋์์ ์ฌ์ฉํ๋ ๋ํ์ ์ธ DI ํ๋ ์์ํฌ๋ก Dagger, Hilt, Koin์ด ์๋ค. Hilt์ Koin์ ๋ํ ํฌ์คํ ์ ๋จ๊ฒจ๋์์ผ๋, ๊ถ๊ธํ๋ฉด ์๋์ ๋งํฌ๋ฅผ ํด๋ฆญํด์ ํ์ธํด๋ณด์.
https://www.simplifiedcoding.net/android-dependency-injection/#What-is-Dependency
https://www.freecodecamp.org/news/a-quick-intro-to-dependency-injection-what-it-is-and-when-to-use-it-7578c84fa88f
https://stackoverflow.com/questions/14301389/why-does-one-use-dependency-injection