• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

Entity 내의 로직들, 생성 함수에 대한 질문

23.01.08 18:25 작성 조회수 1.02k

0

안녕하세요! 간단한 질문이 있어서 살짝 남겨보게 되었습니다.

1. 지금까지 JPA 강의를 들으면서 - "Entity 에는 Setter 를 열어두지 말고, Getter 만 열어둔채, 초기값 Setting 에는 생성자를 사용하라. 그리고 변경에 대해서 setter 가 필요하다면 그 때 열어두고, 연관관계에 대해 수정시 setting 외의 로직을 수행해야 하기 때문에 change, modify 등의 수식어를 사용해서 함수를 만들어라 ". 정도로 이해하고 있었습니다. 이 관점에서 createOrder() 함수는 설명해주신대로 그냥 Order 을 생성해주는 함수고, 초기값을 setting 해주는 함수인데, 이게 생성자와 어떤 점에서 다른지 이해가 잘 되지 못했습니다.

public Order(Member member, Delivery delivery, OrderItem ... orderItems){
    this.member = member;
    this.delivery = delivery;
    ... OrderItem for 문
    this.status = OrderStatus.ORDER;
    this.orderDate = LocalDateTime.now();
}

위처럼 그냥 생성만 해주는 함수와 어떤 차이가 있는지 이해를 못하였습니다 ㅠㅠ

2. 비즈니스 로직들을 Service 단에서 수행하지 않고, Entity Class에서 모두 짜는 이유가 잘 이해가 되지 않았습니다 ㅠ 애를 들면 cancel() 의 명령어 같은 경우,

~~ /orderItem/cancel/3 이런식으로 들어오게 된다면, Service Layer 에서 OrderItem 조회하고, Repository 를 호출하며 Order에 대한 \ 필요 로직 수행, Item에 대한 필요로직 수행을 하는것으로 생각을 했어서 그런 것 같습니다. 지금 현재 강의 부분과 같은 설계는 약간 영속성 컨텍스트를 계속 관리하면서 필요 SQL들이 자연스럽게 호출되게 하는 방식인 느낌인데 이런 방향이 맞을까요?

답변 1

답변을 작성해보세요.

1

y2gcoder님의 프로필

y2gcoder

2023.01.09

안녕하세요, 강우석 님. 공식 서포터즈 y2gcoder 입니다.

위처럼 그냥 생성만 해주는 함수와 어떤 차이가 있는지 이해를 못하였습니다 ㅠㅠ

createOrder는 말씀하신 것처럼 생성자와 역할이 똑같습니다. 생성자를 사용하지 않고 이렇게 생성하는 메서드를 따로 쓴 이유는, 생성자와 달리 이름을 줄 수 있어 메서드의 의도를 명확하게 표현할 수 있기 때문입니다. 실제로 생성자만이 아니라 해당 경우처럼 명확함을 위해 이름을 가진 메서드를 만들어 객체 생성의 역할을 하는 경우도 많이 있습니다.

 

비즈니스 로직들을 Service 단에서 수행하지 않고, Entity Class에서 모두 짜는 이유가 잘 이해가 되지 않았습니다

해당 부분은 다음 답변을 참고해주세요!


감사합니다.

start1234님의 프로필

start1234

2023.08.12

혹시 이것이 생성자를 사용하지 않고 정적 팩토리 메소드를 사용한 예시일까요..?