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 |