서론
프로그래밍에서 한 번쯤은 접해봤을 DTO, DAO, Entity에 대한 개념을 정리해보려 한다.
클린 아키텍처 적용 시 헷갈리면 안 되는 개념이기 때문에 중요하다고 생각하는 개념이다.
DTO(Data Transfer Object)
DTO는 단어 그대로 데이터 전송 객체를 의미한다. API 호출 시 response 받는 데이터이다.
- 계층 간의 데이터 교환을 하기 위해 사용하는 객체
- API 호출 시 서버로부터 받은 JSON 형태의 데이터를 매핑할 수 있는 data class
- 클린 아키텍처의 data 모듈에 model 클래스에 해당
- 화면에 노출시키지 않는 data가 포함된다면 domain 모듈의 model에 필요한 data만 mapping 하는 작업이 필요함
smaple api : https://jsonplaceholder.typicode.com/posts
data class PostModel(
val userId: Int,
val id: Int,
val title: String,
val body: String
)
DAO(Data Acess Object)
DAO는 데이터 베이스에 접근하는 객체를 의미한다. 즉, Database에 CRUD 작업을 수행하는 인터페이스 역할을 한다.
- 데이터베이스에 접근하기 위한 로직과 비즈니스 로직을 분리하기 위해 사용
- SQLite(Room)을 사용할 때 DAO를 사용
@Dao
interface PostDao {
@Insert
fun insertPost(post: Post)
@Query("SELECT * FROM posts")
fun getAll(): List<Post>
}
Entity(tableName = "posts")
실제 Database에 테이블과 매칭되는 클래스를 의미한다.
- DTO와 유사함(API response data는 DTO, Database data는 Entity)
- DTO와 마찬가지로, 화면에 노출시키지 않는 data가 포함된다면 domain 모듈의 model에 필요한 data만 mapping 하는 작업이 필요함
@Entity
data class Post(
@PrimaryKey
val id: Int,
val userId: Int,
val title: String,
val body: String
)