๐Ÿ”™๋’ค๋กœ๊ฐ€๊ธฐ

๊ฐœ์š”

์ž๋ฐ” 8์—์„œ ๋“ฑ์žฅํ•œ Stream์€ Functional Programming ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปฌ๋ ‰์…˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋” ํšจ๊ณผ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

์ŠคํŠธ๋ฆผ์€ '๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„'์„ ์ถ”์ƒํ™”ํ•œ ๊ฒƒ์ด๋‹ค. ์ปฌ๋ ‰์…˜(Collection)์˜ ์š”์†Œ๋ฅผ ํ•˜๋‚˜์”ฉ ์ฐธ์กฐํ•ด ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•˜๊ฑฐ๋‚˜, ์›ํ•˜๋Š” ์กฐ๊ฑด์— ๋งž๋Š” ์š”์†Œ๋ฅผ ์„ ํƒํ•˜๊ฑฐ๋‚˜, ์š”์†Œ๋ฅผ ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜, ์š”์†Œ๋ฅผ ๋ชจ๋‘ ํ•ฉ์น˜๋Š” ๋“ฑ์˜ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด words.stream()์€ **words**๋ผ๋Š” ์ปฌ๋ ‰์…˜(Collection)์„ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์ด ์ŠคํŠธ๋ฆผ์—์„œ ๋‹ค์–‘ํ•œ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

Stream API์˜ ์—ฐ์‚ฐ

1. ์ค‘๊ฐ„ ์—ฐ์‚ฐ(Intermediate Operations)

์ด ์—ฐ์‚ฐ๋“ค์€ ์ŠคํŠธ๋ฆผ์„ ๋‹ค๋ฅธ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. ์ด ์—ฐ์‚ฐ๋“ค์€ 'lazy'ํ•˜๊ฒŒ ๋™์ž‘ํ•˜๋Š”๋ฐ, ์ด๋Š” ์‹ค์ œ๋กœ ์ตœ์ข… ์—ฐ์‚ฐ์ด ํ˜ธ์ถœ๋˜๊ธฐ ์ „๊นŒ์ง€๋Š” ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ์ค‘๊ฐ„ ์—ฐ์‚ฐ์—๋Š” filter(), map(), flatMap(), sorted() ๋“ฑ์ด ์žˆ๋‹ค.

2. ์ตœ์ข… ์—ฐ์‚ฐ(Terminal Operations)

์ŠคํŠธ๋ฆผ ํŒŒ์ดํ”„๋ผ์ธ์„ ๋‹ซ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ์ด ์—ฐ์‚ฐ์ด ํ˜ธ์ถœ๋˜๋ฉด ์‹ค์ œ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ฒ˜๋ฆฌ๋˜๋ฉฐ, ๊ฒฐ๊ณผ๊ฐ€ ๋ฐ˜ํ™˜๋˜๊ฑฐ๋‚˜, ์™ธ๋ถ€ ๊ฐ์ฒด๊ฐ€ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ์†Œ๋น„ํ•˜๊ฒŒ ๋œ๋‹ค. ์ตœ์ข… ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๋Š” ์ปฌ๋ ‰์…˜, ๊ฐ์ฒด, ์ˆซ์ž, void ๋“ฑ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ํ˜•ํƒœ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ์ตœ์ข… ์—ฐ์‚ฐ์—๋Š” collect(), forEach(), reduce(), sum(), count(), anyMatch(), noneMatch(), findFirst(), findAny() ๋“ฑ์ด ์žˆ๋‹ค.

Stream API์˜ ํŠน์ง•