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 패턴)을 조사하고 적용해볼 계획이다.