[기술 면접 질문] DI(Dependency Injection)

0

기술 면접 준비

목록 보기
13/19
post-thumbnail

[기술 면접 질문] DI(Dependency Injection)

📝요약

어떤 클래스가 객체를 만들기 위해 다른 객체를 필요로 할 때, 그 클래스는 다른 객체에 의존한다고 말한다. 의존성 주입이란 의존 대상인 객체를 클래스에 전달하는 디자인 패턴 중 하나이다. 의존성 주입의 방식으로는 생성자 파라미터로 객체를 넘겨주는 Construction Injection 방식과 setter로 객체를 프로퍼티로 설정해주는 Field Injection 방식이 있다. 의존성 주입 라이브러리로는 Dagger, Koin, Hilt가 있다.

📌참고자료

DI(Dependency Injection)

  • A 클래스가 객체를 만들기 위해 B를 필요로 할 때 = A는 B에 의존, B는 A의 의존 대상
  • A 클래스가 B를 얻어오는 방법
    • A 클래스 내부에서 B 직접 생성하기
    • A 클래스의 생성자 파라미터로 B 받아오기 = 의존성 주입(Construction Injection)
    • A 클래스의 프로퍼티 setter로 B 받아오기 = 의존성 주입(Field Injection)
  • 의존성 주입: A design pattern that allows an object to supply the dependencies of another object
  • 의존성 주입의 장점:
    • B를 재사용 쉬움
    • B를 테스트 쉬움
  • 의존성 주입의 단점:
    • 간단한 프로그램을 만들 때는 번거로움
    • 코드 가독성 나빠짐
  • (라이브러리 사용 없이) 수동 의존성 주입의 단점:
    • 여러 레이어를 가질 경우, 최상위 객체를 가지기 위해 그 아래 모든 계층의 객체 필요
    • 객체를 전달하기 전 종속성 생성 X 경우, 수명 직접 관리해야 (ex. lazy init)

의존성 주입 라이브러리

  • 의존성 주입 라이브러리 동작 방식
    • 런타임에 reflection을 기반으로 종속성 연결
    • 컴파일 타임에 DI 코드 생성해 종속성 연결

Dagger

  • 강력하고 빠른 의존성 주입 프레임워크
  • 컴파일 타임에 DI 코드 생성해 종속성 연결
  • 러닝 커브가 높고, 프로젝트 설정 까다로움

Koin

  • 러닝 커브가 낮아 쉽고 빠르게 적용 가능
  • Kotlin 개발 환경에 최적화
  • 런타임에 reflection을 기반으로 종속성 연결

Hilt

  • Dagger2 기반의 라이브러리, Dagger 보다 쉽고 표준화된 사용법
  • Android 클래스에 최적화
    • 장점이자 단점! 안드로이드 클래스 외 다른 클래스에 의존성 주입 필요한 경우, 부가적인 코드 필요
profile
Be able to be vulnerable, in search of truth

0개의 댓글