본문 바로가기

개발/Spring

의존성이란

의존성이란

자바에서 의존성이란 new 생성자와 같은 것이다.

예를 들어, Car 클래스 내에서 new Tire();를 한다면 Car가 Tire에 의존한다고 한다.

이러한 구조는 큰 단점을 가지고 있다. 바로 의존하는 대상이 수정되었을 경우 의존하고 있는 클래스 또한

필연적으로 수정해야 한다. 만약 의존하고 있는 클래스가 100개라면?? 상상하기도 싫은 일이 발생한다.

이를 해결하기 위해 의존성 주입이 탄생하게 되었다.

 

예시

interface Tire{

 String getBrand();

}

 

public class KoreaTire impliments Tire{

 public String getBrand(){

    return "한국 타이어"

}

}

 

public class AmericaTire implements Tire{

  public String getBrand(){

   return "미국 타이어"

}

}

 

public class Car{

 Tire tire;

 public Car(){

  tire = new KoreaTire();

}

}

 

 

public class CarExample{

  public static void main(String[] args){

    Car car = new Car();

   

    System.out.print(car.getBrand());

}

}

 

위 예시와 같이 자동차 내부에서 타이어를 만드는 것이 아니라 외부에서 생성된 타이러를 자동차에 장착하는 방식이

주입이다.

이것이 바로 의존성 주입이다.

 

의존성 주입 방법

생성자를 통한 의존성 주입

 

위의 예시 코드를

public Car(Tire tire){

 this.tire = tire;

}

로 바꾸며 외부에서 만든 Tire 생성자를 주입하여 만들 수 있다.

이것이 바로 생성자를 통한 의존성 주입이다.

 

 

 

속성을 통한 의존성 주입

 

생성자를 통한 의존성 주입의 단점은 위 예시로 본다면 자동차를 살 때만 타이어를 설정할 수 있다는 것이다.

한번 만든 것으로 쭉 써야하고 나중에 교체할 수가 없다.

이를 해결하기 위해 생성자가 아닌 속성을 통한 의존성 주입이 나왔다.

 

위의 생성자로 의존성 주입을 하던 것을 car.setTire(tire);로 속성을 통한 의존성 주입을 할 수 있다.

 

 

 

스프링을 통한 의존성 주입 - XML사용

 

위의 속성을 통한 의존성 주입을 스프링에서느느 Bean을 이용해 더 편리하게 구현할 수 있다.

ApplicationContext context = new FileSystemXmlApplicationContext("xml경로");

Tire tire = (Tire) context.getBean("tire");

Car car = (Car) context.getBean("car");

car.setTire(tire);

 

위 예제 코드와 같이 Bean을 통해서 생성자를 가져오고 주입할 수 있다. 즉, 이전 자바 예시에서 Car에서의 의존성을

Driver(외부)로 뺴며 의존성을 Driver에서 주입하듯이, 스프링에서는 Bean을 통해 의존성을 전부 주입할 수 있다.

정말 편리하다.

위 사진은 Bean. xml 파일 코드 내용이다.

이렇게 xml에 bean이라는 태그 안에 해당 클래스와 그에 대한 id를 설정해 줌으로써 의존성 주입을 할 수 있게 된다.

bean을 통한 의존성 주입의 큰 장점은 bean하나에서 관리를 다 하기 때문에 바꿔야 할 클래스가 100개라면 bean에서 한번에 처리하면 되기 때문이다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'개발 > Spring' 카테고리의 다른 글

[Spring] 인프런 8차 Event  (0) 2020.12.25
[Spring] 인프런 3차 강의  (0) 2020.12.24
[Spring] 인프런 2차 강의  (0) 2020.12.24
IoC 컨테이너란?  (0) 2020.12.23
의존성 2 in Spring  (0) 2020.11.03