Service Locator vs Dependency Injection

2025. 7. 27. 22:17·프로그래밍 일반

Service Locator 와 Dependency Injection 둘의 각 장단점을 정리하면서 비교해 보려고 합니다.

 

1. IoC (Inversion of Control)


IoC는 클래스가 다른 클래스를 사용할 때 의존성이 강한 결합이 발생하는 것을 방지하기 위해 외부에서 인터페이스를 활용해 클래스를 제공해 줘 느슨한 결합을 만들어주는 개념입니다.

 

이 때문에 클래스 내에서 사용할 클래스 객체를 생성하면 안 되고, 외부에서 객체를 받아와서 사용해야 합니다.

또한 싱글톤으로 클래스 객체를 받아와서 사용하는 건 해당 클래스에 강한 결합이 일어나는 방법이므로 사용하면 안됩니다.

 

이렇게 함으로써 테스트 환경을 구축하기 쉬워져 테스트가 용이해지고, 특정 환경에 종속되지 않아 유지보수성 및 재사용성이 좋은 코드를 짤 수 있습니다.

 

이때, 외부에서 객체를 받아오는 방법으로 Service Locator, Dependency Injection 가 있습니다.

 

2. Service Locator


Service Locator 는 다른 클래스에서 사용될 클래스 객체들을 전역 접근이 가능한 중앙 등록소에 미리 등록하여, 클래스가 해당 객체들을 사용할 때 중앙등록소에서 가져와서 사용하는 방법입니다.

 

 

장점

  • 구현이 간단하고 이해하기 쉬워 빠르게 적용할 수 있습니다.
  • 어떤 객체든 Sevice Locator 에 접근할 수 있기 때문에 편리하게 사용할 수 있습니다.

 

단점

  • 클래스가 어떤 Service Locator의 객체들을 사용하는지 의존성이 명확하게 드러나지 않습니다.
    (구현부를 들여다 봐야지 확인이 가능합니다.)
  • 사용될 클래스가 Service Locator 에 모두 등록되므로 ServiceLocator 가 너무 비대해질 수 있습니다.
    또한, Service Locator 와의 의존성은 강하게 결합되는 문제가 있습니다.
  • 테스트 환경에서도 Service Locator 가 문제없이 동작하도록 신경 써야 하는 문제가 있습니다.
    (Dependency Injection보다 테스트 환경을 구축하기 어렵습니다.)

 

3. Dependency Injection


DI(Dependency Injection) 은 특정 클래스가 필요한 클래스 객체들을 외부에서 주입시키는 방법입니다.

해당 클래스는 수동적으로 의존성을 받기만 하고, 스스로 의존성을 찾거나 생성하지 않습니다.

보통 생성자 주입을 많이 사용합니다.

 

 

장점

  • 의존성이 외부에서 주입되기 때문에 굉장히 약한 결합 의존성을 가집니다.
  • 주입되는 부분이 한정적이므로 어떤 객체들을 사용하는지 의존성이 명확하게 드러납니다.
  • 테스트환경에서 모킹 객체들을 쉽게 주입할 수 있어 단위테스트 작성이 용이합니다.

 

단점

  • 라이브러리를 사용하지 않을 경우 초기 설정 구축이 어렵습니다.
    또한, DI 프레임워크를 도입하더라도 러닝커브가 좀 있습니다.
  • 의존성 주입을 작성할 때마다 꽤 긴 코드를 작성해야 할 수 있습니다.

 

4. 결론


Service Locator 의 경우 사용하기 간단하고 쉽지만, 테스트 환경을 구축하기가 Dependency Injection 보다는 어렵기 때문에 간단하게 IoC 를 구축해야 하는 경우 유리하고, 테스트 환경을 구축해야 하는 프로젝트의 경우에는 불리합니다.

 

Dependnecy Injection 의 경우 초기 구축이 난이도가 있고 사용하기가 약간 복잡하다는 단점이 있지만, 테스트 환경 구축이 용이하며, 유지보수성이 Service Locator 보다 더 뛰어나기 때문에 간단한 프로젝트에서는 불리하며, 테스트 환경을 구축해야 하거나 큰 팀에서 진행하는 프로젝트에는 유리합니다.

 

참고


https://martinfowler.com/bliki/InversionOfControl.html

https://develogs.tistory.com/19

https://sanichdaniel.tistory.com/25

'프로그래밍 일반' 카테고리의 다른 글

추상클래스 vs 인터페이스  (0) 2026.04.09
SOLID 원칙 정리  (0) 2024.11.03
'프로그래밍 일반' 카테고리의 다른 글
  • 추상클래스 vs 인터페이스
  • SOLID 원칙 정리
ZoNaDak
ZoNaDak
돌고 돌아 게임개발자
  • ZoNaDak
    ZoNaDak 의 생각
    ZoNaDak
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 프로그래밍 일반
      • Unity
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    IOC
    Dependency Injection
    abstract class
    Custom SceneView
    추상클래스
    Interface
    인터페이스
    DI
    Service Locator
    EditorWindow
    C#
    Inversion of Control
    Unity
    PreviewRenderUtility
    IMGUIContainer
    abstract
    UI Toolkit
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
ZoNaDak
Service Locator vs Dependency Injection
상단으로

티스토리툴바