์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

6.8. ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ์ฒด ๋งŒ๋“ค๊ธฐ (Introduce Parameter Object)

๐Ÿœ๊ฐœ๋ฐœ์ž๋ผ๋ฉด/์ฑ…์„ ์ฝ์žโœ

by :ํ•ดํ”ผ๋ž˜๋น—๐Ÿพ 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);

 

 

 

 

 

728x90

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ