작성
·
215
2
강사님께서 되도록 setter 메소드를 생성하지 말라고 하셨는데
createOrder 메소드에서 편의 메소드를 제외하고,
setStatus, setOrderDate를 통해서 값을 설정하였습니다.
이 강의는 setter는 열었지만 , 되도록이면 status와 orderdate는 order 객체를 생성할시 생성자로 값 설정해주면 좋다는 의미신가요?
답변 1
5
안녕하세요. hangs0908님
강의는 설명을 편리하게 하기 위해 setter를 열였지만, 실무에서는 가급적 setter를 열지 말라는 의미입니다.
생성자에서 완료할 수 있는 것들은 최대한 생성자에서 완료하고, 변경할 일이 없는 데이터는 특히 setter를 열면 안됩니다. 이렇게 열어두면 누군가 다른 개발자가 막 호출할 수 있겠지요? 그러면 의도하지 않은 버그가 발생할 수 있습니다.
추가로 setter라는 의미는 멤버변수를 그대로 노출하는 의미가 강한데요. 변경할 일이 있으면 그에 맞는 비즈니스 메서드 이름을 주시는 것을 권장합니다.
예를 들어서 주문상태가 접수로 변경되면 다음과 같이 처리하는 것이 더 명확합니다.
public void accept() {
this.status = ACCPET;
}
감사합니다.