이번 프로젝트를 진행하면서 usecase에서 invoke를 사용하여 ViewModel에서 코드를 작성하였는데 operator(연산자)와 invoke를 처음 써봐서 한번 알아보기로 하였다.
class LoginUseCase @Inject constructor(private val authRepository: AuthRepository) {
suspend operator fun invoke(email: String, password: String) : Flow<String> {
return authRepository.login(email, password)
}
}
clase LoginViewModel(
private val loginUseCase: LoginUseCase
): ViewModel() {
fun login(email: String, password: String) {
viewModelScope.launch() {
val getLoginInfo = loginUseCase(email, password)
...
}
}
}
operator fun과 invoke 키워드는 모두 연산자 오버로딩을 사용하기 위한 키워드입니다.
(연산자 오버로딩이란 다양한 연산자들(+, -, *, / 등등)을 재정의해서 사용할 수 있게 해주는 방법이라고 생각하시면 됩니다. )
코드의 간결함과 가독성을 높여주고 호출의 유연성이 생깁니다.
(loginUseCase() vs loginUseCase.invoke)
.
.
.