개요
이 함수 저 함수 사이를 같이 다니는 여러 데이터 항목을 하나의 데이터 구조로 묶는다.
데이터 뭉치를 데이터 구조로 묶으면 데이터 사이 관계가 명확해진다.
그리고 함수 인자 수가 줄어든다.
묶인 데이터는 이름을 가지기 때문에 인자로 사용 시 일관성을 가진다.
생성된 매개변수 객체는 새로운 리팩터링 기회를 만들 수 있다.
예시
const station = { name: "ZB1", readings: [ {temp:47, time: "2016-11-10 09:10"}, {temp:53, time: "2016-11-10 09:20"}, {temp:58, time: "2016-11-10 09:30"}, {temp:53, time: "2016-11-10 09:40"}, {temp:51, time: "2016-11-10 09:50"}, ] }; //정상 범위를 벗어난 측정값 탐색 function readingsOutsideRange(station, min, max){ return station.readings .filter(r => r.temp < min || r.temp > max); } //호출 let alerts = readingsOutsideRange(station, operationPlan.temperatureFloor, operationPlan.temperatureCeiling); |
//묶을 클래스 class NumberRange{ constructor(min,max){ this._data = {min:min, max:max}; } get min(){return this._data.min}; get max(){return this._data.max}; } |
//새로운 데이터 구조 매개변수 추가 function readingsOutsideRange(station, min, max, range){ return station.readings .filter(r => r.temp < min || r.temp > max); } let alerts = readingsOutsideRange(station, operationPlan.temperatureFloor, operationPlan.temperatureCeiling ,null);//일단 null |
//점진적으로 하나씩 줄여가며 테스트 한다. function readingsOutsideRange(station, min, /*max,*/ range){ return station.readings .filter(r => r.temp < min || r.temp > range.max); } const range = new NumberRange(operationPlan.temperatureFloor, operationPlan.temperatureCeiling); let alerts = readingsOutsideRange(station, operationPlan.temperatureFloor, // operationPlan.temperatureCeiling, range); |
// 완료 const station = { name: "ZB1", readings: [ {temp:47, time: "2016-11-10 09:10"}, {temp:53, time: "2016-11-10 09:20"}, {temp:58, time: "2016-11-10 09:30"}, {temp:53, time: "2016-11-10 09:40"}, {temp:51, time: "2016-11-10 09:50"}, ] }; function readingsOutsideRange(station, range){ return station.readings .filter(r => r.temp < range.min || r.temp > range.max); } const range = new NumberRange(operationPlan.temperatureFloor, operationPlan.temperatureCeiling); let alerts = readingsOutsideRange(station, range); class NumberRange{ constructor(min,max){ this._data = {min:min, max:max}; } get min(){return this._data.min}; get max(){return this._data.max}; } |
//연관된 데이터를 묶음으로서 새로운 설계의 기회를 얻는다. class NumberRange{ constructor(min,max){ this._data = {min:min, max:max}; } get min(){return this._data.min;} get max(){return this._data.max;} contains(arg){return arg>=this.min&&arg<=this.max;} } |
'IT책, 강의 > 리팩터링' 카테고리의 다른 글
06 - 기본적인 리펙터링 - 여러 함수를 클래스로 묶기 (0) | 2023.07.22 |
---|---|
06 - 기본적인 리펙터링 - 변수 이름 바꾸기 (0) | 2023.07.21 |
06 - 기본적인 리펙터링 - 변수 캡슐화하기 (0) | 2023.07.19 |
06 - 기본적인 리펙터링 - 함수 선언 바꾸기 (0) | 2023.07.18 |
06 - 기본적인 리펙터링 - 변수 인라인하기 (0) | 2023.07.17 |