Pipe
Pipe
๐ซ Pipe
ํ๋์ ํจ์๋ฅผ ์ฌ๋ฌ ํจ์๋ก ๋ถ๋ฆฌํ๊ณ ์ ํ ๋,
์ข ๋ ์๋ฆ๋ต๊ฒ ๋ถ๋ฆฌํ๋ ๋ฐฉ๋ฒ.
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์์ ์ฌ์ฉ๋๋ ๊ธฐ๋ฒ์ผ๋ก,
์ฌ๋ฌ ํจ์๋ฅผ ์ฐ๊ฒฐํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฒ์ด๋ค.
๐ซ ์์ (C#)
๐ซง Pipe
๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ
1
2
3
4
5
6
7
8
9
10
11
12
// ์์ ํจ์๋ค
Func<int, int> add = x => x + 1;
Func<int, int> multiply = x => x * 2;
Func<int, int> subtract = x => x - 3;
// ๊ฐ ํจ์๋ฅผ ์์ฐจ์ ์ผ๋ก ํธ์ถํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌ
int result = 5;
result = add(result);
result = multiply(result);
result = subtract(result);
Console.WriteLine(result); // (5 + 1) * 2 - 3 = 9
๐ซง Pipe
๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// ์์ ํจ์๋ค
Func<int, int> add = x => x + 1;
Func<int, int> multiply = x => x * 2;
Func<int, int> subtract = x => x - 3;
// pipe ํจ์ ๊ตฌํ
Func<T, T> Pipe<T>(params Func<T, T>[] funcs) =>
input => funcs.Aggregate(input, (acc, func) => func(acc));
// pipe๋ฅผ ์ฌ์ฉํ์ฌ ํจ์๋ค์ ์ฐ๊ฒฐ
var process = Pipe
(
add,
multiply,
subtract
);
Console.WriteLine(process(5)); // (5 + 1) * 2 - 3 = 9
์ฌ๋ฌ ํจ์๋ฅผ ์ฐ๊ฒฐํ๋ Pipe
๋ฅผ ๋ง๋ค์๋ค.
๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ ๋์ Pipe
๋ฅผ ๋ง๋ค์ด ์ ์ฅํ๊ณ ํ์ํ ๋ ์ฌ์ฉํ๋ค.
์ด๋ ๊ฒ ๋ง๋ Pipe
๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
์ด ๊ธฐ์ฌ๋ ์ ์๊ถ์์ CC BY 4.0 ๋ผ์ด์ผ์ค๋ฅผ ๋ฐ๋ฆ
๋๋ค.