작성
·
491
1
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예
강의에서는 setter를 사용하지 않고 하는게 바람직하다고 언급하신적이 있습니다.
public static OrderItem createOrderItem(Item item,int orderPrice,int count){
OrderItem orderItem=new OrderItem();
orderItem.setItem(item);
orderItem.setOrderPrice(orderPrice);
orderItem.setCount(count);
item.removeStock(count);
return orderItem;
}
이것은 영한님 강의의 OrderItem이라는 중간테이블을 생성해주는 것이였습니다. 위에서 set,set,set 이 많이 나오는데 이게 아마 builer패턴? 으로 위 코드에서 setter를 지워주는것 맞져??
그러면
Order의 연관관계 편의 메서드인 아래 코드는 또 어떻게 바꿔야 할까
public void addOrderItem(OrderItem orderItem){
orderItem.setOrder(this);
this.orderItems.add(orderItem);
}
이거는 또 어떻게 바꿔야 할까요?? 실무에서는 이런 것까지도 set을 안쓰나요? 아니면 뭐set 대신 이름만 inItOrder로 바꿔야 하는 것인가요?
질문 2) 솔직히 set을 왜 안써야 하는지 감이 안옵니다. 다른 개발자가 무작정 set을 호출할수 있다는게 단점이라고 하신 것 같은데 그러면 뭐 cancelOrder 이런 메서드로 바꾸면 다른 개발자가 이걸 호출할수도 있지 않나요??
질문 3) 가끔 보면 이런 코드가 있습니다.
public void initPost(Post post) {
if(this.post == null) this.post = post;
}
이것은 init 이기때문에 단순히 null 인지 체크해주는 것인가요??
가끔 이렇게 매개변수들어온게 null 인지 체크하는 로직이 들어있는게 있더라고요!
답변 1
0
안녕하세요. dionisos198님, 공식 서포터즈 코즈위버입니다.
실무에서도 연관관계는 setter 를 주입하여 간편하게 처리합니다. 강의처럼 연관관계 편의메서드를 작성하여 서로의 setter로 관계를 맺지요.
그 외에 사용자에 의해 변경되는 값의 경우는 public 메서드 changeXxx() 등을 작성하여 처리하는 방법도 있습니다. changeXxx() 메서드는 단순히 값을 처리하는 것 외에 추가 동작(가령 회원 상태를 가입완료 등으로 업데이트 하는 경우 회원의 상태 + 가입완료 일시 등을 처리하는 코드)을 처리하도록 합니다.
그 외에는 클라이언트에게 받은 DTO를 이용하여 엔터티(영속성 컨텍스트로 관리하지 않는, 그냥 엔터티)를 생성하여 처리하기도 합니다. 이 때에는 DTO를 받아 Builder 형태로 엔터티를 생성, 반환하는 형태로 사용합니다. 이후 이렇게 받은 엔터티를 Repository로 저장하여 영속화 합니다.
감사합니다.
답변이 된것도 있고 안된것도 있습니다!
위 코드를 빌더 패턴으로 바꿀시 어떻게 될까에 대한 답변도 필요하고 3번에 대한 답변도 알려주실수 있나요?
중간테이블을 static 클래스대신 생성자에 builder 를 추가해서 사용하고 연관관계 편의 메서드에는 set 대신 init 등을 사용하면 된다는 말씀이신지 코드로의 답변이해가 필요하고 영한님이 setter를 사용하지 말라고 하셨는데 그 이유가 공감이 안되어서 그거에 대한 궁금증도 해결이 덜되었습니다. 이건 번외 문제인데 3번 같은 경우 가끔씩 null 체크해주는 로직이 보이는데 그런것은 왜그런 것일까요?