[WIL] DI, IOC , Bean

김대욱·2023년 2월 12일
0

DI

DI는 Dependency Injection의 약자로, 객체 간의 의존성을 외부에서 주입하는 기술이다. 의존성을 갖는 객체는 필요한 의존성을 IOC 컨테이너 에서 제공받아 사용할 수 있게 된다.

사용:

@Controller
public class UserController {

    private UserService userService;

    @Autowired
    public UserController(UserService userService) {
        this.userService = userService;
    }
}

또는

@Controller
@RequiredArgsConstructor
public class UserController {
    private final UserService userService;
}

위의 예제에서는 UserController 클래스가 UserService 클래스를 의존하고 있다. @Autowired 어노테이션을 사용하여 UserService 객체를 UserController 생성자를 통해 주입받아 사용한다.

DI를 사용하면 객체 간의 의존성을 명시적으로 지정할 수 있어, 코드의 유지보수성이 높아진다. 스프링에서는 Bean을 통해 DI를 구현할 수 있는데, 이를 통해 객체 간의 의존성을 쉽게 관리할 수 있다.

Bean

스프링 Bean은 스프링 프레임워크에서 관리하는 객체의 대상을 말한다. Bean은 스프링의 컨테이너에 등록되어 관리되며, 스프링의 Dependency Injection (DI) 기능을 통해 객체 간의 의존성을 관리할 수 있다.

Bean은 XML 파일, 자바 어노테이션, 자바 코드 등을 사용하여 정의할 수 있다. 정의된 Bean은 스프링 IoC 컨테이너에서 관리되어 애플리케이션에서 사용된다.

Bean 등록:

@Service
public class UserService {

    // ...
}

위의 예제에서는 UserService 클래스를 Bean으로 정의했다. @Service 어노테이션을 사용하여 Bean으로 정의할 수 있다. 이제 UserService 객체는 스프링 IoC 컨테이너에서 관리되며, 애플리케이션에서 사용할 수 있다. 또한 @Component 어노테이션을 이용해도 Bean으로 정의 할 수 있다.

IOC

IOC(Inversion of Control)는 스프링 프레임워크에서 객체의 생성과 관리를 외부의 제어권을 넘겨받아 관리하는 기술을 말한다.

IOC의 구현을 위해 스프링에서는 Bean이라는 개념을 사용한다. Bean은 스프링에서 관리하는 객체를 말한다. Bean은 스프링의 IoC 컨테이너에서 관리되며, IoC 컨테이너는 Bean을 생성하고 의존성 관계를 조정하여 관리한다.

스프링에서 관리하는 객체 A가 객체 B에 의존한다면, IoC 컨테이너는 객체 B를 생성한 뒤 객체 A에 주입하여 관리할 수 있게 해준다. 이렇게 개발자가 직접 객체의 생성과 관리를 하지 않고, IoC 컨테이너가 대신 관리하는 것이 IOC의 핵심 원리다.

0개의 댓글