SPRING/스프링

[스프링]3.스프링을 쓰는 이유? 의존성 주입

추억을 백앤드하자 2021. 3. 25. 11:01
728x90
반응형
SMALL

스프링을 과연 왜 쓸까

 

public class A{
	
    private B b;
    
    public Run(){  
    	 b=new B();
    }

	public void Run(Walk walk){  
    	b.exercise(walk);
    }

}

🌈 A 클래스 는 Run() 메소드를 실행 할 때 exercise()를 위해 B 클래스가 필요하다.

이때, A 클래스가 B에 의존성을 갖고 있다(의존한다) 라고 한다.

 

의존성은 왜 안좋은걸까

 

✏️1.유닛 테스트가 어려움.

  내부에서 직접 생성하는 객체에 대해 Mocking을 할 방법이 없다.

  따라서 단위테스트를 하기가 까다롭다.

  Mocking

: 테스트를 위해 실제 값이 아닌 가짜 값을 만드는 것

 상세설명:blog.myungseokang.dev/posts/about-mocking/

 

Mocking 알아보기 with Python

Mocking with Python

blog.myungseokang.dev

 

✏️2.코드 변경이 어려움.

  A 클래스는 생성자 B 객체를 직접 생성하여 사용중이다.

 만약, 나중에 B 라는 클래스가 다른 성질의 Bad B 등으로 바뀐다면

 지금처럼 B 클래스에 의존하고 있는 A 클래스도 직접 바꿔줘야 한다.

 🌈즉, 객체간의 강한 결합력이 생겨, 소프트웨어 모듈화의 목적인 낮은 결합력 과 높은 응집도에 해가 되는 행위이다. 

 

 

✔️1.의존성 주입(Dependency Injection)

 위와 같은 문제 때문에 의존성 주입이 생겼다.

 의존성을 주입하지 않는 경우, 위와 같이 직접 필요한 객체를 생성하는 경우이며 의존성 주입을 하는 경우

 다음과 같다.

 

✏️1.생성자 주입 ,  2.세터 주입

public class A{

	private B b;
    
    public Run(B b){     //1.첫번째 DI 방법 [Construction Injection]
    	this.b=b;
    }
    
    public void setRun(B b){   //2.두번째 DI 방법 [Setter Injection]
    	this.b=b;
    }
}

 

 

이런 경우를 사용하면 왜좋지

코드의 수정이 용이하다.

의존성을 주입하지 않는다면, A 클래스의 직접 B 클래스 를 생성하는 부분을 바꿔줘야 한다. 

의존성을 주입하는 코드를 변경해주어야 하는것은 같으나, 한 클래스를 수정했을 때 다른 클래스를 수정해야 하는 상황을 방지해 준다.

 

🌈이 때문에 스프링은 DI 방식을 이용하여 모듈간의 결합도를 낮추어준다.

 DI란? IOC Containner 가 개발자 대신 xml 파일에 정의된 대로 Bean 객체를 생성하고 의존성을 대신 주입하는 것을 의미한다.

IOC 란? 제어의 역전, 사용자가 직접 객체를 생성하고 관리하던 것을 스프링의 IOC Containner 가 대신 해준다는 말이다.

 

DI를 통해 개발자가 해야할 일은 다음과 같다.❗️

✏️1.Bean class 작성

✏️2.주입을 위한 설정(xml 파일 기술 또는 어노테이션 적용)

 

 

 

출처:[galid1.tistory.com/493?category=769011]

 

728x90
반응형
LIST