인프런 커뮤니티 질문&답변

jminie님의 프로필 이미지
jminie

작성한 질문수

냉동코더의 알기 쉬운 Modern Android Development 입문

Dependency Injection 기초

ViewModel이 RepositoryImpl이 아니라 Repository를 생성자로 가지고 있는 것에 대한 질문

작성

·

740

0

제목 그대로 ViewModel이 RepositoryImpl(구현체)이 아니라 Repository(인터페이스)를 생성자로 가지고 있는 것은 SOLID 원칙 중 어느 원칙을 준수하기 위함인지가 궁금합니다.

답변 3

0

냉동코더님의 프로필 이미지
냉동코더
지식공유자

이렇게 구현하면 리포지토리 구현체를 다른 것으로 갈아끼우기가 편해지니까 굳이 따지자면 개방폐쇄원칙을 지킨 것이 되겠네요. 이렇게 작은 앱에서는 딱히 그래야 할 필요는 없지만요 :)

0

jminie님의 프로필 이미지
jminie
질문자

오 네 Repository와 RepositoryImpl을 연결하는 과정에서 Hilt의 동작방식은 알겠습니다!

그런데 제가 궁금한 것은 Hilt에 대한 부분이 아니라 ViweModel에서 생성자로 RepositoryImpl(구현체 클래스) Repository(인터페이스)를 가지는 것이 SOLID에서 무슨 원칙을 준수하기 위함인지가 궁금합니다! :)

0

냉동코더님의 프로필 이미지
냉동코더
지식공유자

di 패키지의 RepositoryModule을 보시면 힐트가 주입할 리포지토리 인스턴스는 다음과 같이 정의됩니다.

    @Singleton
    @Binds
    abstract fun bindBookSearchRepository(
        bookSearchRepositoryImpl: BookSearchRepositoryImpl,
    ): BookSearchRepository

인터페이스 형식을 주입하기 위해 @Binds를 사용하긴 하지만, 실제로는 인터페이스의 구현체인 BookSearchRepositoryImpl이 주입되는 것입니다. Hilt 동작방식이 좀 헷갈리게 되어있죠.

jminie님의 프로필 이미지
jminie

작성한 질문수

질문하기