개인적인 용도의 정리 글이며, 틀릴 수도 있습니다.
참조글들을 보며 구현하면서 이해한 구조
Domain 레이어
- UseCase 클래스는 적절한 Repository 구현체를 주입받아 비즈니스 로직을 수행함.
- Repository의 구현 클래스는 Data 레이어에 있지만, UseCase는 그저 Repository 인터페이스를 사용하기 때문에 Data 레이어에 대한 의존성이 없음.
- Entity는 Domain 레이어 안에서 사용할 데이터 모델.
Data 레이어
- Domain 레이어에 있는 Repository 인터페이스를 구현하는 클래스가 있음.
- RepositoryImpl 클래스는 적절한 DataSource를 사용하여(주입받음) 기능을 구현한다.
- DataSource는 데이터를 가져올 수 있는 곳의 개수만큼 존재할 수 있음.
- DataModel은 Data 레이어 안에서 데이터베이스나 리모트에서 받는 Response에서 사용될 데이터 모델. Domain 레이어의 Entity와 헷갈릴 수 있지만 엄연히 다른 존재임.
- Mapper는 DataModel과 Entity를 서로 치환? 시켜주는 존재. Domain 레이어에서 DataModel을 사용할 수 없고, Data 레이어에서 Entity를 그대로 사용할 수 없기 때문에 Mapper가 필요하다.
Presentation 레이어
- ViewModel에서 UseCase들을 주입받아 사용한다. UseCase를 통해 데이터를 가져오거나 넘긴다.
- Activity나 Fragment에서는 ViewModel을 주입받아 DataBinding 같은걸 사용해서 화면에 데이터를 보여준다.
참조
https://jungwoon.github.io/android/2021/04/12/Android-CleanArchitecture.html
https://youngest-programming.tistory.com/484