마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Domain 의 모델클래스는 데이터로 못보내나요?

0 추천
이전에 프래그먼트간에 Entity 클래스를 어떻게 전달하냐고 물었었는데

이후에 작성하면서 생각해보니까 Domain의 모델 클래스는 그럼 어떻게 전달하는지 궁금해졌습니다.

 

Domain 레이어는 안드로이드에 종속적이지않은 순수 코들린으로 이루어져있다고 하는데요,

 

A프래그먼트에서(정확히는 A의 레퍼지토리에서) 도메인 레이어의 User라는 모델 클래스를 리스트 형태로 생성해 B프래그먼트로 보낸다는 흐름이라고 가정하겠습니다.

SharedViewModel 는 상관없으니 제외하고
내비게이션 컴포넌트의 safeargs나 그외 프래그먼트의 bundle같은걸 사용할때는

보낼 클래스를 Parcelable(또는 @Parcelize)를 사용할 필요가 있습니다.

그런데 말했다시피 이 보낼 커스텀 클래스가 Domain 레이어에 속해있다고하면 이것은 Parcelable로 만들어버리면 이것은 아키텍쳐에 어긋나버리는데 Domain 레이어에 있는 모델 클래스들은 보낼수가 없는건지요?

지난번 알려주신 Mapper 클래스같은건 받아온 데이터를 DB에 저장시킨 후에 변환시키는거라서 좀 다른거같기도하고 잘모르겠어요..
codeslave (3,940 포인트) 님이 2022년 8월 21일 질문
codeslave님이 2022년 8월 21일 수정

1개의 답변

0 추천
먼저 도메인 레이어는 안드로이드 앱에서는 필요한지의 여부를 두고 커뮤니티 내에서도 논쟁이 많은 레이어입니다. 대부분의 앱이 대부분의 경우에 도메인 레이어에 해당하는 로직이 없는 경우가 많습니다.
이건 논외로 하고요...
화면 간 데이터의 전달은 원칙적으로는 ui 레이어에서 사용하는 데이터 클래스를 사용하는 것이 맞을 것 같습니다.한가지 이유 중 하나는 parcelable은 안드로이드에 종속적인 타입이기 때문입니다. 그리고 레이어별로 데이터 클래스가 분리되어 있다면 해당 레이어에 맞는 타입을 사용하는 것이 더 적합하겠죠.
그리고 이전에 말씀 드렸듯이 레이어 간 데이터 클래스는 mapper  등을 통해 변환해서 사용합니다.
spark (224,800 포인트) 님이 2022년 8월 21일 답변 1 신고
선생님 제가 이해가 잘 안가서 그러는데 언급하신 'ui레이어에서 사용하는 데이터 클래스' 라는 것이 정확하게 어떤건지 잘 이해가 가질 않습니다..
레이어 별로 데이터 클래스가 분리되어있다는 말씀이 presentation에까지 데이터클래스가 선언된것이 아니라 Domain, Data 레이어에만 모델 클래스가 선언되어있고 이것을 presentation 레이어에서 Mapper를 사용해서 쓰라는 말씀이신가요?

제가 궁금한것은 Mapper를 사용하라고 하시는데 결국 이것도 A 프래그먼트에서 B에서 데이터를 받아와야지 Mapper를 사용해서 알맞는 모델로 변환하는 것아닌가요?

추가로 제가 한 비슷한 질문에 대한 답변이 있는데 읽어보니 답변도 대충 선생님이 하신 말씀이랑 맥락이 비슷한것같은데 이걸 어떻게 활용하라는것인지 이해가 잘안갑니다..
https://github.com/antoniolg/clean-architecture/issues/1
해당 링크입니다.
네. 같은 맥락이구요, 해당 리포에서 mapper를 사용하는 부분을 확인해 보시구요. 이게 이해가 가시고 동의가 된다면 그렇게 사용하시구요, 그렇지 않다면, 그냥 님이 이해하는 선에서 작업을 하세요. Entity를 Parcelable이나 Serializable(이게 코드량이 더 적고, 안드로이드에 종속적이지 않은 인터페이스임)를 구현해서 사용하세요. 이렇게 사용하시다보면 어느순간 자연스럽게 왜 레이어간에 데이터 클래스를 공유하지 말라는지 자연스럽게 이해하는 순간이 옵니다. 안좋다고 하는 코드도 직접 짜봐야 좋다고 하는 코드와 구분이 가고 더 좋은 코드를 짜는데 도움이 됩니다.
감사합니다. 그런데 이건 추가적인 궁금증인데 대부분의 앱이 도메인 레이어에 해당하는 로직이 없는 경우가 많다고 하셨는데

이유는 무엇인가요? 안드로이드의 클린아키텍쳐에서 개발자문서에서까지 도메인 레이어를 정의하고 있는데 이유가 무엇인가요?

그리고 도메인 레이어가 없다면 UserCase라던지 Repository라던지 기존 도메인 레이어에서 정의하는것들은 어디에다가 하나요?
클린아키텍쳐 샘플을 확인해 보시면 대부분의 도메인 레이어는 데이터레이어를 그대로 호출하는 경우가 많습니다. 즉, 비지니스로직이라고 할 수 있는 것이 없는데 강제로 클린아키텍쳐를 적용하다 보니 그렇습니다. 개인적으로 모발앱에서의 클린아키텍쳐는 구글같은 아주 큰 사이즈가 아니라면 불필요한 컨텐츠를 팔아먹기 위한 사람들에 의해 시작된 오버 엔지니어링의 일종이라고 보고 있습니다. 클린이라기 보다는 괜히 복잡한...
아..그렇군요 그렇다면 선생님은 앱을 만드실때에 클린아키텍쳐로 3개의 레이어로 나뉘지 않고 MVVM같은 디자인패턴으로만 만드시나요?
현재 유지보수하는 앱은 클린아키텍쳐를 많이 채용했는데, 현재는 위에서 언급한대로 오버엔지니어링이란 생각이 많이 듭니다. 웬만한 앱은 그렇게 복잡한 아키텍쳐가 굳이 필요없어요. 클린아키텍쳐는 사실상 플랫폼 전체를 설계할 때 더 의미가 있지, 모발앱에는 일반적으로 적합하지 않다고 생각해요.
...