ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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부분은 프로젝트가 커진다면 관심사 분리 차원에서 만드는 것이 좋은 것 같다. 하지만 아직 그렇게 큰 프로젝트를 경험해볼 기회가 없었기 때문에 어느 상황에서 있는게 좋을지는 잘 모르겠다.

Designed by Tistory.