Backend/Java & Spring

DI와 객체지향 관점

khu2172 2025. 6. 26. 19:18

DI(Dependency Injection)와 객체지향 관점

1. DI란 무엇인가?

DI(Dependency Injection, 의존성 주입)는 객체가 자신의 의존 객체를 직접 생성하지 않고, 외부에서 주입받는 설계 패턴이다.


즉, 객체와 객체 사이의 "의존 관계"를 개발자가 직접 코드로 연결하지 않고, 주입(Injection) 방식으로 외부에서 전달받게 함으로써, 객체 간 결합도를 낮추는 방법이다.

  • DI의 목적:
    • 객체 간의 강한 결합을 피함.
    • 코드를 더 유연하고, 재사용하기 쉽고, 테스트도 편하게 만든다.

2. 객체지향 프로그래밍에서 DI가 중요한 이유

객체지향 프로그래밍(OOP)은 유지보수성, 재사용성, 확장성을 강조한다.


이런 특징을 살리려면, 객체 간의 결합도가 낮아야 하고, 서로 독립적으로 동작하는 "모듈화"가 잘 돼 있어야 한다.

하지만, 강한 결합이면?

  • 새로운 기능이 추가되면 연결된 모든 코드에 영향을 줘서 전체적으로 코드를 수정해야 함(확장성 저하).
  • 실제로 동작하는 객체 대신, 테스트용 가짜 객체(Mock)로 바꿔서 실험하고 싶을 때, 대체가 불가능해짐(테스트 어려움).
  • 특정 기능을 수정하려면 연결된 모든 코드도 함께 수정해야 한다(유지보수성 저하). 
  • OCP(개방-폐쇄 원칙), DIP(의존 역전 원칙)을 위반하게 된다.

3. DI로 객체지향 원칙을 지키는 방법

OCP(개방-폐쇄 원칙)

  • 기존 코드를 수정하지 않고도, 새로운 기능을 쉽게 확장할 수 있어야 한다.

DIP(의존 역전 원칙)

  • 구체적인 구현체가 아니라, 추상(인터페이스/상위 타입)에 의존해야 한다.

DI  적용 후에는? 

DI를 적용하면, 객체가 자신이 사용할 구체적인 대상을 직접 결정하지 않는다.
대신, 필요한 의존성은 외부(프레임워크, 개발자, IoC 컨테이너)에서 주입해주는 방식으로 연결된다. 
이 덕분에 결합도가 낮아지고, 기능의 확장/변경/테스트가 훨씬 용이해진다.

4. 결론: DI는 객체지향 설계의 핵심 도구

  • DI는 객체지향 프로그래밍의 장점(유지보수, 확장, 재사용성)을 극대화시켜주는 핵심 도구이다.
  • 강한 결합에서 발생하는 문제(OCP, DIP 위반)를 해결하고, 유연하고 테스트하기 좋은 설계로 나아가게 도와준다.

요약

DI(의존성 주입)는 객체지향 설계의 핵심 원칙을 실천하게 해주는 중요한 패턴이며,
객체 간 결합을 낮추어 더 유연하고 유지보수하기 좋은 소프트웨어를 만들 수 있게 해준다.

'Backend > Java & Spring' 카테고리의 다른 글

JWT와 OAuth의 차이점 정리  (0) 2025.07.29
JWT(Json Web Token)란?  (0) 2025.07.05
객체 지향  (0) 2025.06.22
AOP를 활용했던 경험  (0) 2025.06.13
Maven과 Gradle의 차이점  (1) 2025.06.12