만자의 개발일지

[Spring] IoC와 DI 본문

Java/Spring

[Spring] IoC와 DI

박만자 2022. 2. 11. 10:17

IoC(Inversion of Control)

IoC(Inversion of Control)를 해석하면 제어의 역전입니다.

이는 스프링 뿐만 아니라 모든 프로그래밍에서 사용될 수 있는 범용적인 개념입니다.

쉽게 말해 객체를 개발자 본인이 제어하는 것이 아닌 스프링 컨테이너에게 제어권이 넘어가는 것을 뜻합니다.

 

아래는 일반적으로 자바에서 객체를 생성하여 객체를 제어하는 코드입니다.

class ClassA {
		
}

class ClassB{
	
    private ClassA a;
    
    ClassB() {
    	this.a = new ClassA();
    }
}

보시다시피 개발자 본인이 new 연산자를 통해 직접 객체를 생성하고 변수에 할당해줘야 하는 방식입니다.

 

스프링의 경우 어떨까요?

 

아래코드는 스프링에서의 객체 할당 방식입니다.

@Component
class ClassA {
		
}

class ClassB{
	
    @Autowired
    private ClassA a;
 
}

스프링의 경우 Bean(스프링에 의해 관리되는 객체)이라면 @Autowired 어노테이션을 통해 손쉽게 객체를 할당할 수 있습니다.

이는 개발자 본인이 객체를 관리하는 것이 아닌 스프링 컨테이너에서 객체를 생성하고 해당 객체를 할당 시켜준 것입니다.

이처럼 객체의 흐름, 생명주기관리등을 외부(제 3자)에서 처리하는 방식의 모델을 제어의 역전(IoC)라고 합니다.

 

 

DI(Dependency Injection)

DI란 객체를 외부로부터 할당받고 이를 통해 다이나믹하게 객체를 할당하는 방식입니다.

사용할 객체들을 컨테이너에 등록한 후 어플리케이션 코드에서 해당 객체를 setter함수의 매게변수로 받아와서 실행 시에 동적으로 의존관계를 설정해줍니다.

 

DI의 의존성 주입 방식에는 3가지가 있습니다.

  • 생성자를 이용한 의존성 주입
  • setter메소드를 이용한 의존성 주입
  • 초기화 인터페이스를 이용한 의존성 주입

스프링에서는 두번째 방식인 setter를 이용한 의존성 주입을 지지합니다. 이유는 외부에서 제공받은 객체를 저장해뒀다가 내부의 메소드에서 사용하게 하는 DI방식에서 활용하기에 적당하기 때문입니다.

 

이 IoC와 DI 덕분에 캡슐화를 통한 높은 응짚도와, 객체간의 낮은 결합도를 이루고 유연한 코드를 작성할 수 있도록 해주며, 개발자들이 개발에 더욱 집중할 수 있도록  해줍니다.

 

참고

 

 

 

'Java > Spring' 카테고리의 다른 글

[Spring] POJO란?  (0) 2022.02.11
[Spring] 이클립스 Spring 프로젝트 생성  (1) 2022.01.18
Comments