ํฌ์ŠคํŠธ

๐ŸŒ’ 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 ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.