안드로이드 프로젝트를 하다보면 서버(remote)와 통신해서 데이터를 가지고 오거나 로컬(room)에서 데이터를 가지고 온다. 이때 xDto 클래스나 xDao 클래스, 그리고 entity를 만나게 되는데, 왠지 모르게 이 개념들이 자꾸 헷갈리고 바로 떠오르지 않아서 한번 정리해서 기억해두고자 이 포스트를 작성하게 되었다.
필자가 안드로이드 프로젝트를 진행하면서 느끼고 경험한 대로 쓴 내용이라서 잘못된 내용이 포함되어있을 수도 있습니다. 마음껏 피드백 부탁드립니다🙏
DTO는 말 그대로 "데이터 전송 객체"이다. 즉, 서버로부터 데이터를 전송하거나 수신할 때 DTO를 사용한다.
// 예시
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)
}
"실제로 Database에 접근하는 객체"를 의미한다. 즉, Database에 데이터를 CRUD하는 인터페이스 역할을 한다.
// 예시
@Dao
interface UserDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertUser(user: UserEntity)
@Delete
suspend fun deleteUser(user: UserEntity)
...
}
"실제 Database의 테이블과 매칭되는 클래스"를 의미한다. 즉, 데이터베이스에서 데이터를 가져오거나, 데이터베이스에 데이터를 저장할 때 사용하는 클래스이다.
// 예시
@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)
}