ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring IoC와 DI에 관하여
    Spring 2023. 2. 20. 00:49

     

    IoC와 IoC 컨테이너

    IoC (Inversion of Control)은 객체 지향 프로그래밍에서 사용되는 디자인 패턴 중 하나로, 객체 생성과 관리에 대한 제어권이 프레임워크에 있음을 의미합니다.

    일반적으로 객체 생성 및 관리는 개발자가 직접 수행하지만, IoC에서는 프레임워크가 객체를 생성하고, 관리하는 역할을 수행합니다. 이를 통해 개발자는 객체 생성 및 관리에 대한 부분에서 자유로워지고, 코드의 유연성과 확장성을 높일 수 있습니다.

    Spring Framework에서 IoC는 BeanFactory와 ApplicationContext 인터페이스를 통해 구현됩니다. BeanFactory는 Spring의 가장 기본적인 IoC 컨테이너이며, Bean을 생성하고 관리합니다. ApplicationContext는 BeanFactory를 상속받은 인터페이스로, BeanFactory가 제공하는 모든 기능을 포함하며, 추가적인 기능을 제공합니다.

    예를 들어, ApplicationContext는 메시지 리소스, 이벤트 처리, AOP (Aspect-Oriented Programming) 등의 기능을 제공합니다.

    Spring에서 IoC는 XML 파일, 어노테이션, 자바 코드 등 다양한 방법을 통해 설정할 수 있습니다. 이를 통해 객체의 생성 및 의존성 주입을 설정할 수 있으며, 코드의 유지보수성과 재사용성을 높일 수 있습니다.

    Spring의 IoC 컨테이너는 개발자가 작성한 코드에서 생성된 객체를 관리하며, 필요한 객체를 주입하고, 객체 간의 의존성을 관리합니다. 이를 통해 객체의 생명주기와 의존성 관리를 편리하게 할 수 있습니다.

    DI 란

    Spring 프레임워크에서 DI(Dependency Injection)는 객체간의 의존성을 줄이고 코드 유지보수성을 높이는 방법 중 하나입니다.
    DI는 주입할 객체를 관리하는 컨테이너인 Bean Factory 또는 Application Context가 제공하는 기능으로 객체 생성 및 소멸, 객체 간의 관계 설정 등을 대신 처리하여 개발자가 간단한 설정만으로 DI를 사용할 수 있습니다.

    DI를 사용하기 위해서는 먼저 Bean으로 등록할 클래스를 정의하고, Bean으로 등록하기 위한 설정을 추가해야 합니다. 설정은 XML, 자바 어노테이션, 자바 코드 등을 사용할 수 있습니다. 예를 들어, 다음과 같은 XML 설정을 사용하여 MyService 클래스를 Bean으로 등록할 수 있습니다.

    <bean id="myService" class="com.example.MyService" />

    Bean으로 등록된 MyService 클래스를 사용하려면, 다른 클래스에서 MyService 객체에 대한 의존성을 주입해야 합니다. Spring에서는 다음과 같은 방법으로 DI를 수행합니다.

    • 생성자 주입(Constructor Injection): 의존성을 생성자의 매개변수로 전달하여 객체를 생성합니다.
    public class MyController {
        private final MyService myService;
    
        public MyController(MyService myService) {
            this.myService = myService;
        }
    }
    • Setter 주입(Setter Injection): 의존성을 Setter 메서드로 전달하여 객체를 생성합니다.
    public class MyController {
        private MyService myService;
    
        public void setMyService(MyService myService) {
            this.myService = myService;
        }
    }
    • 필드 주입(Field Injection): 필드에 직접 의존성을 주입하여 객체를 생성합니다.
    public class MyController {
        @Autowired
        private MyService myService;
    }

    위와 같이 DI를 사용하면, 코드의 결합도를 낮추고 유지보수성을 높일 수 있습니다. 또한, 객체의 생성 및 소멸, 객체 간의 관계 설정 등을 Spring이 대신 처리하기 때문에 개발자는 더욱 쉽게 비즈니스 로직 구현에 집중할 수 있습니다.

    댓글

Designed by Tistory.