요즘 클린 아키텍처에 대해 공부하고 있는데 참고하고 있는 프로젝트에서 DTO와 DAO가 나와서 궁금해졌습니다. 그래서 이번 글에서는 DTO와 DAO 그리고 같이 언급되는 VO에 대해서 알아보겠습니다.
DTO는 데이터 전송 객체로 클라이언트와 서버 간에 데이터를 주고받을 때 사용됩니다. 데이터베이스와의 직접적인 연결을 피하고, 필요한 데이터만을 포함하여 비즈니스 로직 계층에 전달합니다. 주로 네트워크를 통해 데이터를 전송할 때, 여러 개의 데이터를 하나의 객체로 묶어 전송하는 데 유용합니다.
struct UserDTO: Identifiable {
var id: UUID = UUID()
var username: String
var email: String
}
DAO는 데이터 접근 객체로, 데이터베이스와의 상호작용을 담당합니다. 데이터베이스에 대한 CRUD(Create, Read, Update, Delete) 작업을 수행하며, 데이터베이스와의 연결을 관리합니다. 주요 목적은 데이터베이스와의 상호작용을 캡슐화하여 비즈니스 로직과 데이터 접근 로직을 분리하는 것입니다. 이를 통해 코드의 유지보수성과 테스트 용이성을 높일 수 있습니다.
import Foundation
class UserDAO {
private var users: [UserDTO] = []
func save(user: UserDTO) {
users.append(user)
}
func findById(id: UUID) -> UserDTO? {
return users.first { $0.id == id }
}
func findAll() -> [UserDTO] {
return users
}
func update(user: UserDTO) {
if let index = users.firstIndex(where: { $0.id == user.id }) {
users[index] = user
}
}
func delete(id: UUID) {
users.removeAll { $0.id == id }
}
}
VO는 값 객체로, 주로 불변성을 가지며, 특정한 값을 표현하는 데 사용됩니다. 데이터의 의미를 명확히 하고, 데이터의 무결성을 보장하는 데 도움을 줍니다. 주로 DTO와 함께 사용되어, 데이터의 의미를 명확히 하고, 데이터 전송 시의 혼란을 줄이는 역할을 합니다.