Apple is Apple
Published 2023. 11. 30. 19:58
2023-11-30 TIL

안티 패턴

안티 패턴이란?

안티패턴(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
profile

Apple is Apple

@mjjjjjj