피드로 돌아가기
코드 품질 개선 기법 27편: 티끌이 모여 태산이 되듯 의존성도 쌓이면
LINE Engineering
Backend

코드 품질 개선 기법 27편: 티끌이 모여 태산이 되듯 의존성도 쌓이면

LY Corporation의 Review Committee가 불필요한 의존성 주입 패턴을 제거해 생성자 매개변수를 5개에서 3개로 축소하고 코드 복잡도 감소

2025년 12월 23일9intermediate

Context

LatestNewsSnippetUseCase 클래스가 생성자를 통해 5개의 의존성(2개 리포지터리, 2개 포매터, 1개 모델 팩토리)을 주입받고 있었다. 불필요한 의존성 주입으로 인해 생성자 호출 지점이 증가하고 호출자의 책임이 커지는 문제가 발생했다.

Technical Solution

  • StringTruncator와 TimeTextFormatter를 외부 주입 대신 클래스 내부의 private 속성으로 변경: 상태를 갖지 않는 유틸리티성 클래스이므로 직접 인스턴스화
  • modelFactory 함수 제거: NewsSnippet 생성자를 직접 호출하도록 변경해 불필요한 함수형 의존성 제거
  • 생성자 매개변수 축소: 5개에서 3개(locale, articleRepository, sourceRepository)로 단축해 호출자의 책임 감소
  • 의존성 주입의 목적 명확화: 환경에 따라 달라지는 값(Locale)과 복잡한 클래스(리포지터리)만 주입 대상으로 제한

Key Takeaway

참조 투명성을 가진 유틸리티 함수나 상태 없는 단순 클래스는 의존성 주입의 대상이 아니다. 의존성 주입은 라이프사이클 관리, 의존성 역전, 구현 전환 같은 명확한 목적이 있을 때만 적용해야 생성자 복잡도와 호출자의 암묵적 책임을 줄일 수 있다.


의존성 주입을 설계할 때 호출자가 직접 생성자 매개변수를 해결해야 하는 유틸리티 클래스(StringTruncator 같은 상태 없는 포매터)와 단순 모델 클래스(NewsSnippet)를 구분해서, 이들은 내부에서 직접 인스턴스화하고 오직 환경에 따라 변하는 값(Locale)과 복잡한 의존성(리포지터리)만 주입하면 생성자 복잡도를 낮추고 코드 추적 난이도를 줄일 수 있다.

원문 읽기