AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

의존성 주입(DI) 설정을 복사 붙여넣기하지 말고 이해하라

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

개발 툴

대상자

  • 대상: Android 앱 개발자, 특히 Hilt/Dagger를 사용하는 중급 이상 개발자
  • 난이도: 중간 (DI의 핵심 원리와 실무적 고려사항을 다룸)

핵심 요약

  • 의존성 주입(DI)은 단순한 설정이 아니라 @Singleton, @Inject 등의 스코프 이해컴포넌트 계층 구조를 바탕으로 한 설계가 필요함
  • 과도한 주입은 클래스 결합도 증가, 테스트 어려움, 메모리 누수 등의 유지보수성 저하를 유발함
  • DI의 진짜 이점(테스트 대체, SOLID 원칙 준수, 모듈화)을 얻으려면 Hilt/Koin 문서를 철저히 분석해야 함

섹션별 세부 요약

1. 스코프 오해의 위험성

  • @Singleton 애노테이션은 Application 컴포넌트 또는 Activity의 생명주기와 결합되어야 함
  • 잘못된 스코프 설정은 메모리 누수 또는 네비게이션 오류를 유발할 수 있음
  • 예: @Singleton 클래스가 Activity 생명주기와 맞지 않으면 불필요한 context 유지

2. 과도한 주입의 문제점

  • 모든 클래스에 @Inject 적용 시 의존성 결합도 증가, 의존성 숨김 발생
  • 해결 방안:
  • 생성자 주입은 핵심 의존성에 한해 사용
  • 수동 DI는 작은 모듈 또는 테스트 케이스에 추천

3. DI의 진짜 이점 활용 방법

  • 테스트 용이성: DI로 API/DB 의존성을 교체 가능
  • SOLID 원칙 준수: 인터페이스 중심 설계 촉진
  • 모듈화: 느슨한 결합 구조를 강제
  • 필수 조건:
  • 컴포넌트 계층 구조 이해
  • 스코프 생명주기 관리
  • Assisted Injection 활용

4. 수동 DI부터 시작하는 방법

  • 예시:

```kotlin

class UserRepository(private val api: UserApi) { ... }

val api = Retrofit.Builder().build().create(UserApi::class.java)

val repo = UserRepository(api)

```

  • 이 방식은 DI 프레임워크 내부 동작 원리를 이해하는 데 유리

5. 문서 중심의 학습 전략

  • 블로그보다 공식 문서를 우선적으로 참조 (예: Hilt 공식 문서)
  • 과거 템플릿 기반 설정오래된 실천을 반영할 수 있음

6. DI 프레임워크 사용 전략

  • 핵심 의존성: 생성자 주입 사용
  • 필요 시만 @Binds/@Provides 사용
  • 모든 화면에 @AndroidEntryPoint 사용은 피하고 ViewModel + Factory 패턴 적용

7. DI 프레임워크 사용을 피해야 할 경우

  • 작은 앱/프로토타입: 수동 DI로 중복 제거
  • 분석/로깅 모듈: 정적 클래스로 충분
  • 복잡한 로직: Factory 패턴으로 투명성 확보

결론

  • DI 프레임워크(Hilt/Koin)원리 이해 후 사용해야 실무적 이점을 얻을 수 있음
  • 수동 DI부터 시작하고, 공식 문서를 철저히 분석해야 함
  • 과도한 DI는 오히려 유지보수성 저하를 유발하므로 전략적 사용이 필수적임