1. IoC (Inversion of Control, 제어의 역전)
기존 프로그램은 클라이언트 구현 객체가 스스로 필요한 구현 객체를 생성하고, 연결하고 실행했다. 즉, 구현 객체가 프로그램의 제어 흐름을 조종했다. 하지만 AppConfig의 등장으로 AppConfig가 제어 흐름을 모두 가지게 되고 구현 객체는 자신이 수행해야 하는 로직만 담당하게 된다. AppConfig와 같이 프로그램의 제어 흐름을 외부에서 관리하는 것을 IoC라고 한다. AppConfig의 등장 배경은 아래 내용을 참고하자.
2. DI (Dependency Injection, 의존관계 주입)
하나의 클래스가 인터페이스에만 의존한다면 실제로 어떤 객체가 사용될지 모른다. 이때 의존관계는 "정적 클래스의 의존 관계와, 실행 시점에 결정되는 동적 객체(인스터스) 의존 관계" 두 가지를 분리해서 생각해야 한다. 정적 클래스의 의존 관계란 구현 클래스가 의존하는 인터페이스를 말한다. 우리는 인터페이스 객체들을 미리 생성하고 이후 실행 시점에서 외부에서 정한 구현 객체들을 해당 인터페이스에 주입한다. 따라서 우리는 실행 전까지는 어떤 구현 클래스 객체가 주입될지 알 수 없다. 이렇게 "애플리케이션 실행 시점에 외부에서 실제 구현 객체를 생성하고 클라이언트에 전달해서 클라이언트와 서버의 실제 의존관계가 연결되는 것"을 DI라고 한다.
- DI를 사용하면 정적 클래스 의존관계를 변경하지 않고 동적인 객체 인스턴스 의존관계를 쉽게 변경할 수 있다.
3. 컨테이너
이전에 말한 AppConfig와 같이 객체를 생성하고 관리하며 주입(연결)해주는 친구를 IoC 컨테이너 혹은 DI 컨테이너라고 한다. (주로 DI 컨테이너라고 부른다.)
'BackEnd > Spring' 카테고리의 다른 글
[Spring] 싱글톤 컨테이너 (0) | 2023.08.23 |
---|---|
[Spring] 스프링 컨테이너와 스프링 빈 (0) | 2023.08.20 |
[Spring] DIP 위반 문제 해결 (DI의 등장) (0) | 2023.08.20 |
[Spring] test 코드 작성 기초 (0) | 2023.08.18 |
[Spring] 좋은 객체 지향 설계의 5가지 원칙 (SOLID) (0) | 2023.08.17 |