작성
·
4.1K
0
친절한 답변 감사합니다.
Entity와 domain의 차이에 대해 질문 드립니다.
Entity와 domain이 같은 의미인줄 알았으나 구조를 보니 company_listing_entity와 company_listing(domain) 을 사용하는 것을 보고 다르게 사용 된다는 것을 알게 됐습니다.
Entity는 db에 접근하기 위해 사용 되는 domain?의 느낌이고 domain은 비지니스 로직을 수행하기 위한 객체로 느껴졌는데 이것이 맞는지 궁금합니다.
이전 강의인 클린 아키텍처에서는 Entity를 사용하지 않았는데 그 이유가 궁금합니다.
캐시로 사용되는 객체와 원격으로 사용되는 객체의 차이, 들어오는 값의 차이 등으로 인해 2개로 나눠서 관리하는 것으로 설명해주셨는데 하나의 파일로 관리가 되지 않나 싶어 혼동이 생깁니다. model 객체가 2개라고 생각이 들기도 합니다.
답변 1
3
아마 말씀하시는 domain 은 이 강의에서 domain 레이어의 model 클래스를 의미하는 것 같습니다.
도메인 레이어는 앱의 핵심 기능을 담당하는 곳이며 추상 클래스로 추상화 한 기능 클래스(레포지토리)와 화면에 표시하기 위한 모델 클래스로 구성됩니다. 기능은 데이터를 제공하는 형태인 경우 레포지토리 이름으로 만들고 그렇지 않으면 일반적인 클래스가 될 수도 있습니다. 이 강의에서는 레포지토리만 등장합니다.
모델 클래스는 화면에 표시하기 위해서 사용하기 좋게 정제화되어 있습니다. 리모트 데이터인 JSON 이나 로컬 데이터인 DB의 내용을 바로 모델 클래스로 변환하는 것이 간단한 경우도 있지만 쉽지 않은 경우도 많습니다. 이 강의에서는 후자를 다루고 있고, DB 같은 경우 모델 클래스를 그대로 사용하려고 한다면 DB를 sqflite로 할 경우와 hive를 쓸 경우 다른 방식의 코드로 엔터티를 구성해야 하고, 이는 테스트를 어렵게 만드는 요인이 됩니다. 때문에 먼저 Entity 객체로 DB 내용을 온전히 가져온 이후에 다시 모델 클래스로 변환하는 과정이 필요합니다.
UI 측에서는 도메인의 모델 클래스만 알면 되며, Entity 를 알 필요가 없습니다.
질문 1. 은 느끼고 계신 내용이 맞습니다.
질문 2.
이전 강의에서는 내용을 그대로 모델 클래스로 옮겨도 되는 간단한 경우를 예를 들었습니다. 느끼신 대로 로컬과 리모트 양쪽에서 바로 받는 모델 클래스가 각각 다릅니다. 이를 도메인 레이어의 모델 클래스로 담아서 활용하기에 모델 클래스로 통일 할 수도 있습니다. 앞서 말씀 드린 것 처럼 JSON의 구조가 복잡하거나, DB 라이브러리가 변경되어도 도메인 측에서는 변경이 없도록 하기 위함입니다. 상황에 따라서는 하나의 모델 클래스만 사용해도 되며, 이전 강의가 그렇습니다.
추상적이고 애매했던 질문이라고 생각했는데 친절하고 자세한 답변 감사드립니다. 애매했던 부분이 잘 해결 됐습니다.