DTO, DAO

DTO(Data Transfer Object)

“데이터를 나르는 택배 상자📦”

  • 정의 : 계층 간 데이터 교환을 위해 사용하는 객체
  • 특징 :
    • 로직이 없어요 : 오직 getter/setter만 가지며, 데이터 가공 로직을 포함하지 않습니다.
    • 순수 데이터 : DB나 네트워크에서 받은 원시 데이터를 담고 있습니다.

iOS에서는 서버에서 JSON을 받아올 때 정의하는 Codable이 대표적인 DTO입니다.

DAO(Data Access Object)

“DB 관리자🗄️”

  • 정의 : 실제로 DB나 데이터 저장소에 접근해서 데이터를 조작하는 객체
  • 특징 :
    • CRUD 기능을 해요 : 데이터 생성/읽기/수정/삭제 작업을 수행하는 실직적인 로직을 담당합니다.
    • 연결 담당 : 비즈니스 로직 계능이 DB 연결 방식을 몰라도 되도록 추상화 해줍니다.

iOS에서는 Repository 패턴이나 Manager 클래스 내부에서 API를 호출하거나 CoreData에 접근하는 코드가 해당됩니다.

Entity

”너는 너고, 나는 나야🆔”

  • 정의 : 식별자(ID)가 있는 객체
  • 특징
    • 식별 가능 : 고유한 id를 갖습니다.
    • 변경 가능(Mutable)
    • 생명 주기 : 생성되고, 변경되고, 소멸되는 과정이 있습니다.

iOS에서는 Identifiable 채택한 모델이 대표적이라고 하지만, Identifiable을 채택하지 않거나 id를 직접 정의하지 않아도 객체 인스턴스마다 고유성이 존재*한다면 Entity입니다.

대표적으로 ViewModel에서 취급하는 Domain Entity가 해당됩니다.

VO(Value Object)

“빨간색은 그냥 빨간색🎨”

  • 정의 : 값(Value) 자체가 중요한 객체로, 속성 값이 모두 같으면 같은 객체
  • 특징
    • 불변(Immutable) : 한번 생성되면 값을 바꿀 수 없습니다.
    • 동등성 : 다른 인스턴스여도 값이 같으면 같은 객체입니다.
    • 자가 유효성 검증 : 생성될 때 값의 유효성을 검사하는 로직이 포함되기도 합니다.

iOS에서는 Equatable 프로토콜을 채택한 모델이 대표적입니다.

// 빨간색은 그냥 빨간색입니다. ID가 필요 없어요.
// 값만 같으면 같은 색상으로 취급
struct ColorVO: Equatable {
    let r: Double
    let g: Double
    let b: Double
}

DTO vs Entity 최종 정리 🧹

구분DTOEntity
목적데이터 전달고유한 사물/개념
식별자(ID)없음필수(고유성은 필요함)
로직없음(getter/setter만)가공 로직 있음