안티 패턴
안티 패턴이란?
안티패턴(anti-pattern)은 소프트웨어 공학 분야 용어이며, 실제 많이 사용되는 패턴이지만 비효율적이거나 비생산적인 패턴을 의미한다. 안티패턴은 1995년 앤드루 케이니그가 디자인 패턴을 참고하여 처음 사용한 말이다.
내가 사용한 안티 패턴
viewModelScope.launch(Dispatchers.IO) {
val travelers = homeRepository.getCalculationTravelers(
responseCount = 1000,
startDate = getPastDateString.first,
endDate = getPastDateString.second
)
when (travelers) {
// APIResponse가 안티 패턴으로 적용 됨
is APIResponse.Error -> {
_festivalUiState.postValue(HomeFestivalUiState.error())
}
is APIResponse.Success -> {
// 로직 수행 ~
_festivalUiState.postValue(HomeFestivalUiState(filteredFestival, false))
}
}
}
HomeViewModel 쪽의 로직을 작성 할 때, api에서 받아온 값에 대한 1차적인 처리를 해주려는 생각으로 APIResponse라는 클래스를 만들어서 Success, Error처리를 하려고 했다.
Coroutine에서는 내가 한 것처럼 Success, Error 처리를 할 수 있는 코드를 가지고 있다. runCatching이 Error가 발생하지 않는 이상 Success와 대응 할 것이고, Error가 발생하면 onFailure에 대응할 것이다.
의미적으로 같은 기능을 하는데, runCatching은 코드량을 줄고 단순화 하면서 코드를 보기 좋게 만든다.
runCatching {
// 실행 ~
}.onFailure {
// 실패했을 때 분기 되는 곳
}
runCatching 블럭을 사용하여 안티 패턴을 제거해보자.
runCatching {
viewModelScope.launch(Dispatchers.IO) {
// 로직 수행 ~
_festivalUiState.postValue(HomeFestivalUiState(filteredFestival, false))
}
}.onFailure {
_festivalUiState.postValue(HomeFestivalUiState.error())
}
라인 수도 5줄 가량 줄고, 분기 처리를 여러 번 나누지 않게 되었다.
Gradle - AGP - Java Version
'TIL' 카테고리의 다른 글
2023-12-11 (0) | 2023.12.11 |
---|---|
2023-12-06 (0) | 2023.12.06 |
2023-12-04 (0) | 2023.12.04 |
2023-12-01 (0) | 2023.12.01 |
2023-11-29 (0) | 2023.11.29 |