Core Data와 DTO 변환 작업

버질·2024년 12월 19일

오늘 배운 것

Core Data 엔티티와 DTO 변환 구현
Core Data 엔티티에서 DTO(Data Transfer Object)로 변환하는 메서드(toDTO())를 구현하여 데이터 접근 및 전환의 유연성을 높였다.
DTO를 통해 엔티티와 UI/네트워크 로직 간의 의존성을 줄이는 방법을 배웠다.

CoreDataManager와 Kickboard+CoreDataProperties 수정
Core Data Manager에서 Kickboard 엔티티를 KickboardDTO로 변환하기 위해 Kickboard 클래스에 toDTO() 메서드를 추가했다.
기존 Core Data 엔티티의 확장을 통해 DTO 변환 로직을 깔끔하게 분리할 수 있음을 확인했다.

코드 변경 사항

1. Core Data Manager (CoreDataManager.swift)
기존 fetchKickboardDTOs() 메서드에서 발생한 오류:

Value of type 'Kickboard' has no member 'toDTO'

해결 방법: Kickboard 클래스에 toDTO() 메서드를 추가하여 DTO로 변환하는 로직을 정의했다.

func fetchKickboardDTOs() -> [KickboardDTO] {
    return fetchKickboards().map { $0.toDTO() }
}

2. DTO 변환 로직 (Kickboard+CoreDataProperties.swift)

Kickboard 엔티티를 DTO로 변환하기 위해 extension으로 toDTO() 메서드를 추가했다.

extension Kickboard {
    func toDTO() -> KickboardDTO {
        return KickboardDTO(
            nickName: self.nickName,
            isSaddled: self.isSaddled,
            isOccupied: self.isOccupied,
            startTime: self.startTime,
            endTime: self.endTime,
            latitude: self.latitude,
            longitude: self.longitude,
            address: self.address
        )
    }
}

오늘 배운 교훈

DTO의 필요성
DTO는 Core Data 엔티티를 직접 노출하지 않도록 하며, 데이터 구조 변경이 필요한 경우에도 코드를 더 유연하게 유지할 수 있다.
특히 UI와 네트워크 레이어 간의 데이터 이동에서 DTO가 효율적으로 사용된다.

Core Data 엔티티 확장
Core Data 엔티티에 extension을 통해 변환 로직(toDTO)을 추가하면, 코드 중복을 줄이고 변환 과정을 깔끔하게 유지할 수 있다.

유지보수성 향상
CoreDataManager와 Kickboard 엔티티를 분리하여 SRP(단일 책임 원칙)을 지켰고, 각각의 역할에 집중할 수 있었다.

앞으로 적용할 방향

다른 엔티티에도 확장 적용
현재는 Kickboard 엔티티에만 toDTO를 추가했지만, 다른 Core Data 엔티티에도 동일한 패턴을 적용해 일관성을 유지하자.

테스트 코드 작성
toDTO() 및 DTO 변환 로직에 대한 테스트 코드를 작성해 변환 과정의 안정성을 확인할 예정이다.

리팩토링 대상 탐색
Core Data와 DTO 간의 변환을 더 효율적으로 구현할 수 있는 디자인 패턴(예: Repository 패턴)을 조사하고 적용해볼 계획이다.

profile
iOS Developer · SwiftUI & UIKit '가끔 되고 가끔 안 되는' 문제를 뿌리부터 잡습니다.

0개의 댓글