상세 컨텐츠

본문 제목

6.8. 매개변수 객체 만들기 (Introduce Parameter Object)

🍜개발자라면/책을 읽자✍

by :Eundms 2021. 9. 26. 15:30

본문

- 말 그대로 매개변수로 전달되는 변수들 간에 관계가 있다면,  데이터 구조로 묶자

 


방법

1. 적당한 데이터 구조를 만든다

- 클래스나 객체로 만든다.

2. 테스트한다.

3. 함수 선언 바꾸기로 새 데이터 구조를 매개변수로 추가한다.

4. 테스트한다.

5. 함수 호출 시 새로운 데이터 구조 인스턴스를 넘기도록 수정한다. 하나씩 수정할 때마다 테스트한다.

6. 기존 매개변수를 사용하던 코드를 새 데이터 구조의 원소를 사용하도록 바꾼다.

7. 다 바꿨다면 기존 매개변수를 제거하고 테스트한다.

 


  매개변수 객체 만들기  

정상 범위를 벗어난 측정값 찾아내기
클래스로 범위를 저장해둔다면, 온도가 허용 범위 안에 있는지 검사하는 메서드를 클래스에 추가할 수 있다.
// 변경전
const station ={
    name: "zb1",
    readings:[
        {temp:47, time:"2012-12-12 12:12"},
        {temp:37, time:"2012-12-14 14:12"},
    ]
}
function readingsOutsideRange(station, min, max){
    return station.readings
          .filter(r=>r.temp<min||r.temp>max);
}
alerts = readingsOutsideRange(station,
operatingPlan.temperatureFloor, operatingPan.temperatureCeiling); //최저온도 최고온도

> class로 범위 클래스 생성

// 1) 매개변수에 추가
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);
}
alerts = readingsOutsideRange(station,
operatingPlan.temperatureFloor, operatingPan.temperatureCeiling, null);

// 2) 매개변수 추가 => 객체 생성 => 객체 전달 => 다른 매개변수 제거
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, range){
    return station.readings
          .filter(r=>r.temp<range.min||r.temp>range.max);
}
const range = new NumberRange(operatingPlan.temperatureFloor, operatingPlan.temperatureCeiling);
alerts = readingsOutsideRange(station, range);

> readingsOutsideRange를 NumberRange 클래스에 넣을 수 있다.

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);
    }
}
function readingsOutsideRange(station, range){
    return station.readings
          .filter(r=>!range.contains(r.temp)); //이 부분이 간결해짐
}

const range = new NumberRange(operatingPlan.temperatureFloor, operatingPlan.temperatureCeiling);
alerts = readingsOutsideRange(station, range);

 

 

 

 

 

관련글 더보기

댓글 영역