[JS] ํจ์ํ / ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋ฎ์ ๊ผด
์ปค๋ง
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์์ ์์ฃผ ์ฌ์ฉํ๋ ์ปค๋ง ํจ์๋ n
๊ฐ์ ์ธ์๋ฅผ ๋ฐ๋ ๋์ n
๊ฐ์ ํจ์๋ฅผ ๋ง๋ค์ด์ ํ๋์ ์ธ์๋ง ๋ฐ๋๋ก ๋ง๋๋ ํจํด์ด๋ค. ์ปค๋ง์ ์ฌ์ฉํ๋ฉด ๋ณต์กํ ํจ์๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ๋ง๋ค๊ณ , ์ฌ์ฌ์ฉํ ์ ์๋ ํจ์๋ก ๋ถ๋ฆฌํ ์ ์๋ค. ๋ํ, ์ง์ฐ ํ๊ฐ(ํ์ํ ๋๊น์ง ๊ณ์ฐ/ํ๊ฐ๋ฅผ ๋ฏธ๋ฃจ๋ ์ ๋ต)๋ฅผ ํตํด ์ ์ฐํ ์์
์ ์ํํ ์ ์๋ค.
// ์ผ๋ฐ ํจ์
const adder = (x, y) => x + y;
adder(100, 50); // 150
// ์ปค๋ง ํจ์
const adder = (x) => (y) => x + y;
const add100 = adder(100);
add100(50); // 150
๊ฐ์ฒด ์งํฅ / ์ผ๋ฐ ํจ์ / ํจ์ํ ๋น๊ต
๐ก ๊ฐ์ฒด ์งํฅ / ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๊ฐ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ์์์ ์ธ ์ปจํ ์คํธ ๊ฐ๋๋ค. ๊ฐ์ฒด ์งํฅ์์ ๊ฐ์ฒด ํ๋๋ฅผ ์ฌ์ฉํ๊ณ , ํจ์ํ์์ ์ปค๋ง ํจ์๋ฅผ ์ฌ์ฉํ๋ค. ์ด๋ฅผ ํตํด ์ ์ฐํ ์ฝ๋ ์คํ์ด ๊ฐ๋ฅํด์ง๊ณ (์ง์ฐ ํ๊ฐ), ์ค๋ณต๋ ์ ๊ฑฐํ ์ ์๋ค.
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์คํ์ผ ์์. ์ปจํ ์คํธ(์ด๊ธฐ๊ฐ 5)๋ฅผ ๊ฐ์ง๋ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ , ์ด ์ธ์คํด์ค๋ฅผ ์ด์ฉํด ์ฌ๋ฌ ์ฐ์ฐ์ ์ํํ๊ณ ์๋ค. ๋ฐ์ดํฐ์ ๋ฉ์๋๋ฅผ ํ๋์ ๋ ผ๋ฆฌ์ ๋จ์๋ก ๊ด๋ฆฌ(์บก์ํ)ํด์ ์ฌ์ฌ์ฉ์ฑ์ด ์ข๋ค.
// ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ
class NumberScaler {
constructor(value) {
this.field = value;
}
scaledBy = (factor) => this.field * factor;
}
const five = new NumberScaler(5); // ์ด๊ธฐ๊ฐ 5๋ฅผ ๊ฐ์ง๋ ์ธ์คํด์ค ์์ฑ
const fiveScaledBy2 = five.scaledBy(2); // 10
const fiveScaledBy14 = five.scaledBy(14); // 70
์ผ๋ฐ ํจ์๋ฅผ ์ฌ์ฉํด์ ๊ตฌํํ ์์. ๋งค๋ฒ ์ปจํ ์คํธ(์ด๊ธฐ๊ฐ 5)๋ฅผ ์ ๋ฌํด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์๋ค. ์ด๋ฌํ ์ฝ๋๋ ์ค๋ณต์ ๋ง๋ค๊ณ ์ค์๋ฅผ ์ ๋ฐํ๊ธฐ ์ฌ์์ ์ข์ง ์๋ค.
// ์ผ๋ฐ ํจ์
const numberScaler = (value, factor) => value * factor;
const fiveScaledBy2 = numberScaler(5, 2); // 10
const fiveScaledBy14 = numberScaler(5, 14); // 70
์ปค๋ง์ ์ด์ฉํ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์คํ์ผ ์์. ์ปจํ ์คํธ(์ด๊ธฐ๊ฐ 5)๋ฅผ ๊ฐ์ง ํจ์ ์์ฑ ๋ถ๋ถ์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์์ฑ์ ํธ์ถ → ์ธ์คํด์ค ์ด๊ธฐ ์ํ ์ค์ ํ๋ ๊ฒ๊ณผ ํก์ฌํ๋ค. ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์์๋ ์บก์ํ ๊ฐ์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์๋ฆฌ๋ฅผ ์ด๋ ์ ๋ ์ ์ฉํ ์ ์๋ค๋ ์ ์ ๋ณด์ฌ์ค๋ค.
// ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
const numberScaler = (value) => (factor) => value * factor;
const fiveScaler = numberScaler(5); // ์ด๊ธฐ๊ฐ 5๋ฅผ ๊ฐ์ง๋ ํจ์ ์์ฑ
const fiveScaledBy2 = fiveScaler(2); // 10
const fiveScaledBy14 = fiveScaler(14); // 70
์ฝ๋ / ๋ด์ฉ ์ฐธ๊ณ
'๐ช Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] ๋ฆฌ์กํธ ๋์์ฑ ๋ ๋๋ง(Concurrent) ํบ์๋ณด๊ธฐ (1) | 2024.05.20 |
---|---|
[Express] req.query vs req.params (0) | 2024.05.19 |
[TS] TypeScript ํ์ ์คํฌ๋ฆฝํธ Infer ํค์๋ ํ์ฉํ๊ธฐ (0) | 2024.05.19 |
[JS] JavaScript ์๋ฐ์คํฌ๋ฆฝํธ Map ๋ ์ ์ฌ์ฉํ๊ธฐ (0) | 2024.05.19 |
[CS] ๋๊ธฐ / ๋น๋๊ธฐ, ๋ธ๋กํน / ๋ ผ๋ธ๋กํน (0) | 2024.05.18 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[React] ๋ฆฌ์กํธ ๋์์ฑ ๋ ๋๋ง(Concurrent) ํบ์๋ณด๊ธฐ
[React] ๋ฆฌ์กํธ ๋์์ฑ ๋ ๋๋ง(Concurrent) ํบ์๋ณด๊ธฐ
2024.05.20 -
[Express] req.query vs req.params
[Express] req.query vs req.params
2024.05.19 -
[TS] TypeScript ํ์ ์คํฌ๋ฆฝํธ Infer ํค์๋ ํ์ฉํ๊ธฐ
[TS] TypeScript ํ์ ์คํฌ๋ฆฝํธ Infer ํค์๋ ํ์ฉํ๊ธฐ
2024.05.19 -
[JS] JavaScript ์๋ฐ์คํฌ๋ฆฝํธ Map ๋ ์ ์ฌ์ฉํ๊ธฐ
[JS] JavaScript ์๋ฐ์คํฌ๋ฆฝํธ Map ๋ ์ ์ฌ์ฉํ๊ธฐ
2024.05.19