오늘도 더 나은 코드를 작성하였습니까?

의존성 주입이란? 본문

DI/Dagger2

의존성 주입이란?

hik14 2020. 8. 4. 16:17

의존성(Dependecy)

 

- 객체 지향 프로그래밍 관점에서 의존성은 어떤 클래스가 다른 클래스를 필요로 하는 것

- 아래 코드는 Computer 클래스는 cpu와 memory에 대해서 의존적이다.

- Cpu Memory를 Computer가 생성 및 관리하며 Cpu와 Memory 각각 한 가지 Type에 의존한다.

public class Cpu { ..... }

public class Memory{ .... }

public class Computer{
	
    private Cpu cpu;
    private Memory memory;
    
    public Computer(){
    	cpu = new Cpu();
    	memory = new Memory();
    }
}

 

주입(Injection)

 

생성자 및 메소드등을 통해서 외부로부터 생성된 객체를 받는 것

- Interface 사용하여 cpu와 memory는 1가지 타입에 의존적이지 않다

- constructor, setter를 사용하여 Computer클래스 밖에서 생성되어 할당된다 (주입)  

public Interface Cpu { ..... }

public Interface Memory { .... }

public class IntelCpu implements Cpu { .... }
public class AmdCpu implements Cpu { .... }

public class SamSungMemory implements Memory { .... }
public class IntelMemory implements Memory { .... }

public class Computer{
	
    private Cpu cpu;
    private Memory memory;
    
    public Computer(){}
    
    public Computer(Cpu cpu, Memory memory){
    	this.cpu = cpu;
        this.memory = memory;
    }
    
    public void setCpu(Cpu cpu){
    	this.cpu = cpu;
    }
    
    public void setMemory(Memory){
    	this.memory = memory;
    }
}

 

의존성 주입의 장점

 

의존성 주입은 인터페이스 기반으로 설계되며 코드를 유연하게 한다. 

- 주입되는 코드 위에선(Cpu, Memory)만 따로 변경하여 리팩터링이 쉽다.

- 단위테스트를 하기에 편해진다.

- 인터페이스 기반으로 설계하여 독립적인 개발이 편해진다.

- 지속적인 유지보수할 경우 높은 생산성을 보장한다.

 

의존성 주입의 단점

 

- 매우 간단한 프로그램을 만들 때는 번거롭다.

- 동작과 구성을 분리해 코드를 추적하기 힘들다(개발자는 더 많은 파일을 봄으로써 코드를 이해해야 됨)

 

 

'DI > Dagger2' 카테고리의 다른 글

Android app에서 Dagger 사용  (0) 2021.05.03
Dagger Basic  (0) 2020.11.30
수동 종속성 삽입  (0) 2020.11.30
Android의 종속 항목 삽입  (0) 2020.11.24
Dagger2 (안드로이드 의존성 주입 프레임워크)란?  (0) 2020.08.04