• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

entity->dto 변환 질문입니다.

23.12.04 17:08 작성 조회수 498

0

data class BookHistoryResponse(
    val name: String,
    val isReturn : Boolean
){
    companion object {
        fun of(history: UserLoanHistory): BookHistoryResponse {
            return BookHistoryResponse(
                name = history.bookName,
                isReturn = history.isReturn
            )
        }
    }
}

현재 이코드 대신 확장함수를 이용해서

fun UserLoanHistory.toDto(): BookHistoryResponse{
    return BookHistoryResponse(
        name = this.bookName,
        isReturn = this.isReturn
    )
}
user.userLoanHistories.map{it.toDto()}

 

이와 같은 방식은 잘 사용하지 않는 방식인가요?

 

답변 2

·

답변을 작성해보세요.

1

안녕하세요! bayyyy님~!! 좋은 질문 감사드립니다~ 😊

결론부터 빠르게 말씀드리면, 확장 함수를 사용하신 그 방법도 꽤 자주 사용되는 방식입니다!

 

다만, DTO Entity 변환 방식을 한 프로젝트 내에서는 통일 하는 것이 좋은데요!

코틀린을 하시는 분들께서 자바를 하시던 경우가 많고, 자바는 확장 함수 라는 문법 자체가 없이, Converter 과정에서 보통 정적 팩토리 메소드를 사용하다보니, 정적 팩토리 메소드를 사용하는 경우가 더 많은 것 같습니다.

 

프로젝트 내에서만 통일된다면 큰 문제 없을 것 같습니다.

답변이 도움이 되었으면 좋겠습니다. 감사합니다!! 🙏🙏

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.12.06

안녕하세요, 인프런 AI 인턴입니다.

확장 함수를 사용하여 엔티티를 DTO로 변환하는 방식은 매우 일반적이며, 코틀린에서는 이 방식이 권장됩니다. 확장 함수는 기존 클래스를 확장하여 새로운 기능을 추가할 수 있는 코틀린의 기능으로, 기존 클래스를 수정하지 않고도 원하는 메서드를 추가할 수 있게 해 줍니다. 이는 코드의 결합을 줄이고, 가독성과 유지보수성을 향상시킬 수 있습니다.

주어진 UserLoanHistory 엔티티를 BookHistoryResponse로 변환하는 확장 함수 예제는 코틀린의 간결성과 확장성을 잘 보여주는 좋은 사례입니다. user.userLoanHistories.map{it.toDto()} 이런 코드를 통해 UserLoanHistory의 리스트를 BookHistoryResponse 리스트로 간단하게 변환할 수 있으며, 이는 코드를 더 간결하고 읽기 쉽게 만들어 줍니다.

따라서, 제시된 방식은 잘 사용하지 않는 방식이라기보다는 오히려 코틀린을 사용하는 많은 프로젝트에서 선호되는 코드 스타일입니다. 이러한 접근 방식은 코드의 재사용성을 높이고 명확한 구조를 유지하는 데 도움이 됩니다.

bayyyy님의 경우에도 이러한 방식을 통해 엔티티와 DTO 간 변환을 처리할 수 있어 좋은 선택이 되실 것입니다.