inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

dto에서 toEntity VS entity 안에 정적 팩토리 메서드

해결된 질문

1162

작성자 없음

1


@Service
public class MemberService {
    
    private final MemberRepository memberRepository;

    public void save(MemberDto memberDto) {
        Member member = memberDto.toEntity();
        memberRepository.save(member);
    }
}
@Service
public class MemberService {
    
    private final MemberRepository memberRepository;

    public void save(MemberDto memberDto) {
        Member member = member.createMember(memberDto);
        memberRepository.save(member);
    }
}

dto에서 toEntity 와 entity 안에 정적 팩토리 메서드 중 어떤 코드를 쓰는게 좋을가요?

의존성으로 보면 첫번째 코드가 맞는걸까요?

 

@springboot spring @entity @dto

답변 1

1

인프런 AI 인턴

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

안성훈님의 질문에 대해 답변드리겠습니다.

DTO에서 toEntity를 사용하는 방식과 엔티티 안에 있는 정적 팩토리 메서드를 사용하는 방식은 각각 장단점이 있습니다. 여기서 중요한 것은 의존성과 객체의 책임의 분리입니다.

첫 번째 코드(sample1)에서 memberDto.toEntity()를 사용하는 방식은 DTO가 엔티티로의 변환 책임을 가지고 있음을 의미합니다. 이 방식은 DTO와 엔티티 간의 결합도를 낮춰줄 수 있으며, 엔티티의 생성 로직이 변경되어도 DTO를 수정할 필요가 없어 엔티티와 DTO의 관심사를 분리할 수 있습니다.

두 번째 코드(sample2)에서 Member.createMember(memberDto)를 사용하는 방식은 엔티티 내에 정적 팩토리 메서드를 정의함으로써, 엔티티 생성의 책임을 엔티티 자체에 두는 방법입니다. 이 방식은 엔티티의 생성 로직을 엔티티 내부에 캡슐화함으로써 엔티티의 생성 방법이 변경되더라도 서비스 계층의 코드 변경을 줄일 수 있습니다. 하지만 이 경우 DTO가 엔티티의 생성 메서드에 의존하게 되어, 결합도가 높아질 수 있습니다.

따라서 선택 기준은 프로젝트의 필요에 따라 달라질 수 있습니다. 일반적으로 엔티티의 생성 로직이 복잡하거나 생성 방법이 자주 변경될 것으로 예상된다면, 엔티티 내에 정적 팩토리 메서드를 정의하는 것이 유리할 수 있습니다. 반면, DTO와 엔티티의 결합도를 낮추고 싶거나 엔티티의 생성 로직을 외부에 노출시키고 싶지 않다면 DTO에서 toEntity를 사용하는 것이 적합할 수 있습니다.

이 정보가 안성훈님의 질문에 도움이 되길 바랍니다.

HelloSpringApplication.java 클래스 실행 오류

0

11

1

build 시 에러 해결방법 공유(docker.desktop 업데이트 -> 의존성 버전 수정)

0

19

1

네이버 API | '검색 - 책' API 제공 중단

0

39

2

Part 2 듣기전 복습하던 중, 아키텍처에 관한 질문이 있습니다.

0

46

2

장치 의존성과 CSR

0

36

1

테스트는 인터페이스를 대상으로 만드는것에 대해 궁금한 점이 있습니다.

0

31

1

[영한님]Spring Boot 및 프로젝트 생성

0

55

2

JPA 엔티티로 만들었다고 기술종속이 아닌지에 대한 질문

0

55

3

강의 요청 문의

0

40

2

클로드코드 명령어-대화&세션관리 수업 자료

0

42

1

PlatformTransactionManager, ResourcelessTransactionManager 질문

1

67

2

자료 한번에 다운받기

0

33

1

스프링 빈 등록 방법 2가지 다 알아야하는 이유

0

59

1

mybatis 를 이용한 crud에서 insert에서 resultType='long" 이라고 하셨는데요,

0

27

1

설계 트레이드 오프 링크 접속 안됨

0

85

2

테스트 질문, 어떤것을 사용할것인것에 대해서

0

46

1

깃허브주소 궁금합니다.

0

36

2

mariaDB 설정

0

33

1

섹션4 퀴즈 오타있어요.

0

46

1

AWS 배포 성능테스트

0

75

2

퀴즈가 안열려요

0

76

2

7강 보고 있는데요.. 글자가 너무 작아요

0

43

1

트래잭션 전파 기본- 에 대한 개념 질문? 이렇게 생각해도 맞나요?

0

46

1

헥사고날 아키텍처와 DDD를 적용할 때, 화면에 강하게 연관된 조회 데이터를 어떻게 다루는 게 좋은지 궁금합니다.

0

130

2