인프런 커뮤니티 질문&답변

Jay님의 프로필 이미지
Jay

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

주문, 주문상품 엔티티 개발

주문과 주문상품에만 생성 메서드가 있는 이유는 뭔가요?

작성

·

280

6

다른 엔티티들과 달리, 주문과 주문상품은 상태값 외에는 바뀔일이 없기 때문에 생성 메서드를 사용한게 맞는지 궁금합니다. (사실 이 부분도 의문입니다. 다른 엔티티들에도 유지보수를 위해 생성 메서드를 사용하는게 맞지 않을까 싶습니다.)

예제에서 주문과 주문상품에서도 @Setter를 사용하고 있기에 언제든 값이 변경될 수 있는 점 때문에 제가 생각한게 틀린건지 맞는건지 잘 모르겠습니다.

답변 1

22

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. Jay님^^ 좋은 질문입니다.

우선 상태값이 바뀔일이 없기 때문에 생성 메서드를 사용한 것은 아닙니다.

추가로 @Setter를 사용한 이유는 예제를 단순화 하기 위해서 입니다. 실무에서는 강의에서 말씀드린 것 처럼, 엔티티에 @Setter를 최대한 사용하지 않는 것이 좋습니다.

객체를 생성하는 방법은 여러가지가 있습니다.

1. 단순히 new 를 사용해서 생성하는 방법

2. 생성 메서드를 사용하는 방법

3. 빌더를 사용하는 방법

4. 별도의 생성 클래스를 사용하는 방법 등등

(일반적으로 갈수록 복잡도가 높아집니다.)

단순히 new를 사용하는 방법보다는 생성 메서드를 사용하는 것이 메서드 이름을 통해 생성 의도를 나타낼 수 있기 때문에 더 나은 선택일 확율이 높습니다.

그런데 너무너무 단순한 객체를 생성할 때도 꼭 생성 메서드를 만들어야 할까요?

결국 이런 작은 선택에도 트레이드 오프가 있습니다.

주문과 주문상품은 어느정도 복잡성을 가지고 있기 때문에, 생성 메서드를 사용했습니다. 하지만 거의 사용하지 않는 정말 단순한 엔티티라면 자바가 기본으로 제공하는 new 를 사용하는게 더 좋겠지요. 이렇게 한 프로젝트 안에서도 객체를 생성하는데 드는 복잡도에 따라서 다양한 선택을 해야 합니다.

이럴때 제가 가장 추천하는 방법은 가장 단순한 방법을 사용하고, 필요하면 리펙토링 한다 입니다^^

도움이 되셨길 바래요.

Jay님의 프로필 이미지
Jay

작성한 질문수

질문하기