Spring IoC & DI

진조던·2022년 4월 23일
0

Spring

목록 보기
3/3
post-thumbnail

1. DI(Dependency Injection)란?


1-1. 의존하는게 뭐야?

객체지향 프로그래밍에서 어떤 객체에 의존한다는 것은, 다른 객체의 데이터나 기능을 사용(호출)하는 것으로 이해할 수 있다.

class A {
	public void methodA();
}

class B {
	A a = new A();
    public void methodB(){
    	a.methodA();
    }
}

위의 코드는 B라는 객체에서 A라는 객체를 생성하고 그 메소드를 실행한다. 정확히는 이를 B의 작업을 A에게 위임delegation한다고한다. 이 때 A의 메소드가 변경될 경우 B 또한 영향을 받을 수 있기 때문에 두 객체는 의존관계에 있다고 말한다.

1-2. 빈(Bean)과 컨테이너

Spring Framework은 자바 객체의 생성과 소멸 등 생명주기를 관리(BeanFactory)하고 생성된 객체에게 추가적인 기능을 부여(ApplicationContext)하기도한다.

이 때 위의 역할을 하는 주체를 우리는 컨테이너라고 부르고, 컨테이너에 의해 관리되는 자바 객체를 빈(Bean)이라고한다.

여담으로, 컨테이너와 빈은 나름대로 적합한 비유인 것이, 콩깍지(객체)안에 콩알(데이터와 기능)이 있고 그 콩들을 싣고(생성) 컨테이너에서 내리고(소멸) 콩들이 말라 죽지 않도록 적절히 온습도를 유지(관리)해준다고 생각할 수 있다.

1-3. 의존성 주입

에서 언급하였듯 객체의 제어권이 개발자가 아닌 Spring 컨테이너에게 있다. 따라서 우리는 Spring Framework에서 의존 객체를 직접 만들어(new) 사용하지 않고 컨테이너에게 주입(Injection)받아 사용한다.

Image 출처
Bean을 등록하고 의존성 주입을 하는 방법은 따로 기술하지 않는다.

1-4. DI가 뭐가 좋아?

  • 재사용성을 높여준다.
  • 테스트에 용이하다.
  • 코드를 단순화 시켜준다.
  • 사용하는 이유를 파악하기 수월하고 코드가 읽기 쉬워지는 점이 있다.
  • 종속성이 감소하기 때문에 변경에 민감하지 않다.
  • 결합도(coupling)는 낮추면서 유연성과 확장성은 향상 시킬 수 있다.
  • 객체간의 의존관계를 설정할 수 있다.

Reference - Gyun's 개발일지

2. IoC(Inversion of Control)란?


Inversion of Control 즉, 제어의 역전이다.
글자 그대로 개발자가 객체(Spring Bean)의 생명주기 및 의존성을 제어하는 것이 아닌, 컨테이너가 그 제어권을 갖게 되었을 때를 말한다.

그래서 스프링 컨테이너를 IoC 컨테이너라고 부르기도한다.

0개의 댓글

관련 채용 정보