[Android] DTO와 DAO, 그리고 Entity

ddanglehee·2023년 3월 7일
1

안드로이드

목록 보기
1/2

안드로이드 프로젝트를 하다보면 서버(remote)와 통신해서 데이터를 가지고 오거나 로컬(room)에서 데이터를 가지고 온다. 이때 xDto 클래스나 xDao 클래스, 그리고 entity를 만나게 되는데, 왠지 모르게 이 개념들이 자꾸 헷갈리고 바로 떠오르지 않아서 한번 정리해서 기억해두고자 이 포스트를 작성하게 되었다.

필자가 안드로이드 프로젝트를 진행하면서 느끼고 경험한 대로 쓴 내용이라서 잘못된 내용이 포함되어있을 수도 있습니다. 마음껏 피드백 부탁드립니다🙏

📌 DTO (Data Transfer Object)

DTO는 말 그대로 "데이터 전송 객체"이다. 즉, 서버로부터 데이터를 전송하거나 수신할 때 DTO를 사용한다.

  • 서버로부터 JSON 형태로 데이터를 받아왔을 때 바로 매핑할 수 있는 객체
  • 화면에 띄우지 않아도 되는 정보들도 모두 포함하기 때문에, 프로젝트에서 사용하기 위해서는 화면에 보여줄 정보만으로 이루어진 객체로 매핑하는 과정이 필요하다.
// 예시
data class UserInfoDto(
	val user: UserDto,
    val coupleInfo: CoupleInfoDto,
    val createdAt: String
) {
	// domain layer의 model class로의 매핑 함수
    fun toUserInfo(): UserInfo = User(user.toUser(), coupleInfo.toCoupleInfo(), createdAt)
}

📌 DAO (Data Access Object)

"실제로 Database에 접근하는 객체"를 의미한다. 즉, Database에 데이터를 CRUD하는 인터페이스 역할을 한다.

  • 안드로이드에서는 Room을 사용할 때 DAO를 사용한다.
// 예시
@Dao
interface UserDao {

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    suspend fun insertUser(user: UserEntity)

    @Delete
    suspend fun deleteUser(user: UserEntity)

    ...
}

📌 Entity class

"실제 Database의 테이블과 매칭되는 클래스"를 의미한다. 즉, 데이터베이스에서 데이터를 가져오거나, 데이터베이스에 데이터를 저장할 때 사용하는 클래스이다.

  • DTO와 같은 역할을 한다고 볼 수 있다.
  • 이 클래스 역시 화면에 보여줄 데이터로 이루어진 객체로 매핑하는 과정이 필요하다.
// 예시

@Entity
data class UserInfoEntity(
    val user: User,
    val coupleInfo: CoupleInfo,
    val createdAt: String,
    @PrimaryKey val id: Int? = null
) {
    fun toUserInfo(): UserInfo = UserInfo(user, coupleInfo, createdAt)
}
profile
잊고싶지 않은 것들을 기록해요✏️

0개의 댓글