Android

UseCase

Dean83 2023. 1. 26. 15:51

UseCase 라고 하면, 소프트웨어 공학에서 주로 사용되던 개념이다. FlowChart 나 Class Diagram 처럼
설계를 할때 사용되던 한 타입이었다. 

 

주로 기능의 흐름을 표현하는 용도로 많이 사용되었다. 예를들면 사용자가 A 라는 동작을 했을때 처리, 
B 라는 동작을 했을때 처리 등...

 

안드로이드에도 UseCase 를 코드에 접목 시켜 처리한다는 글을 봤다. 해당 내용을 정리하고자 작성한다. 

 

 

안드로이드에서 UseCase도 기본 맥락은 동일하다. 특정 요청이나 동작 별로 UseCase 클래스를 생성하고, 

처리를 하는 방법이다. 예를들자면 유저 정보를 조회하는 요청에 대하여 UseCase를 생성하고, 내부에 유저 정보를 
조회하여 리턴하는 코드를 작성한다. 사용처에서는 UseCase 함수를 호출하여 유저 정보를 취득한다. 

 

좀더 프로그래밍 적으로 요약 설명을 하자면, 

1. Repository 에 UserData를 가져오는 함수 구현

2. UseCase 클래스 생성 -> 함수 생성 -> 1. 에서 만든 Repository 함수 호출
3. ViewModel 에서 2. 의 UseCase 함수 호출

왜 복잡하게 1 depth 를 더 들어가는지 의문일 것이다. 그냥 ViewModel 에서 1. 의 Repository 함수 호출하면 되잖는가?

 

그 이유는, 만일 Repository의 해당 함수를 여러곳에서 호출하고 있을경우, Repository가 변경되면 코드를 바꿔야 할

곳이 엄청나게 증가한다는 것이다. 

UseCase를 사용할 경우에는 UseCase 에서만 수정하면 끝날 수도 있다는 것이다. 

 

이 부분은 이해는 갔으나 실질적으로 사용하지는 않을것 같다. 그 이유는, 

 

1. 보통 API는 기능별로 분리되어 있어서 화면별로 중복 호출되는 경우가 잘 없다. 

2. 만일 공통으로 쓰는 데이터가 있을경우, 한번 호출하여 메모리에 저장해 두고, 다른곳에서 쓰는 경우가 많다.

3. 1번과 2번의 경우가 아니어서 UseCase를 만들었다 하더라도, Repository가 변경되면 UseCase를 변경한다.
     이 경우, UseCase를 호출하는 각 ViewModel도 수정할 가능성이 높다. (예 : 리턴값 변경)
      이렇게 되면 UseCase를 쓸 이유가 없다. 

 

위와같은 이유로 UseCase 개념만 알고 넘어가려고 한다. 

 

사용법은 따로 기술하지 않는다. UseCase 개념이므로 구현방법은 많다. 단지 Repository를 한번 더 감싸는 클래스가 있다는 정도이다.