๐ ์ปค๋ง์ด๋???
"์ปค๋ง์ ํจ์ ์ธ์๋ฅผ ๋ฐ๋ ๋์ , ํ๊ฐ๋ง ๋ฐ๋ ์ฌ๋ฌ๊ฐ์ ํจ์๋ฅผ ๋ฆฌํด"์ด๋ค ๋ผ๊ณ ๋๋ถ๋ถ ์ค๋ช ์ด ๋์จ๋ค.
๋์ ์๊ฐ์ผ๋ก๋ ํจ์ ์์ ํจ์ ์์ ํจ์๋ฅผ ๋ฆฌํดํด์ฃผ๋ ๋ฐฉ์์ผ๋ก ์ดํดํ๋ค.
๋ง์ ,๊ณฑ์ ์ ํตํด์ ์ปค๋ง์ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ์์๋ณด์
๐ ๋ง์ ,๊ณฑ์ ์ ์ปค๋ง์ผ๋ก ๋ง๋ค๊ธฐ
๋ง์ ,๊ณฑ์ ์ ์ธ์๋ฅผ ๋๊ฐ์ด ๋ฐ๊ณ , ๊ฒฐ๊ณผ๊ฐ๋ง ๋ค๋ฅด๊ฒ ์ปค๋ง์ ๋ง๋ค์ด๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
ํ์ดํ ํจ์๋ก ๋ง๋ค์์ผ๋ฉฐ, 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์ด๋ฒคํธ๊ฐ ์ ์์ ์ผ๋ก ๋ฑ๋ก๋ ๊ฒ์ ํ์ธํ ์ ์๋ค
'Javascript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐ฟ ์ํ ํจํด (0) | 2024.11.25 |
---|---|
โ๏ธ ์ ๋ต ํจํด (1) | 2024.11.19 |
๐Hls ์ฝํ ์ธ ๋ณ๊ฒฝ ๊ฐ์ (0) | 2023.12.04 |
navigator.mediaSession (1) | 2023.07.27 |
๐ฆ๋น๋์ค ์๋์ฌ์ ์คํ์ํค๊ธฐ (0) | 2023.07.02 |
๋๊ธ