본문 바로가기
Back-end

IoC/DI

by 신재권 2023. 8. 30.

IoC란?

IoC란 Inversion of Control의 약자로, 제어의 역전의 의미를 가진다.

일반적으로 컴퓨터 프로그램의 제어 흐름을 개발자가 제어하지만, IoC 패턴을 적용하면 프레임워크가 프로그램의 제어 흐름을 제어합니다. 이를 IoC라고 합니다.

IoC의 장단점

  • 컨테이너가 직접 객체를 생성/관리 하기 때문에 코드에 객체를 선언하지 않아도 주입만 시켜주면 된다. → 클래스간 결합도가 줄어든다.
  • DI를 통한 IoC라면, 해당 서비스 객체를 여러 곳에서 재사용할 수 있게 된다.

DI란?

DI는 Dependency Injection의 약자로, 의존성 주입이라는 의미를 가진다.

Di는 객체가 자신이 사용하는 의존성을 직접 생성하거나 결정하지 않고 외부에서 주입받도록 하는 패턴이다.

DI의 장단점

  • 의존성을 주입함으로서 모의 객체를 활용해 테스트 진행이 가능해 테스트 용이성이 증가
  • 구현체를 해당 클래스에서 구현하고 있지 않기 때문에 모듈 간 결합도가 낮아진다.
  • DI를 하기 위해선 설정 작업을 해야된다.

관련 SOLID 원칙

의존 역전 원칙(Dependency Inversion Principle - DIP)

고수준 모듈은 저수준 모듈에 의존해서는 안되며, 양쪽 모두 추상화에 의존해야 합니다.

상위 수준의 모듈은 하위 수준의 모듈에 의존하면 안되며, 둘 다 모두 추상화된 인터페이스나 클래스에 의존해야 합니다.

즉 직접 참조하는 것이 아닌, 대상의 상위 요소를 참조하라는 원칙입니다.

  • DIP는 고수준 모듈과 저수준 모듈 간의 의존성을 최소화하고, 추상화에 의존하도록 하는 것을 강조한다. 이는 DI 패턴과 밀접한 연관이 있다.

개방/폐쇄 원칙(Open/Closed Principle - OCP)

기존의 코드를 변경하지 않으면서 확장할 수 있어야 합니다.

새로운 기능을 추가할 때 기존 코드를 수정하지 않고 확장 가능한 설계를 유지합니다.

  • 추상화 사용을 통한 관계 구축

또한 추상화 사용을 통해 기능 확장이 가능하고, 구현체 변경을 통해 기존 코드를 변경하지 않습니다.

'Back-end' 카테고리의 다른 글

스레드를 무한정 만든다면?  (0) 2023.08.31
PSA(Portable Service Abstraction)  (0) 2023.08.30
JDBC  (0) 2023.08.24
가상 머신(스택 기반, 레지스터 기반)  (0) 2023.08.24
Object.equals()를 재정의 해야 하는 이유  (0) 2023.08.24