두 함수의 로직이 아주 비슷하고 단지 리터럴 값만 다르다면
호출하는 쪽에서 boolean 값으로 리터럴 값을 건네야 한다.(불리언 아니여도댐)
호출되는 함수는 그 인수를 제어 흐름을 결정하는데 사용해야 한다.
함수 매개변수화 하기 기법
- 리터럴: 계산 과정에 필요한 상수
플래그 인수 제거하기
- 플래그 인수: (함수 안에서) 로직 선택에 사용
"호출할 수 있는 함수들이 무엇이고 어떻게 호출해야 하는지를 이해하기 어려워지기 때문"
호출자가 간단하길 바라는 저자의 성향 반영
명확한 이름을 가진 함수명으로 호출하는것이 boolean 값을 넘겨주는 것보다 명확
함수 하나에서 플래그 인수를 두개 이상 사용한다면... (M x N 경우의 수의 함수)
단, 함수 하나가 너무 많은 일을 하고 있다는 의미일수도
오 이거 좋지.. 책임 떠넘기기 기법
레코드를 통째로 넘기면 변화에 대응하기 쉽다.
변수 추상화의 이점과 유사!
예시 이상해,,, 이미 anEmployee 객체를 파라미터로 넘겼는데 굳이..? 좀 억까인데
다시말해 -> 그 값을 결정하는 책임을 피호출 함수에게 넘기겠다는 것
그럼 언제 하지 말아야 하는가?
서브클래스를 리턴할 수 없다
생성자 이름 고정
일반 함수가 기대되는 곳에 사용할 수 없다.
함수를 그 함수만을 위한 객체 안으로 캡슐화하면 더 유용해지는 상황이 있다.
이런 객체를 가리켜 '명령 객체' 혹은 단순히 '명령'이라 한다.
(Java는 일급함수 지원 노노)