Community

๐Ÿ•Š๏ธ Java Streams API์— ๋Œ€ํ•œ ์ธํ„ฐ๋ทฐ ์ค€๋น„

๐Ÿ“Œ Streams API์˜ ์ค‘๊ฐ„ ์—ฐ์‚ฐ๊ณผ ์ตœ์ข… ์—ฐ์‚ฐ์˜ ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”. ์ค‘๊ฐ„ ์—ฐ์‚ฐ * ์ค‘๊ฐ„ ์—ฐ์‚ฐ์˜ ํŠน์ง•์€ Lazy Execution์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์ตœ์ข… ์—ฐ์‚ฐ์ด ํ˜ธ์ถœ๋  ๋•Œ๊นŒ์ง€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. * ์ค‘๊ฐ„ ์—ฐ์‚ฐ์˜ ๋ฆฌํ„ด ํƒ€์ž…์€ streams์ด๋ฏ€๋กœ ์ถ”๊ฐ€๋กœ ์—ฐ์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. * ๋Œ€๋ถ€๋ถ„์˜ ์ค‘๊ฐ„ ์—ฐ์‚ฐ์€ stateless(์ƒํƒœ์—†์Œ) ์ž…๋‹ˆ๋‹ค. filter๋‚˜ map ์—ฐ์‚ฐ์„ ๋…๋ฆฝ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. * ์ค‘๊ฐ„ ์—ฐ์‚ฐ ์ค‘ ์ผ๋ถ€๋Š” stateful ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. sorted๋‚˜ distinct๊ฐ€ ๊ทธ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. ์ตœ์ข… ์—ฐ์‚ฐ * ์ตœ์ข… ์—ฐ์‚ฐ์€ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ํ›„ ๊ฒฐ๊ณผ๋ฅผ ์‚ฐ์ถœํ•ฉ๋‹ˆ๋‹ค. * ๋ฆฌํ„ด ํƒ€์ž…์€ aggregate, collection์ด๋‚˜ optional์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. * ์ตœ์ข… ์—ฐ์‚ฐ์€ ์ŠคํŠธ๋ฆผ ์ฒ˜๋ฆฌ๋ฅผ ์ฆ‰์‹œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. * ์ตœ์ข… ์—ฐ์‚ฐ ํ›„์—๋Š” ์ถ”๊ฐ€ ์—ฐ์‚ฐ์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๐Ÿ“Œ primitive streams์˜ ์šฉ๋„์™€ ๋ชฉ์ ์„ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”. IntStream, DoubleStream, LongStream์€ ๋‹ค์Œ์˜ ๋ชฉ์ ์œผ๋กœ ์ œ๊ณต๋˜์—ˆ์Šต๋‹ˆ๋‹ค: 1. boxing๊ณผ unboxing์˜ ์˜ค๋ฒ„ํ—ค๋“œ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ 2. sum, avg, max, min๊ณผ ๊ฐ™์€ ํŠน์ •ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณต 3. ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ค„์ž„ ๐Ÿ“Œ forEach์™€ forEachOrdered์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”? forEach ๋ณ‘๋ ฌ ์ŠคํŠธ๋ฆผ์—์„œ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. forEachOrdered ๋ณ‘๋ ฌ ์ŠคํŠธ๋ฆผ์—์„œ ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋ฉ๋‹ˆ๋‹ค. Sequential Stream ์ˆœ์ฐจ ์ŠคํŠธ๋ฆผ์—์„œ๋Š” ์ŠคํŠธ๋ฆผ์ด ์ด๋ฏธ ์ˆœ์ฐจ์ ์ด๋ฏ€๋กœ forEach์™€ forEachOrdered์˜ ์ฐจ์ด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. Parallel Stream ๋ณ‘๋ ฌ ์ŠคํŠธ๋ฆผ์—์„œ forEach๋Š” ์š”์†Œ๋ฅผ ์–ด๋–ค ์ˆœ์„œ๋กœ๋“  ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, forEachOrdered๋Š” ์ŠคํŠธ๋ฆผ์—์„œ ์ •์˜๋œ ์ˆœ์„œ๋ฅผ ์กด์ค‘ํ•ฉ๋‹ˆ๋‹ค.

์•Œ๋ฆผ

์•Œ๋ฆผ์ด ์—†์Šต๋‹ˆ๋‹ค