๐Ÿ™‚2.Dagger๋ฅผ ์ด์šฉํ•œ ์ฃผ์ž… ๊ธฐ๋ฒ• -1

Jamezz Devยท2020๋…„ 7์›” 11์ผ
0

android-Architecture

๋ชฉ๋ก ๋ณด๊ธฐ
2/8
post-thumbnail

๐Ÿ˜Œ1. ์˜์กด์„ฑ ์ฃผ์ž…์ด๋ž€?

-์˜์กด์„ฑ : ๊ฐ์ฒด์ง€ํ–ฅ์—์„œ ๋‘ ํด๋ž˜์Šค ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋งํ•˜๋Š”๊ฒƒ์œผ๋กœ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‘˜ ์ค‘ ํ•˜๋‚˜๊ฐ€๋‹ค๋ฅธ ํ•˜๋‚˜๋ฅผ ํ•„์š”๋กœ ํ•œ๋‹ค.
-์ฃผ์ž… : ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌ๋ฐ›๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
-์˜์กด์„ฑ ์ฃผ์ž… : ์˜์กด ๊ด€๊ณ„์— ์žˆ๋Š” ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑํ•˜์—ฌ ์ฃผ์ž…๋ฐ›๋Š”๋‹ค.

public class Computer{

      private CPU cpu;

      public void setCPU(CPU cpu){
          this.cpu = cpu;
      }
}

๐Ÿคจ2.์˜์กด์„ฑ ์ฃผ์ž…์˜ ํ•„์š”์„ฑ?

๋ณ€๊ฒฝ์˜ ์ „์ด

๋‹ค์‹œํ•œ๋ฒˆ ์ปดํ“จํ„ฐ์™€ cpu์˜ ๊ด€๊ณ„๋ฅผ ํ™•์ธํ•ด ๋ณธ๋‹ค. Computer ๋Š” CPU๋ผ๋Š” ํ•œ๊ฐ€์ง€ ํƒ€์ž…์— ์˜์กดํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์‚ฌ์šฉ์ž๋Š” ๋‹ค์–‘ํ•œ CPU๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์„ ์›ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ CPU๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด Computer ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค.
-> CPU์˜ ๋ณ€๊ฒฝ์œผ๋กœ ๋‹ค๋ฅธ ์˜์กด ๊ด€๊ณ„๊นŒ์ง€ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์ „์ด๋œ๋‹ค.

public class Computer{
    private A_CPU cpu; //๋ณ€๊ฒฝ๋จ
    private Computer(){
        cpu = new A_CPU;//๋ณ€๊ฒฝ๋จ
    }
}

CPU์˜ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ๋‹ค๋ฅธ ์˜์กด๊ด€๊ณ„๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š”๊ฒƒ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ๊ฒƒ์€ CPU๋ฅผ ์ถ”์ƒํ™” ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค

public interface CPU{...}

public class A_CPU implements CPU{...}

public class Computer{
	private CPU cpu;
    
   	public Computer(){
       		cpu = new A_CPU();
        	//cpu = new I_CPU();
    }
}

๐Ÿคช์ œ์–ด์˜ ์—ญ์ „ (IOC Inversion Of Control)

์–ด๋– ํ•œ ์ผ์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ๋งŒ๋“ค์–ด์ง„ ํ”„๋ ˆ์ž„์›Œํฌ์— ์ œ์–ด๊ถŒ์„ ์œ„์ž„ํ•จ์œผ๋กœ์จ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

public class Computer{
   
    private CPU cpu;
    
    public Computer(){}
    
    public Computer(CPU cpu){
        this.cpu;
    }
    
    public void setCPU(CPU cpu){
        this.cpu = cpu;
    }
}

public static void main(){

    CPU cpu = new I_CPU;
    
    Computer computer1 = new Computer(cpu);
    //๋˜๋Š” 
    Computer computer2 = new Computer();
    computer2.setCPU(cpu);
    
}

๊ฐœ์„ ๋œ ์ฝ”๋“œ์—์„œ๋Š” CPU ๊ฐ์ฒด์˜ ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌ๋ฅผ ์™ธ๋ถ€์— ์œ„์ž„ํ–ˆ๋‹ค. ์ด๋ฅผ ์ œ์–ด์˜ ์—ญ์ „์ด๋ผ๊ณ  ํ•œ๋‹ค ์ด๋ฅผ ํ†ตํ•ด ๊ฒฐํ•ฉ๋„๋ฅผ ์•ฝํ•˜๊ฒŒ ๋งŒ๋“ค์—ˆ๊ณ  Computer๋Š” CPU์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์— ๋Œ€ํ•ด ๋‚ด๋ถ€ํ•„๋“œ๋‚˜ ๋งค์„œ๋“œ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์•„๋„ ๋˜์—ˆ๋‹ค.

๐Ÿคจ์˜์กด์„ฑ ์ฃผ์ž„์˜ ์žฅ๋‹จ์ 

์˜์กด์„ฑ ์ฃผ์ž…์˜ ์žฅ์ 

1) ์ฃผ์ž…ํ•˜๋Š” ์ฝ”๋“œ๋งŒ ๋”ฐ๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ ์‰ฌ์›Œ ๋ฆฌํŒฉํ† ๋ง์ด ์ˆ˜์›”ํ•˜๋‹ค
2) ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฐ๊ณผ๋กœ stub๋‚˜ mock๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๊ธฐ๊ฐ€ ๋”์šฑ ์‰ฌ์›Œ์ง„๋‹ค.
3) ํด๋ž˜์Šค๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋Š์Šจํ•˜๊ฒŒ ํ•œ๋‹ค.

์˜์กด์„ฑ ์ฃผ์ž…์˜ ๋‹จ์ 

1) ๊ฐ„๋‹จํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค๋•Œ๋Š” ๋ฒˆ๊ฑฐ๋กญ๋‹ค.
2) ์˜์กด์„ฑ ์ฃผ์ž…์€ ๋™์ž‘๊ณผ ๊ตฌ์„ฑ์„ ๋ถ„๋ฆฌํ•ด ์ฝ”๋“œ๋ฅผ ์ถ”์ ํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ํ•˜๊ณ  ๊ฐ€๋…์„ฑ์„ ๋–จ์–ดํŠธ๋ฆด์ˆ˜ ์žˆ๋‹ค. ์ฆ‰ ๊ฐœ๋ฐœ์ž๋Š” ๋” ๋งŽ์€ ํŒŒ์ผ์„ ์ฐธ์กฐํ•ด์•ผ ํ•œ๋‹ค
3) ์ปดํŒŒ์ผ ํƒ€์ž„์— ์• ๋…ธํ…Œ์ด์…˜ ํ”„๋กœ์„ธ์„œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ธฐ์— ๋นŒ๋“œ์— ์‹œ๊ฐ„์ด ์ข€ ๋” ์†Œ์š”๋œ๋‹ค.

๐Ÿ˜’3. Dagger2 ๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

Dagger 2๋Š” ์ž๋ฐ”์™€ ์•ˆ๋“œ๋กœ์ด๋“œ๋ฅผ ์œ„ํ•œ ๊ฐ•๋ ฅํ•˜๊ณ  ๋น ๋ฅธ ์˜์กด์„ฑ ์ฃผ์ž… ํ”„๋ ˆ์ž„์›Œํฌ๋‹ค. ๋ฆฌํ”Œ๋ ‰์…˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ๋Ÿฐํƒ€์ž„์— ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋„ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ํŠน์ง•์ด๋‹ค. ์ปดํŒŒ์ผ ํƒ€์ž„์— ์• ๋…ธํ…Œ์ด์…˜ ํ”„๋กœ์„ธ์„œ์— ์˜ํ•ด ์˜์กด์„ฑ ์ฃผ์ž…๊ณผ ๊ด€๋ จ๋œ ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ์ž๋ฐ” ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค .

Dagger์˜ ์žฅ์ 

1) ์ž์› ๊ณต์œ ์˜ ๋‹จ์ˆœํ™” : ์ง€์ •๋œ ๋ฒ”์œ„์˜ ์ƒ๋ช… ์ฃผ๊ธฐ ๋‚ด์—์„œ ๋™์ผ ์ธ์Šคํ„ด์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
2) ๋ณต์žกํ•œ ์˜์กด์„ฑ์„ ๋‹จ์ˆœํ•˜๊ฒŒ ์„ค์ •: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ปค์งˆ์ˆ˜๋ก ๋งŽ์€ ์˜์กด์„ฑ์„ ๊ฐ–๋Š”๋ฐ ์ด๋ฅผ ์‰ฝ๊ฒŒ ์ œ์–ดํ•ด ์ค€๋‹ค.
3) ์œ ๋‹›ํ…Œ์ŠคํŠธ๋ฅผ ์‰ฝ๊ฒŒ ๋„์™€์ค€๋‹ค.
4) ์ž๋™ ์ฝ”๋“œ ์ƒ์„ฑ, ์ƒ์„ฑ๋œ ์ฝ”๋“œ๋Š” ๋ช…ํ™•ํ•˜๊ณ  ๋””๋ฒ„๊น…์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
5) Dagger2๋Š” ๋‚œ๋…ํ™” ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค. : ๊ธฐ์กด์˜ dagger1 ์€ ๋ฆฌํ”Œ๋ ‰์…˜ ์‚ฌ์šฉ์œผ๋กœ ๋Ÿฐํƒ€์ž„์— ์„ฑ๋Šฅ ๋ฐ ๋‚œ๋…ํ™”์™€ ๊ด€๋ จ๋œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.
6) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํฌ๊ธฐ๊ฐ€ ์ž‘๋‹ค.

๐Ÿ˜”4. ํ”„๋กœ์ ํŠธ์— Dagger ์„ค์ •ํ•˜๊ธฐ

์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค ํ”„๋กœ์ ํŠธ์—์„œ Dagger ๋ฅผ ์ ์šฉํ•˜๋ ค๋Š” ๋ชจ๋“ˆ์˜ build.gradle์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

app/build.gradle

dependencies{
    implementation 'com.google.dagger:dagger-android:2.27'
    implementation 'com.google.dagger:dagger-android-support:2.27'
    annotationProcessor 'com.google.dagger:dagger-android-processor:2.27'
    annotationProcessor 'com.google.dagger:dagger-compiler:2.27'
}

์ฝ”ํ‹€๋ฆฐ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ์—์„œ๋Š” annotationProcesor๋ฅผ kapt๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค.

์ตœ์‹  ๋ฒ„์ „์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•˜๋ฉฐ 2020๋…„ 03์›” 14์ผ ๊ธฐ์ค€์œผ๋กœ 2.27์ด ์ตœ์‹ ๋ฒ„์ „์ด๋‹ค. dagger2 ์— ๋Œ€ํ•œ ์ตœ์‹  ์ •๋ณด๋ฅผ ์–ป์œผ๋ ค๋ฉด https://github.com/google/dagger ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.

๋งŒ์•ฝ ์•ˆ๋“œ๋กœ์ด๋“œ ๋ฐ์ดํ„ฐ ํŒŒ์ธ๋”ฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์„๋•Œ javac์— ์˜ํ•ด ์˜ค๋ฅ˜๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ๊ณผ dagger๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด dagger์™€ ๊ด€๋ จ๋œ ์˜ค๋ฅ˜๋ฐœ์ƒ์‹œ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์— ๋Œ€ํ•œ ์ปดํŒŒ์ผ์ด ๋ฉˆ์ถ”๊ณ  ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ ๋˜ํ•œ 100์ค„์ด์ƒ ์ถœ๋ ฅ๋˜๊ธฐ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€๋กœ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค

android{
...
  gradle.projectsEvaluated{
    tasks.withType(JavaCompile){
    	options.compilerArgs << "-Xmaxerrs" << "500"
    }
  }
}
profile
๐Ÿ’ป๋””์ง€ํ„ธ ๋…ธ๋งˆ๋“œ๋ฅผ ๐Ÿš€๊ฟˆ๊พธ๋Š” ๐Ÿ‡ฏ๐Ÿ‡ฒ์ž๋ฉ”์ฆˆ ๐Ÿฅ๊ฐœ๋ฐœ์ž ์ž…๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€