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

๋ณธ๋ฌธ ์ œ๋ชฉ

11. API ๋ฆฌํŒฉํ„ฐ๋ง

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

by :ํ•ดํ”ผ๋ž˜๋น—๐Ÿพ 2021. 11. 4. 10:59

๋ณธ๋ฌธ

11.1 ์งˆ์˜ ํ•จ์ˆ˜์™€ ๋ณ€๊ฒฝ ํ•จ์ˆ˜ ๋ถ„๋ฆฌํ•˜๊ธฐ

function getTotalOutstandingAndsendBill(){
   const result = customer.invoices.reduce((total,each)=>each.amount +total,0);
   sendBill();
   return result;
}

//์งˆ์˜ ํ•จ์ˆ˜์™€ ๋ณ€๊ฒฝ ํ•จ์ˆ˜ ๋ถ„๋ฆฌํ•˜๊ธฐ
function totalOutstanding(){
   return customer.invoices.reduce((total,each)=>each.amount +total,0);;
}
function sendBill(){
  emailGateway.send(formatBill(customer));
}
function alertForMiscreant(people){
    for(const p of people){
        if(p==='์กฐ์ปค'){
            setOffAlarms();
            return '์กฐ์ปค';
        }
        if(p==='์‚ฌ๋ฃจ๋งŒ'){
            setOffAlarms();
            return '์‚ฌ๋ฃจ๋งŒ';
        }
    }
    return '';
}
//========= ์งˆ์˜ ํ•จ์ˆ˜์™€ ๋ณ€๊ฒฝ ํ•จ์ˆ˜ ๋ถ„๋ฆฌํ•˜๊ธฐ
function findMiscreant(people){
    for(const p of people){
        if(p==='์กฐ์ปค'){
            return '์กฐ์ปค';
        }
        if(p==='์‚ฌ๋ฃจ๋งŒ'){
            return '์‚ฌ๋ฃจ๋งŒ';
        }
    }
    return '';
}
function alertFormiscreant(people){
    for(const p of people){
        if(p==='์กฐ์ปค'){
            setOffAlarms();
            return ;
        }
        if(p==='์‚ฌ๋ฃจ๋งŒ'){
            setOffAlarms();
            return;
        }
    }
    return;
}
const found = findMiscreant(people);
alertFormiscreant(people);

//======== findMiscreant๋ž‘ alertFormiscreant ์˜ ์ค‘๋ณต๋œ ์ฝ”๋“œ ํ•ฉ์น˜๊ธฐ
function alertForMiscreant(people){
    if(findMiscreant(people)!=="")setOffAlarms();
}

11.2 ํ•จ์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜ํ™”ํ•˜๊ธฐ

function baseCharge(usage){
    if(usage<0)return usd(0);
    const amount = 
        bottomBand(usage)*0.03
        + middleBand(usage)*0.05
        + topBand(usage)*0.07;
    return usd(amount);
}
function bottomBand(usage){
    return Math.min(usage,100);
}
function middleBand(usage){
    return usage>100? Math.min(usage,200)-100:0;
}
function topBand(usage){
    return usage>200?usage-200:0;
}


//ํ•จ์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜ํ™”ํ•˜๊ธฐ
function withinBand(usage,bottom,top){
    return usage>bottom?Math.min(usage,top)-bottom:0;
}
function baseCharge(usage){
    if(usage<0)return usd(0);
    const amount = 
        withinBand(usage,0,100)*0.03
        + withinBand(usage,100,200)*0.05
        + withinBand(usage,200,Infinity)*0.07;
    return usd(amount);
}

11.3 ํ”Œ๋ž˜๊ทธ ์ธ์ˆ˜ ์ œ๊ฑฐํ•˜๊ธฐ

ํ”Œ๋ž˜๊ทธ ์ธ์ˆ˜ : ํ•จ์ˆ˜ ๋‚ด์—์„œ ์ œ์–ด ํ๋ฆ„์„ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

ํ”Œ๋ž˜๊ทธ ์ธ์ˆ˜ ์—†์ด ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ํ”Œ๋ž˜๊ทธ ์ธ์ˆ˜๋“ค์˜ ๊ฐ€๋Šฅํ•œ ์กฐํ•ฉ ์ˆ˜ ๋งŒํผ์˜ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

๊ฐ™์€ ๋กœ์ง์„ ์กฐํ•ฉํ•ด๋‚ด๋Š” ๋” ๊ฐ„๋‹จํ•œ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค ๋ฐฉ๋ฒ•์„ ๊ณ ๋ฏผํ•ด์•ผ ํ•œ๋‹ค.

๋ถˆ๋ฆฌ์–ธ ๊ฐ’ : ํ˜ธ์ถœ์ž์˜ ์˜๋„๋ฅผ ์•Œ ์ˆ˜ ์—†์Œ. ๋ช…์‹œ์ ์ธ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ํ˜ธ์ถœ์ž์˜ ์˜๋„๋ฅผ ๋ถ„๋ช…ํžˆ ๋ฐํž ๊ฒƒ.

๋กœ์ง์ด ๋ณต์žกํ•ด ๋ช…์‹œ์ ์ธ ํ•จ์ˆ˜ ์ž์ฒด๋ฅผ ๋งŒ๋“ค๊ธฐ ๊นŒ๋‹ค๋กญ๋‹ค๋ฉด, ๋ž˜ํ•‘ํ•จ์ˆ˜๋กœ ํ•จ์ˆ˜๋ฅผ ๊ฐ์‹ธ๋ผ.

11.4 ๊ฐ์ฒด ํ†ต์งธ๋กœ ๋„˜๊ธฐ๊ธฐ

๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋ณ€ํ•ด๋„ ๋ฐ”๊ฟ€ ํ•„์š”๊ฐ€ ์—†๋‹ค.

11.5. ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์งˆ์˜ ํ•จ์ˆ˜๋กœ ๋ฐ”๊พธ๊ธฐ <=> 11.6. ์งˆ์˜ ํ•จ์ˆ˜๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ”๊พธ๊ธฐ

11.7. ์„ธํ„ฐ ์ œ๊ฑฐํ•˜๊ธฐ

์„ธํ„ฐ => ๊ฐ’ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ณ€๊ฒฝ๋˜์–ด์„œ๋Š” ์•ˆ๋˜๋Š” ๊ฐ’์€ ์„ธํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜์ž.

11.8. ์ƒ์„ฑ์ž๋ฅผ ํŒฉํ„ฐ๋ฆฌ ํ•จ์ˆ˜๋กœ ๋ฐ”๊พธ๊ธฐ

์ƒ์„ฑ์ž

1. ๊ทธ ์ƒ์„ฑ์ž๋ฅผ ์ •์˜ํ•œ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค.- ์„œ๋ธŒ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋‚˜ ํ”„๋ฝ์‹œ๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์—†๋‹ค.

2. ์ƒ์„ฑ์ž ์ด๋ฆ„์ด ์ •ํ•ด์ ธ ์žˆ๋‹ค.

3. ํŠน๋ณ„ํ•œ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ด์„œ ์ผ๋ฐ˜ ํ•จ์ˆ˜๊ฐ€ ์˜ค๊ธธ ๊ธฐ๋Œ€ํ•˜๋Š” ์ž๋ฆฌ์—๋Š” ์“ฐ๊ธฐ ์–ด๋ ต๋‹ค.

11.9. ํ•จ์ˆ˜๋ฅผ ๋ช…๋ น์œผ๋กœ ๋ฐ”๊พธ๊ธฐ <=> 11.10 ๋ช…๋ น์„ ํ•จ์ˆ˜๋กœ ๋ฐ”๊พธ๊ธฐ

๋ช…๋ น ๊ฐ์ฒด๋Š” ๋ณต์žกํ•œ ์—ฐ์‚ฐ์„ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ๊ฐ•๋ ฅํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•œ๋‹ค.

๋ช…๋ น ๊ฐ์ฒด๋Š” ํŠน์ • ํ•จ์ˆ˜๋ฅผ ์œ„ํ•œ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ๊ทธ ํ•จ์ˆ˜์™€ ์—ฐ๊ด€๋œ ํ•จ์ˆ˜๋‚˜ ๋ณ€์ˆ˜๋ฅผ ํด๋ž˜์Šค์— ์ชผ๊ฐœ ๋„ฃ์–ด์„œ

์ชผ๊ฐœ์ง„ ๋ฉ”์„œ๋“œ๋“ค๋ผ๋ฆฌ ์ •๋ณด๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. 

๋งŒ์•ฝ, ๋กœ์ง์ด ๋ณต์žกํ•˜์ง€ ์•Š๋‹ค๋ฉด ํ‰๋ฒ”ํ•œ ํ•จ์ˆ˜๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ๊ฒŒ ๋‚ซ๋‹ค.

 

๋ช…๋ น์„ ํ•จ์ˆ˜๋กค ๋ฐ”๊พธ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ณด์กฐ ํ•จ์ˆ˜๋ฅผ ๋ฉ”์ธํ•จ์ˆ˜์— ์ธ๋ผ์ธํ•˜์—ฌ ํ•จ์ˆ˜๋ฅผ ๋‹จ์ผํ™” ํ•œ๋‹ค.

 

11.11. ์ˆ˜์ •๋œ ๊ฐ’ ๋ฐ˜ํ™˜ํ•˜๊ธฐ

๋ณ€์ˆ˜๋ฅผ ๊ฐฑ์‹ ํ•˜๋Š” ํ•จ์ˆ˜๋ผ๋ฉด ์ˆ˜์ •๋œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์—ฌ ํ˜ธ์ถœ์ž๊ฐ€ ๊ทธ ๊ฐ’์„ ๋ณ€์ˆ˜์— ๋‹ด์•„๋‘๋„๋ก ํ•˜์ž.

function calculateAscent(){
    for (let i =1;i<points.length;i++){
        const verticalChange = points[i].elevation - points[i-1].elevation;
        totalAscent += (verticalChange>0) ? verticalChange : 0;
    }
}

calculateAscent์•ˆ์—์„œ totalAscent๊ฐ€ ๊ฐฑ์‹ ๋œ๋‹ค๋Š” ์‚ฌ์‹ค์ด ๋“œ๋Ÿฌ๋‚˜์ง€ ์•Š์œผ๋ฏ€๋กœ calculateAscent()์™€ ์™ธ๋ถ€ ํ™˜๊ฒฝ์ด ์–ด๋–ป๊ฒŒ ์—ฐ๊ฒฐ๋˜๋Š”์ง€๊ฐ€ ์ˆจ๊ฒจ์ง„๋‹ค.

 

11.12. ์˜ค๋ฅ˜ ์ฝ”๋“œ๋ฅผ ์˜ˆ์™ธ๋กœ ๋ฐ”๊พธ๊ธฐ

์˜ˆ์™ธ(ํ”„๋กœ๊ทธ๋žจ์˜ ์ •์ƒ ๋™์ž‘ ๋ฒ”์ฃผ์— ๋“ค์ง€ ์•Š๋Š” ์˜ค๋ฅ˜๋ฅผ ๋‚˜ํƒ€๋‚ผ ๋•Œ).

์˜ˆ์™ธ๋ฅผ ๋˜์ง€๋Š” ์ฝ”๋“œ๋ฅผ ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ ์ฝ”๋“œ๋กœ ๋ฐ”๊ฟ”๋„ ํ”„๋กœ๊ทธ๋žจ์ด ์—ฌ์ „ํžˆ ์ •์ƒ ๋™์ž‘ํ• ์ง€๋ฅผ ๋”ฐ์ ธ๋ณด๋Š” ๊ฒƒ์ด๋‹ค. ์ •์ƒ ๋™์ž‘ํ•˜์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™๋‹ค๋ฉด ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ง๋ผ๋Š” ์‹ ํ˜ธ์ด๋‹ค. 

์˜ˆ์™ธ ๋Œ€์‹  ์˜ค๋ฅ˜๋ฅผ ๊ฒ€์ถœํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์„ ์ •์ƒ ํ๋ฆ„์œผ๋กœ ๋˜๋Œ๋ฆฌ๊ฒŒ๋” ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

11.13. ์˜ˆ์™ธ๋ฅผ ์‚ฌ์ „ํ™•์ธ์œผ๋กœ ๋ฐ”๊พธ๊ธฐ

๋ฏธ๋ฆฌ ๊ฒ€์‚ฌํ•˜์ž

728x90

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