Functional Programming (TypeScript)

Array.prototype[1]

map

  • ๋ฐฐ์—ด ๋‚ด์˜ ๋ชจ๋“  ์š”์†Œ ๊ฐ๊ฐ์— ๋Œ€ํ•˜์—ฌ ์ฃผ์–ด์ง„ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ์•„ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
[1, 4, 9, 16].map((item) => item * 2); // [2, 8, 18, 32]

forEach

  • ์ฃผ์–ด์ง„ ํ•จ์ˆ˜๋ฅผ ๋ฐฐ์—ด ์š”์†Œ ๊ฐ๊ฐ์— ๋Œ€ํ•ด ์‹คํ–‰ํ•œ๋‹ค.
['a', 'b', 'c'].forEach((item) => console.log(item));
// a
// b
// c

filter

  • ์ฃผ์–ด์ง„ ํ•จ์ˆ˜์˜ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜๋Š” ๋ชจ๋“  ์š”์†Œ๋ฅผ ๋ชจ์•„ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
[3, 10, 20, 1, 9].filter((item) => item < 10);
// [3, 1, 9]

some

  • ๋ฐฐ์—ด ์•ˆ์˜ ์–ด๋–ค ์š”์†Œ๋ผ๋„ ์ฃผ์–ด์ง„ ํŒ๋ณ„ ํ•จ์ˆ˜๋ฅผ ํ†ต๊ณผํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธํ•œ๋‹ค.
  • ์กฐ๊ฑด์— ๋งž๋Š” ์š”์†Œ๊ฐ€ ์žˆ์œผ๋ฉด ์ฆ‰์‹œ true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
[1, 2, 3, 4, 5].some((item) => item % 2 === 0);
// true

every

  • ๋ฐฐ์—ด ์•ˆ์˜ ๋ชจ๋“  ์š”์†Œ๊ฐ€ ์ฃผ์–ด์ง„ ํŒ๋ณ„ ํ•จ์ˆ˜๋ฅผ ํ†ต๊ณผํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธํ•œ๋‹ค.
  • ์กฐ๊ฑด์— ๋งž์ง€ ์•Š๋Š” ์š”์†Œ๊ฐ€ ์žˆ์œผ๋ฉด ์ฆ‰์‹œ false๋ฅผ ๋ฐ˜ํ™”ํ•œ๋‹ค.
[1, 30, 39, 29, 10, 13].every((item) => item < 40);
// true

reduce

  • ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์ฃผ์–ด์ง„ ๋ฆฌ๋“€์„œ(reducer) ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
// 1 + 2 + 3 + 4
[1, 2, 3, 4].reduce((acc, curr) => acc + curr); // 10

// 10 + 1 + 2 + 3 + 4
[1, 2, 3, 4].reduce((acc, curr) => acc + curr, 10); // 20

Monad

  • ๋ชจ๋‚˜๋“œ๋Š” ํƒ€์ž…์ด์ž ๋””์ž์ธํŒจํ„ด์ด๋‹ค.
  • ๋ชจ๋‚˜๋“œ๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ 3๊ฐ€์ง€ ์š”์†Œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
    • ํƒ€์ž… ์ƒ์„ฑ์ž - ์›์‹œ ํƒ€์ž…์— ๋Œ€ํ•ด ๋ชจ๋‚˜๋“œํ™”๋œ ํƒ€์ž…์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์ƒ์„ฑ์ž.
    • unit ํ•จ์ˆ˜ - ์›์‹œ ํƒ€์ž…์˜ ๊ฐ’์„ ๋ชจ๋‚˜๋“œ์— ๋„ฃ๋Š” ํ•จ์ˆ˜. T ํƒ€์ž… ๊ฐ’์„ ๋ฐ›์•„ M<T> ํƒ€์ž…์˜ ๊ฐ’์„ ๋ฐ˜ํ™”ํ•œ๋‹ค.
    • bind ํ•จ์ˆ˜ - ๋‹ค๋ฅธ ๋ชจ๋‚˜ํŠธ ํƒ€์ž…์œผ๋กœ ๋™์ž‘์„ ์—ฐ๊ฒฐํ•˜๋Š” ํ•จ์ˆ˜. M<T>๊ฐ€ ์žˆ์œผ๋ฉด T ํƒ€์ž… ๋ณ€์ˆ˜๋ฅผ ๋ฐ›์•„ M<U> ํƒ€์ž…์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
interface M<T> { }

function unit<T>(value: T): M<T> { ... }

function bind<T, U>(instance: M<T>, transform: (value: T) => M<U>): M<U> { ... }

์ฐธ๊ณ ์ž๋ฃŒ

์ด ๋ฌธ์„œ๋ฅผ ์ธ์šฉํ•œ ๋ฌธ์„œ


  1. MDN web docs, โ€œArrayโ€, developer.mozilla.org. โ†ฉ๏ธŽ