스프링의 DI와 IOC

나무에물주기·2023년 3월 8일
1

Spring

목록 보기
1/7
post-thumbnail

스프링 프레임워크는 DI(Dependency Injection)와 IOC(Inversion of Control)를 지원한다. DI는 객체 간의 의존성을 줄이기 위해 사용되는 디자인 패턴으로, 객체 생성시에 해당 객체가 의존하는 다른 객체를 직접 생성하는 것이 아니라, 외부에서 생성된 객체를 주입하는 방식으로 처리한다.

IOC는 DI의 구현 방식 중 하나로, 객체 생성의 제어권을 외부로 넘기는 것을 의미한다. 스프링에서 IOC는 Bean Factory나 Application Context 같은 컨테이너에서 구현된다. 스프링 컨테이너는 객체 간의 의존성을 관리하고, 객체 생성과 소멸을 담당한다. 이를 통해 객체 간의 결합도를 낮추고 유연성을 확보할 수 있다.

스프링에서는 XML, Annotation, Java Config 등 다양한 방식으로 DI와 IOC를 구현할 수 있다. 이를 활용해 코드의 유연성과 견고함을 높일 수 있다.

코드 예시

public class MyService {

    private MyRepository myRepository;

    // Constructor Injection
    public MyService(MyRepository myRepository) {
        this.myRepository = myRepository;
    }

    // Setter Injection
    public void setMyRepository(MyRepository myRepository) {
        this.myRepository = myRepository;
    }

    public void doSomething() {
        // ...
    }
}

위 코드에서 MyService 클래스는 MyRepository 클래스에 의존한다. DI를 사용하지 않으면 MyService 클래스에서 직접 MyRepository 클래스의 인스턴스를 생성해야 한다. 하지만 DI를 사용하면, MyService 클래스의 생성자나 세터 메소드를 통해 MyRepository 클래스의 인스턴스를 외부에서 주입받을 수 있다. 이를 통해 MyService 클래스와 MyRepository 클래스의 결합도가 낮아지고 유연성이 확보된다.

profile
개인 공부를 정리함니다

2개의 댓글

comment-user-thumbnail
2023년 3월 30일

잘 보고 갑니다.

1개의 답글