<문제상황> : 선택적 매개변수가 너무 많다
-> 실수로 다른 값이랑 다른값이랑 헷갈려서 순서 바꿔서 넘겨준다면?!!버그발생!
### 해결방법01 : 점층적 생성자 패턴
- this()불러가면서 점점점 늘려간다
- 코드 졸라늘어나고 클라이언트쪽에서 실수로 잘못 넘겨줄수있다..
- 넘겨주는 매개변수가 무엇인지 생성자에서는 알수가 없으니(지금이야 뭐 인텔리제이가 보여준다고 쳐도) 실수하기쉽다
### 해결방법02 : setter사용
- 일단 기본 디폴트 생성자 하나 부르고 -> set계~ 속부르면서 필요한 매개변수 넘겨주는 패턴
- 자바빈즈 패턴이라고 한다
- set하면서 불안정한 상태에 놓이게 된다
- setter를 공개하기 싫은데... 어떻게 해결.
-> 가장 큰 문제 : 불변하지 않다는 점.
setter를 열어두는 순간 = 이 객체는 가변하다는 것.
즉 어디선가에서 객체의 상태가 변경될 가능성이 있다는 것이다.
그렇다는 것은? 런타임에서 클라이언트가 해당 객체 상태값을 바꿔버릴수있고 -> 나는 어디에서 이 값이 변경되었나를 찾아야 한다......
- 근데 언제 바꿨는지 모르니까 결국에 버그가 발견되는 것은 한~ 참 후가 될 수있고. 추적이 쉽지않게 될 것이다.
- 가격 막 setter로 바꿔버렸다가 다시 돌려놨다가. -> 버그 나고. 찾으라고 해?? -> 언제 바꾼겨~~ 막이래. ㅜㅜ -> 그래서 왠만~ 하면 불변객체로 해서(상태값 인스턴스변수는 전부다 private으로) setter 안열어두고 . 필요한 옵션값은 change어쩌구.. 이런 메서드 따로 제공해서 추적을 하든.
### 해결방법03 : 빌더 사용.
- builder 객체를 호출( 보통 해당 클래스의 정적 클래스 ) -> 필요한 매개변수들 셋팅 -> build()를 불러서 원하는 클래스 호출.
- 안전성 & 가독성 두마리토끼를 동시에!
댓글 없음:
댓글 쓰기