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

두잇베스트님의 프로필 이미지

작성한 질문수

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

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

Order 엔티티 setter에 대해서 질문드립니다.

20.11.03 15:38 작성

·

212

2

강사님께서 되도록 setter 메소드를 생성하지 말라고 하셨는데

createOrder 메소드에서 편의 메소드를 제외하고,

setStatus, setOrderDate를 통해서 값을 설정하였습니다.

이 강의는 setter는 열었지만 , 되도록이면 status와 orderdate는  order 객체를 생성할시 생성자로 값 설정해주면 좋다는 의미신가요? 

답변 1

5

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

2020. 11. 03. 22:49

안녕하세요. hangs0908님

강의는 설명을 편리하게 하기 위해 setter를 열였지만, 실무에서는 가급적 setter를 열지 말라는 의미입니다.

생성자에서 완료할 수 있는 것들은 최대한 생성자에서 완료하고, 변경할 일이 없는 데이터는 특히 setter를 열면 안됩니다. 이렇게 열어두면 누군가 다른 개발자가 막 호출할 수 있겠지요? 그러면 의도하지 않은 버그가 발생할 수 있습니다.

추가로 setter라는 의미는 멤버변수를 그대로 노출하는 의미가 강한데요. 변경할 일이 있으면 그에 맞는 비즈니스 메서드 이름을 주시는 것을 권장합니다.

예를 들어서 주문상태가 접수로 변경되면 다음과 같이 처리하는 것이 더 명확합니다.

public void accept() {

  this.status = ACCPET;

}

감사합니다.