꾸물꾸물 졔의 개발공부

[Spring] 스프링 IOC (Inversion of Control) 본문

SPRING

[Spring] 스프링 IOC (Inversion of Control)

체제 2023. 3. 14. 23:49

IoC (Inversion of Control)

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

IoC는 Inversion of Control의 약자로 Inversion = 역전, Control = 제어. 즉, 제어의 역전을 말한다.

 

말 그대로 메소드나 객체의 호출작업을 개발자가 결정하고 제어하는 것이 아니라, 외부(스프링 컨테이너)에 제어권이 넘어가 외부에 의해 결정되는 것을 의미한다.


 

public class A {

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

위와 같은 경우에는 A클래스 내부에서 new 생성자를 통해 B를 직접 생성 하고 변수에 할당해줌으로써 'A가 B에게 의존하고 있음'을 개발자가 직접 표현해주고 있다. 즉, 개발자가 제어를 관리하고 있다.

 

하지만 SPRING 에서는,

@Component
Public class B{

}

Public class A{

    @Autowired
    private B b;
    
}

@Autowired 어노테이션을 사용하여 객체를 주입받았다. B라는 객체가 스프링 컨테이너에 의해 관리되고 있는 객체 Bean이라면, @Autowired를 통해 객체를 주입받을 수 있게 된다. 

이것은 스프링 컨테이너에서 직접(제어) 객체를 생성하여 A객체에 주입시켜 준 것이다. 

 

이것이 바로 제어가 역전된 경우다. 

개발자가 직접 해왔던 제어를 스프링 컨테이너에서 대신 해주는 것이 IoC의 개념이다. 

 

 

 

IoC 를 사용하는 이유 ?

👍제어의 역전의 장점

  • 객체 간 결합도를 낮춘다
  • 유연한 코드 작성 가능 
  • 가독성 증진
  • 코드 중복 방지
  • 유지 보수 용이

 

기존에는 객체가 필요할 때마다 필요 클래스 내부에서 새롭게 생성하고 사용했지만, IoC를 적용하게 되면 미리 생성해 놓은 객체를 주입받아 사용하기만 하면 된다.