2021-11-28

1128 생성자에 매개변수가 많다면 빌더를 고려하라

<문제상황> : 선택적 매개변수가 너무 많다

-> 실수로 다른 값이랑 다른값이랑 헷갈려서 순서 바꿔서 넘겨준다면?!!버그발생!

### 해결방법01 : 점층적 생성자 패턴

- this()불러가면서 점점점 늘려간다

- 코드 졸라늘어나고 클라이언트쪽에서 실수로 잘못 넘겨줄수있다..

- 넘겨주는 매개변수가 무엇인지 생성자에서는 알수가 없으니(지금이야 뭐 인텔리제이가 보여준다고 쳐도) 실수하기쉽다

### 해결방법02 : setter사용

- 일단 기본 디폴트 생성자 하나 부르고 -> set계~ 속부르면서 필요한 매개변수 넘겨주는 패턴

- 자바빈즈 패턴이라고 한다

- set하면서 불안정한 상태에 놓이게 된다

- setter를 공개하기 싫은데... 어떻게 해결. 

-> 가장 큰 문제 : 불변하지 않다는 점. 

setter를 열어두는 순간 = 이 객체는 가변하다는 것.

즉 어디선가에서 객체의 상태가 변경될 가능성이 있다는 것이다. 

그렇다는 것은? 런타임에서 클라이언트가 해당 객체 상태값을 바꿔버릴수있고 -> 나는 어디에서 이 값이 변경되었나를 찾아야 한다......

- 근데 언제 바꿨는지 모르니까 결국에 버그가 발견되는 것은 한~ 참 후가 될 수있고. 추적이 쉽지않게 될 것이다. 

- 가격 막 setter로 바꿔버렸다가 다시 돌려놨다가. -> 버그 나고. 찾으라고 해?? -> 언제 바꾼겨~~ 막이래. ㅜㅜ -> 그래서 왠만~ 하면 불변객체로 해서(상태값 인스턴스변수는 전부다 private으로) setter 안열어두고 . 필요한 옵션값은 change어쩌구.. 이런 메서드 따로 제공해서 추적을 하든. 

### 해결방법03 : 빌더 사용.

- builder 객체를 호출( 보통 해당 클래스의 정적 클래스 ) -> 필요한 매개변수들 셋팅 -> build()를 불러서 원하는 클래스 호출. 

- 안전성 & 가독성 두마리토끼를 동시에!

댓글 없음:

댓글 쓰기

0328 fdisk, mkfs, mount, fstab

 1. 하드디스크를 붙인다. 2. fdisk -l로 하드디스크를 확인한다.  - interactiive한 커맨드모드 사용하여 (m) 붙인 하드디스크의 파티셔닝을 한다.  - 마지막에 w를 해야 실제로 반영이 된다.  3. mkfs를 하여 어떤 파일시스...