DI, IoC

김태훈·2024년 1월 3일
0

Spring

목록 보기
7/16

DI, Dependency Injection

의존성 주입이란 의미로, 객체를 직접 생성하는 것이 아닌 외부에서 주입하는 것을 의미합니다.

class Sample{
    private Apple apple = new Apple();
}

일반적으로 의존성에 대한 제어권은 객체 자신이 갖습니다.

class Sample{
    private Apple apple;
    
    public Sample(Apple apple){
    	this.apple = apple;
    }
}

class SampleTest{
    Apple apple = new Apple();
    Sample sample = new Sample(apple);
}

하지만, DI는 자신이 아닌, 다른 클래스에서 객체를 생성한 뒤 클래스의 생성자나 setter 등을 이용해 주입시켜줍니다.

위의 예시로 보면 하단의 코드는 자기 자신이 객체를 생성하지 않고, SampleTest라는 클래스에서 Apple 객체를 생성하여, Sample 클래스의 생성자를 이용해 주입하는 것을 볼 수 있습니다.

IoC, Inversion of Control

제어의 역전이라는 의미로 메소드나 객체의 호출을 개발자가 결정하는 것이 아닌 외부에서 결정되는 것을 의미합니다.

객체의 의존성을 역전시켜 객체 간의 결합도를 줄이고 유연한 코드를 작성할 수 있도록하여 가독성 및 코드 중복, 유지 보수를 편하게 할 수 있게 합니다.

이를 사용해서, Spring에서는 제어의 흐름이 Repository -> Service -> Controller로 되며 Repository나 Service의 생성자가 바뀌어도, Controller의 변경이 필요하지 않게 됩니다.

0개의 댓글