๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Javascript

โ˜‚๏ธ ์ปค๋ง

by frontChoi 2024. 5. 29.
๋ฐ˜์‘ํ˜•

๐Ÿ‹ ์ปค๋ง์ด๋ž€???

"์ปค๋ง์€ ํ•จ์ˆ˜ ์ธ์ž๋ฅผ ๋ฐ›๋Š” ๋Œ€์‹ , ํ•œ๊ฐœ๋งŒ ๋ฐ›๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ•จ์ˆ˜๋ฅผ ๋ฆฌํ„ด"์ด๋‹ค ๋ผ๊ณ  ๋Œ€๋ถ€๋ถ„ ์„ค๋ช…์ด ๋‚˜์˜จ๋‹ค.

๋‚˜์˜ ์ƒ๊ฐ์œผ๋กœ๋Š” ํ•จ์ˆ˜ ์•ˆ์— ํ•จ์ˆ˜ ์•ˆ์— ํ•จ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•ด์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ดํ•ดํ–ˆ๋‹ค.

๋ง์…ˆ,๊ณฑ์…ˆ์„ ํ†ตํ•ด์„œ ์ปค๋ง์„ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ–ˆ๋Š”์ง€ ์•Œ์•„๋ณด์ž

 

๐Ÿˆ ๋ง์…ˆ,๊ณฑ์…ˆ ์„ ์ปค๋ง์œผ๋กœ ๋งŒ๋“ค๊ธฐ

๋ง์…ˆ,๊ณฑ์…ˆ์— ์ธ์ž๋ฅผ ๋˜‘๊ฐ™์ด ๋ฐ›๊ณ , ๊ฒฐ๊ณผ๊ฐ’๋งŒ ๋‹ค๋ฅด๊ฒŒ ์ปค๋ง์„ ๋งŒ๋“ค์–ด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค์—ˆ์œผ๋ฉฐ, a,b,fn์„ ๋ฐ›๊ณ   a,b๋Š” ๋ง์…ˆ,๊ณฑ์…ˆ ํ•  ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ์ด๊ณ , fn์€ ๋‘๊ฐœ์˜ ์ธ์ž๋ฅผ ํ†ตํ•ด์„œ ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  sum,multipy ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ ๋‹ค.

/**
 * ์ธ์ž๋ฅผ ๋˜‘๊ฐ™์ด ๋ฐ›๊ณ  ๊ฒฐ๊ณผ๊ฐ’๋งŒ ๋‹ค๋ฅด๊ฒŒ ๋ฐ›๊ณ  ์‹ถ๋‹ค
 * ex) 5,4๋ฅผ ๋ฐ›๋Š” ์ธ์ž๊ฐ€ ์กด์žฌํ•˜๊ณ , ๊ฒฐ๊ณผ(๊ณฑ์…ˆ,๋ง์…ˆ)์ด ๋‹ฌ๋ž์œผ๋ฉด ์ข‹๊ฒ ๋‹ค
 */

const curry = a => b => fn =>{
    return fn(a,b);
}

const sum = (a,b) => a+b;
const multipy = (a,b) => a*b;

 

๋‘๊ฐœ์˜ ์ธ์ž ๋ฆฌํ„ด ํ•จ์ˆ˜ ํ™•์ธ

ํ•จ์ˆ˜์˜ ๋‘๊ฐœ์˜ ์ธ์ž๋ฅผ ๋„ฃ์œผ๋ฉด fn๊ฒฐ๊ณผ๋ฅผ ๋‚ด๋ฑ‰๋Š”๋‹ค.

const result1 =curry(2)(4);

/*
return ๊ฒฐ๊ณผ : 
fn =>{
    return fn(a,b);
}
*/

 

๊ฒฐ๊ณผ๊ฐ’ ํ™•์ธ

curryํ•จ์ˆ˜์—์„œ ๋‘๊ฐœ์˜ ์ธ์ž๋ฅผ ๋ฐ›์€ ๊ฒฐ๊ณผ result1์„ ๋ฐ›๋Š”๋‹ค. ๊ทธ๋ฆฌ๊ณ  result1์˜ ์ธ์ž์— ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•ด๋‘”(sum,multipy)ํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋„ฃ๋Š”๋‹ค. ๊ทธ๋Ÿฌ๋ฉด, ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ๊ฒฐ๊ณผ๊ฐ€ 6,8๋กœ ๋–จ์–ด์ง€๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

์ด์ฒ˜๋Ÿผ ์ธ์ž๋ฅผ ๋˜‘๊ฐ™์ด ๋ฐ›๋Š” ๊ฒฝ์šฐ์—๋Š” ์žฌํ™œ์šฉ์„ฑ์„ ๋†’์ด๊ธฐ์œ„ํ•ด ์ปค๋ง์„ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค.

const sumResult = result1(sum);
const multipyResult = result1(multipy);

console.log(sumResult); //6
console.log(multipyResult); //8

 

์ฐธ๊ณ ๋กœ ์•„๋ž˜์ฒ˜๋Ÿผ ()๋ฅผ ์—ฐ์†์ ์œผ๋กœ ์‚ฌ์šฉ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค

curry(2)(4)(sum)

 

 

 ๐Ÿšฒ  ์›น์—์„œ ๋ฒ„ํŠผ์ด๋ฒคํŠธ๋ฅผ ์ปค๋ง ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

 

๋ฒ„ํŠผ ์ด๋ฒคํŠธ๋ฅผ ์ปค๋ง์œผ๋กœ ์ƒ์„ฑ

btnEvent๋ฅผ ์—ฐ์†์ ์œผ๋กœ element, eventName, eventFn์„ 3๊ฐ€์ง€๋กœ ๋ฐ›๋Š”๋‹ค. btnEvent๋Š” element๊ฐ€ ์กด์žฌํ•˜๋ฉด addEventListener๋ฅผ ํ†ตํ•ด ์ด๋ฒคํŠธ๋ฅผ ๋“ฑ๋กํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํด๋ฆญ(clickEvent),๋งˆ์šฐ์Šค์ง„์ž…(mouseEnterEvent)์„ ๋งŒ๋“ ๋‹ค.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="./styles/reset.css">
    <link rel="stylesheet" href="./styles/styles.css">
</head>
<body>
    <h1>๋ฒ„ํŠผ ์ด๋ฒคํŠธ</h1>
    <button id="btn1">๋ฒ„ํŠผ1</button>
    <script>
        /*
        * ์ด๋ฒคํŠธ ํ•จ์ˆ˜๋ฅผ ์ปค๋ง์œผ๋กœ ๋งŒ๋“ค๊ณ , element, ์ด๋ฒคํŠธ๋ช…, ์ด๋ฒคํŠธ ํ•จ์ˆ˜๋ฅผ ๋ฐ›๋Š”๋‹ค
        */
        const btnEvent = ele => eventName => eventFn =>{
            if(ele){
                return ele.addEventListener(eventName,eventFn)
            }
            return null;
        }

        /**
         * ํ•จ์ˆ˜ ํด๋ฆญ ์ด๋ฒคํŠธ
         */
        const clickEvnet = ()=>{
            alert("click event")
        }
        
         /**
         * ๋งˆ์šฐ์Šค ์ง„์ž… ์ด๋ฒคํŠธ 
         */
        const mouseEnterEvent = ()=>{
            alert("mouseEnter event")
        }
    </script>
</body>
</html>

 

๋ฒ„ํŠผ ์ด๋ฒคํŠธ๋ฅผ ์ปค๋ง์— ๋“ฑ๋ก ํ•˜๊ธฐ

btnResult์—๋Š” element๋ฅผ ์ธ์ž๋กœ ๋ฐ›๊ณ  ๋ฆฌํ„ดํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด eventName๊ณผ eventFn์„ ๋ฐ›๋Š” ํ•จ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•ด์ค€๋‹ค.

๊ทธ๋ฆฌ๊ณ  btnResult์—๋Š” ์ด๋ฒคํŠธ๋ช…์ธ click,clickEvent ๊ทธ๋ฆฌ๊ณ  mouseenter,mouseEnterEvent๋ฅผ ๋“ฑ๋กํ•ด์ค€๋‹ค.

/**
 * ๋ฒ„ํŠผ element๋ฅผ ๋ฐ›๊ณ  ๋ฆฌํ„ด
 */
const ele = document.querySelector('#btn1');
const btnResult = btnEvent(ele);
/*
return ๊ฒฐ๊ณผ : 
eventName => eventFn =>{
            if(ele){
                return ele.addEventListener(eventName,eventFn)
            }
            return null;
        }
*/

/**
 * ํ•จ์ˆ˜๋ช…๊ณผ ์ด๋ฒคํŠธ ํ•จ์ˆ˜๋ฅผ ์—ฐ๋‹ฌ์•„ ์ž…๋ ฅ
 */
btnResult('click')(clickEvnet);
btnResult('mouseenter')(mouseEnterEvent);

 

 

์•„๋ž˜ ์ฒ˜๋Ÿผ click,mouseenter์ด๋ฒคํŠธ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋“ฑ๋ก๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€