Swift - DTO, DAO, VO

Marble·2025년 1월 22일

Clean Architecture

목록 보기
5/5

요즘 클린 아키텍처에 대해 공부하고 있는데 참고하고 있는 프로젝트에서 DTO와 DAO가 나와서 궁금해졌습니다. 그래서 이번 글에서는 DTO와 DAO 그리고 같이 언급되는 VO에 대해서 알아보겠습니다.

DTO (Data Transfer Object)

DTO는 데이터 전송 객체로 클라이언트와 서버 간에 데이터를 주고받을 때 사용됩니다. 데이터베이스와의 직접적인 연결을 피하고, 필요한 데이터만을 포함하여 비즈니스 로직 계층에 전달합니다. 주로 네트워크를 통해 데이터를 전송할 때, 여러 개의 데이터를 하나의 객체로 묶어 전송하는 데 유용합니다.

특징

  • 단순성: 데이터 전송을 위한 객체로, 복잡한 비즈니스 로직을 포함하지 않습니다. 필드와 그에 대한 getter/setter 메서드로 구성됩니다.
  • 직렬화 가능: 네트워크를 통해 전송되기 때문에 직렬화(Serialization)와 역직렬화(Deserialization)가 가능해야 합니다.
  • 데이터 집합: 여러 개의 관련 데이터를 하나의 객체로 묶어 전송할 수 있어, 네트워크 호출의 횟수를 줄일 수 있습니다.
struct UserDTO: Identifiable {
    var id: UUID = UUID()
    var username: String
    var email: String
}

DAO(Data Access Object)

DAO는 데이터 접근 객체로, 데이터베이스와의 상호작용을 담당합니다. 데이터베이스에 대한 CRUD(Create, Read, Update, Delete) 작업을 수행하며, 데이터베이스와의 연결을 관리합니다. 주요 목적은 데이터베이스와의 상호작용을 캡슐화하여 비즈니스 로직과 데이터 접근 로직을 분리하는 것입니다. 이를 통해 코드의 유지보수성과 테스트 용이성을 높일 수 있습니다.

특징

  • 추상화: 데이터베이스와의 상호작용을 추상화하여, 비즈니스 로직이 데이터 접근 방식에 의존하지 않도록 합니다.
  • CRUD 메서드: 데이터베이스에 대한 CRUD 작업을 수행하는 메서드를 제공합니다.
  • 유연성: 데이터베이스의 종류나 구조가 변경되더라도 비즈니스 로직에 미치는 영향을 최소화할 수 있습니다.
  • 테스트 용이성: 데이터 접근 로직을 분리함으로써, 단위 테스트를 쉽게 수행할 수 있습니다.
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(Value Object)

VO는 값 객체로, 주로 불변성을 가지며, 특정한 값을 표현하는 데 사용됩니다. 데이터의 의미를 명확히 하고, 데이터의 무결성을 보장하는 데 도움을 줍니다. 주로 DTO와 함께 사용되어, 데이터의 의미를 명확히 하고, 데이터 전송 시의 혼란을 줄이는 역할을 합니다.

특징

  • 불변성: 일반적으로 불변 객체로 설계되어, 생성 후 상태가 변경되지 않습니다. 이는 데이터의 일관성을 유지하는 데 도움이 됩니다.
  • 동등성: 값에 기반하여 동등성을 비교합니다. 즉, 두 VO 객체가 동일한 값을 가지면 동일한 것으로 간주됩니다.
  • 의미 있는 데이터 표현: 특정 개념이나 값을 나타내며, 여러 속성을 조합하여 의미 있는 정보를 제공합니다.
  • 비즈니스 규칙 포함 가능: VO는 특정 비즈니스 규칙을 포함할 수 있으며, 데이터의 유효성을 검증하는 메서드를 가질 수 있습니다.


출처: https://gofo-coding.tistory.com/entry/Entity-DTO-DAO-VO

profile
개발자가 되고 싶은 공돌이

0개의 댓글