DoTheBestMayB / UpbitAPI

업비트 API를 활용한 어플
1 stars 0 forks source link

Dagger Hilt 적용하기 #26

Closed DoTheBestMayB closed 2 years ago

DoTheBestMayB commented 2 years ago

UpbitRemoteDataSourceModule.kt 처럼 선언하면 Factory, UpbitDataModule.kt object 내부에 선언하면 Singleton 인가요? 그 외 다른 차이도 있는지 궁금합니다!

DoTheBestMayB commented 2 years ago

@BeokBeok 위에 질문이 너무 추상적이여서 수정하겠습니다!

UpbitDataModule.kt 내부에서 Hilt를 적용한 이유는 Data 모듈이 아닌 다른 모듈에서 internal 객체를 얻을 수 있게 하려고 이렇게 작성했습니다. UpbitRemoteDataSourceModule.kt와 같이 작성할 경우, internal이라면 다른 모듈에서 해당 객체를 직접 생성할 수가 없더라고요.

그래서 다른 모듈에서 internal 객체가 필요하다면 object 클래스에서 Hilt를 적용하는 형식으로 작성해야 한다고 이해했는데, 맞나요?

BeokBeok commented 2 years ago

@BeokBeok 위에 질문이 너무 추상적이여서 수정하겠습니다!

UpbitDataModule.kt 내부에서 Hilt를 적용한 이유는 Data 모듈이 아닌 다른 모듈에서 internal 객체를 얻을 수 있게 하려고 이렇게 작성했습니다. UpbitRemoteDataSourceModule.kt와 같이 작성할 경우, internal이라면 다른 모듈에서 해당 객체를 직접 생성할 수가 없더라고요.

그래서 다른 모듈에서 internal 객체가 필요하다면 object 클래스에서 Hilt를 적용하는 형식으로 작성해야 한다고 이해했는데, 맞나요?

질문의 의도를 잘 모르겠어요. 다른 모듈에서는 internal 객체를 얻을 수 있으면 안되고, interface를 통해서 접근이 가능해야합니다. issue에 적었듯이, Dagger관련 클래스들에 internal 키워드를 붙이는 것이 가능한 이유는, Dagger는 컴파일 시점에 의존성 주입 관련 코드를 생성하기 때문입니다. 그리고 모든 생성된 코드들은 app모듈에서 접근이 가능하기에 internal 키워드를 붙이는 것이 가능합니다.

BeokBeok commented 2 years ago

UpbitRemoteDataSourceModule.kt 처럼 선언하면 Factory, UpbitDataModule.kt object 내부에 선언하면 Singleton 인가요? 그 외 다른 차이도 있는지 궁금합니다!

https://github.com/DoTheBestMayB/UpbitAPI/pull/26#discussion_r857611239 을 참고해주세요.

DoTheBestMayB commented 2 years ago

@BeokBeok 위에 질문이 너무 추상적이여서 수정하겠습니다! UpbitDataModule.kt 내부에서 Hilt를 적용한 이유는 Data 모듈이 아닌 다른 모듈에서 internal 객체를 얻을 수 있게 하려고 이렇게 작성했습니다. UpbitRemoteDataSourceModule.kt와 같이 작성할 경우, internal이라면 다른 모듈에서 해당 객체를 직접 생성할 수가 없더라고요. 그래서 다른 모듈에서 internal 객체가 필요하다면 object 클래스에서 Hilt를 적용하는 형식으로 작성해야 한다고 이해했는데, 맞나요?

질문의 의도를 잘 모르겠어요. 다른 모듈에서는 internal 객체를 얻을 수 있으면 안되고, interface를 통해서 접근이 가능해야합니다. issue에 적었듯이, Dagger관련 클래스들에 internal 키워드를 붙이는 것이 가능한 이유는, Dagger는 컴파일 시점에 의존성 주입 관련 코드를 생성하기 때문입니다. 그리고 모든 생성된 코드들은 app모듈에서 접근이 가능하기에 internal 키워드를 붙이는 것이 가능합니다.

UpbitViewModelTest 함수에서 Hilt를 사용해 객체를 생성하려고 했는데, object를 사용하지 않고 UpbitRemoteDataSourceModule 와 같이 인터페이스로 Hilt를 선언하면 app 모듈에서 해당 객체를 생성할 수 없었습니다. 그래서 다른 모듈에서 Hilt가 적용된 객체에 접근하려면 object 클래스에서 Hilt를 적용해야 한다고 이해했습니다.

BeokBeok commented 2 years ago

@BeokBeok 위에 질문이 너무 추상적이여서 수정하겠습니다! UpbitDataModule.kt 내부에서 Hilt를 적용한 이유는 Data 모듈이 아닌 다른 모듈에서 internal 객체를 얻을 수 있게 하려고 이렇게 작성했습니다. UpbitRemoteDataSourceModule.kt와 같이 작성할 경우, internal이라면 다른 모듈에서 해당 객체를 직접 생성할 수가 없더라고요. 그래서 다른 모듈에서 internal 객체가 필요하다면 object 클래스에서 Hilt를 적용하는 형식으로 작성해야 한다고 이해했는데, 맞나요?

질문의 의도를 잘 모르겠어요. 다른 모듈에서는 internal 객체를 얻을 수 있으면 안되고, interface를 통해서 접근이 가능해야합니다. issue에 적었듯이, Dagger관련 클래스들에 internal 키워드를 붙이는 것이 가능한 이유는, Dagger는 컴파일 시점에 의존성 주입 관련 코드를 생성하기 때문입니다. 그리고 모든 생성된 코드들은 app모듈에서 접근이 가능하기에 internal 키워드를 붙이는 것이 가능합니다.

UpbitViewModelTest 함수에서 Hilt를 사용해 객체를 생성하려고 했는데, object를 사용하지 않고 UpbitRemoteDataSourceModule 와 같이 인터페이스로 Hilt를 선언하면 app 모듈에서 해당 객체를 생성할 수 없었습니다. 그래서 다른 모듈에서 Hilt가 적용된 객체에 접근하려면 object 클래스에서 Hilt를 적용해야 한다고 이히했습니다.

Hilt는 테스트 코드가 아닌 프로덕션 코드에만 활용한다고 생각해주세요.