-
[Android_MVVM_CleanArchitecture] 2. Domain Layer오픈소스 공부/Android_MVVM_CleanArchitecture 2024. 11. 21. 15:18
https://github.com/Gun-HelloWorld/Android_MVVM_CleanArchitecture
GitHub - Gun-HelloWorld/Android_MVVM_CleanArchitecture: Android MVVM Clean Architecture
Android MVVM Clean Architecture. Contribute to Gun-HelloWorld/Android_MVVM_CleanArchitecture development by creating an account on GitHub.
github.com
DataLayer 구성 :
Repository에서 RemoteDataSource와 LocalDataSource에서 가져온 데이터를 Mapper를 통해 앱에 알맞게 변환해주고 그것을 Usecase를 통해 가져온다
UseCase에서 특이하다고 생각했던 점은 operator 키워드와 invoke 함수를 사용한다.
operator 키워드
- 연산자 오버로딩을 지원하기 위해 사용된다.
data class Point(val x: Int, val y: Int) { operator fun plus(other: Point): Point { return Point(x + other.x, y + other.y) } } fun main() { val p1 = Point(1, 2) val p2 = Point(3, 4) val result = p1 + p2 // plus 함수가 호출됨 println(result) // Point(x=4, y=6) }
invoke 연산자
- 객체를 함수처럼 호출할 수 있게 해준다.
- operator fun invoke를 정의하면, 해당 객체를 함수 호출처럼 사용할 수 있다.
class Greeter(val greeting: String) { operator fun invoke(name: String) { println("$greeting, $name!") } } fun main() { val greeter = Greeter("Hello") greeter("World") // invoke 함수가 호출됨 // 출력: Hello, World! }
그래서 아래와 같이 사용 할 수 있다.
GetUseCase.GetDetailDataUseCase(contentId,contentType)
operator와 invoke 조합을 사용하는 주요 장점은 코드의 가독성과 사용성을 개선하고, 객체지향적 디자인과 함수형 스타일을 더 자연스럽게 조화시키는 데 있다고 한다.
참고로 invoke() 함수는 파라미터만 다르다면 여러개도 사용가능 하다.
class MultiInvoke { operator fun invoke(): String { return "No arguments" } operator fun invoke(name: String): String { return "Hello, $name!" } operator fun invoke(a: Int, b: Int): Int { return a + b } }
UseCase부분은 프로젝트가 커진다면 관심사 분리 차원에서 만드는 것이 좋은 것 같다. 하지만 아직 그렇게 큰 프로젝트를 경험해볼 기회가 없었기 때문에 어느 상황에서 있는게 좋을지는 잘 모르겠다.
'오픈소스 공부 > Android_MVVM_CleanArchitecture' 카테고리의 다른 글
[Android_MVVM_CleanArchitecture] 1. Data Layer (0) 2024.11.21