DI
DI(의존성 주입)는 클라이언트(다른 객체를 사용하려는 대상)가 의존할 객체를 외부에서 지정해 주는 것을 말한다. 역할이 배타적이지 않고 다른 객체의 변화에 영향받는다면 의존성이 있는 것이다.
클라이언트가 직접 객체를 생성하지 않아도, IoC(DI) Container를 통해 객체를 관리하는 spring framework는 다른 객체에 의존하도록 주입할 수 있다. IoC Container는 객체 생성 대상으로 지정된 객체를 관리하며 자동으로 객체를 생성하고, annotation을 통해 클라이언트의 코드 변경 없이 다형성을 구현할 수 있게 해 준다. 이는 클라이언트가 아닌 프레임워크가 제어 권한을 갖고 있기 때문에 가능한 것이다.
IoC
IoC(제어의 역전)는 프로그램의 제어 권한이 뒤바뀌는(inversion) 것을 말한다.
클라이언트가 제어 권한을 통제하고 있으면 자신의 본래 목적 외의 많은 것들을 직접 담당하게 된다. 서버 구현 객체 생성과 연결, 실행 등의 역할을 클라이언트가 직접 담당하게 되면 객체 간 업무 분담이 명확하지 않고, 코딩하는 개발자의 부담이 늘어나게 된다. 따라서 spring 등의 프레임워크에 제어 권한을 넘겨, 클라이언트의 본질적인 역할(구동을 위한 로직이 아닌 비즈니스 로직)에 집중할 수 있게 하는 것이다.
이렇게 하면 클라이언트는 구현 객체에 대한 정보를 일일이 알 필요 없이, 인터페이스의 정보를 통해 자신이 할 수 있는 역할만 다 하면 된다. 구현 객체에 대한 선택 권한과 객체 연결구조 설계, 객체 생성, 실행 등은 제어 권한을 넘겨받은 프레임워크가 담당하게 된다. 또한 클라이언트의 코드는 서버의 구현 대상이나 그 구조에 영향받지 않으므로, 요구사항의 변경에 유연해지게 된다.
'Development > Spring' 카테고리의 다른 글
HTTP method의 개념과 종류 정리 (0) | 2023.04.11 |
---|---|
DDD 기반의 AOP에서 비즈니스 로직이 가지는 의미 (0) | 2023.04.07 |
DDD에서 Controller, Service, Repository의 역할 (0) | 2023.04.07 |
DDD(Domain Driven Design)에서 Entity, DTO, VO 비교 (0) | 2023.04.05 |
DDD(Domain Driven Design)와 SQL 중심 설계의 차이점 (0) | 2023.04.05 |