Community

๐Ÿ•Š๏ธ ์ž๋ฐ” ์ŠคํŠธ๋ฆผ - ๋‹น์‹ ์ด ์•Œ์•„์•ผ ํ•  ๋ชจ๋“  ๊ฒƒ

์ž๋ฐ” 8์—์„œ ์†Œ๊ฐœ๋œ ์ž๋ฐ” ์ŠคํŠธ๋ฆผ์€ ๊ฐ•๋ ฅํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋Šฅ์œผ๋กœ ๊ฐœ๋ฐœ์ž๋“ค์ด ์ปฌ๋ ‰์…˜์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๋ฐฉ์‹์— ํ˜์‹ ์„ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ์„ ์–ธ์ ์ด๊ณ  ๊ฐ„๊ฒฐํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ๊น”๋”ํ•˜๊ณ  ํšจ์œจ์ ์ธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š”, ์ž๋ฐ” ์ŠคํŠธ๋ฆผ์˜ ๋งคํ˜น์ ์ธ ์„ธ๊ณ„๋ฅผ ํƒํ—˜ํ•˜๋ฉฐ ๊ทธ๊ฒƒ์˜ ์žฅ์ , ๊ธฐ๋ณธ ์—ฐ์‚ฐ, ๊ธฐ๋Šฅ๊ณผ ์‹ค์ œ๋กœ ์“ธ ์ˆ˜ ์žˆ๋Š” ์˜ˆ์ œ๋ฅผ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค. ๐Ÿ“Œ ์ž๋ฐ” ์ŠคํŠธ๋ฆผ์˜ ์žฅ์  - ์„ ์–ธ์ ์ธ ํ˜•์‹: ์ž๋ฐ” ์ŠคํŠธ๋ฆผ์€ ๊ฐœ๋ฐœ์ž๋“ค์ด ๊ตฌํ˜„ ์„ธ๋ถ€ ์‚ฌํ•ญ๋ณด๋‹ค ์›ํ•˜๋Š” ๊ฒฐ๊ณผ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋Š” ํ•˜์ด-๋ ˆ๋ฒจ์˜ ํ‘œํ˜„ ๊ตฌ๋ฌธ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. - ๋ณ‘๋ ฌ: ์ž๋ฐ” ์ŠคํŠธ๋ฆผ์€ ์ตœ์†Œํ•œ์˜ ๋…ธ๋ ฅ์œผ๋กœ ํšจ์œจ์ ์ธ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. - Laziness : ์ž๋ฐ” ์ŠคํŠธ๋ฆผ์€ ์˜จ๋””๋งจ๋“œ ๋ฐฉ์‹์œผ๋กœ ํ‰๊ฐ€๋˜๋ฏ€๋กœ ํŠน์ • ์ž‘์—…์— ํ•„์š”ํ•œ ์š”์†Œ๋งŒ ์ฒ˜๋ฆฌํ•˜์—ฌ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค. - ์ฝ”๋“œ ๊ฐ€๋…์„ฑ: ์ŠคํŠธ๋ฆผ ์—ฐ์‚ฐ์€ ์ฝ”๋“œ๋ฅผ ๋”์šฑ ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฝ๊ณ , ์ฝ๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๐Ÿ“Œ ์ž๋ฐ” ์ŠคํŠธ๋ฆผ ์ƒ์„ฑ: ์ปฌ๋ ‰์…˜๋ถ€ํ„ฐ ์ƒ์„ฑ๊นŒ์ง€ ์ŠคํŠธ๋ฆผ์€ ๋‹ค์–‘ํ•œ ์†Œ์Šค๋กœ ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์ŠคํŠธ๋ฆผ์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. - ์ปฌ๋ ‰์…˜์œผ๋กœ: Collection.stream() - ๋ฐฐ์—ด๋กœ: Arrays.stream(array) - ์ŠคํŠธ๋ฆผ ๋นŒ๋” ์‚ฌ์šฉ: Stream.builder().add(element1).add(element2).build() - I/O๋กœ: Files.lines(Path) - Infinite ์ŠคํŠธ๋ฆผ: Stream.iterate(seed, function) ๐Ÿ“Œ ์ŠคํŠธ๋ฆผ ์—ฐ์‚ฐ ๋งˆ์Šคํ„ฐ ํ•˜๊ธฐ ์ž๋ฐ” ์ŠคํŠธ๋ฆผ์€ ์ค‘๊ฐ„ ์—ฐ์‚ฐ๊ณผ ์ตœ์ข… ์—ฐ์‚ฐ์„ ํฌํ•จํ•œ ๋งŽ์€ ์—ฐ์‚ฐ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ค‘๊ฐ„ ์—ฐ์‚ฐ์€ ์ƒˆ๋กœ์šด ์ŠคํŠธ๋ฆผ์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์ตœ์ข… ์—ฐ์‚ฐ์€ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๊ณ  ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. [์ค‘๊ฐ„ ์—ฐ์‚ฐ] - filter(): ์ฃผ์–ด์ง„ ํ•จ์ˆ˜์— ๋Œ€ํ•ด ์š”์†Œ๋ฅผ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค. - map(): ์š”์†Œ๋ฅผ ์ฃผ์–ด์ง„ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. - flatMap(): ์š”์†Œ๋ฅผ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์ƒ์„ฑ๋œ ์ŠคํŠธ๋ฆผ์„ ํ‰๋ฉดํ™”ํ•ฉ๋‹ˆ๋‹ค. - distinct(): ์œ ์ผํ•œ ์š”์†Œ๋“ค๋กœ ์ŠคํŠธ๋ฆผ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. - sorted(): ์ฃผ์–ด์ง„ ๋น„๊ต์ž๋กœ ์š”์†Œ๋ฅผ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค. - peek(): ์ŠคํŠธ๋ฆผ์„ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ๊ฐ ์š”์†Œ์— ์•ก์…˜์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. [์ตœ์ข… ์—ฐ์‚ฐ] - forEach(): ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์•ก์…˜์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. - toArray(): ์š”์†Œ๋ฅผ ๋ฐฐ์—ด๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค. - reduce(): ์š”์†Œ๋ฅผ ๋‹จ์ผ ๊ฐ’์œผ๋กœ ์ค„์ž…๋‹ˆ๋‹ค. - collect(): ๊ฐ€๋ณ€ ์ปจํ…Œ์ด๋„ˆ์— ์š”์†Œ๋ฅผ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค. - min(), max(): ์ตœ์†Œ, ์ตœ๋Œ“๊ฐ’์„ ์ฐพ์Šต๋‹ˆ๋‹ค. - count(): ์š”์†Œ์˜ ์ˆ˜๋ฅผ ์…‰๋‹ˆ๋‹ค. - anyMatch(), allMatch(), noneMatch(): ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ๋งŒ์กฑํ•˜๋Š” ์š”์†Œ๊ฐ€ ์žˆ๋Š”์ง€ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค. - findFirst(), findAny(): ํ•ด๋‹น ์กฐ๊ฑด์„ ์ถฉ์กฑ์‹œํ‚ค๋Š” ์ฒซ ๋ฒˆ์งธ๋‚˜ ์•„๋ฌด ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ“Œ ์ž๋ฐ” ์ŠคํŠธ๋ฆผ ํŒ๊ณผ ๋ชจ๋ฒ” ์‚ฌ๋ก€ - ๊ฐ€๋Šฅํ•œ ๋ฉ”์„œ๋“œ ์ฐธ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ๋” ์ฝ๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. - ๋ณ‘๋ ฌ ์ŠคํŠธ๋ฆผ์€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๋™์ž‘์„ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฃผ์˜ํ•˜์„ธ์š”. - ์ŠคํŠธ๋ฆผ์˜ ์„ฑ๋Šฅ๊ณผ ๋ณ‘๋ ฌ์„ฑ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ƒํƒœ ์ €์žฅ ์ค‘๊ฐ„ ์—ฐ์‚ฐ์˜ ์‚ฌ์šฉ์„ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. - ์˜ฌ๋ฐ”๋ฅธ ๋ฆฌ์†Œ์Šค ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด I/O ์‚ฌ์šฉ ์‹œ์— ํ•ญ์ƒ ์ŠคํŠธ๋ฆผ์„ ๋‹ซ์Šต๋‹ˆ๋‹ค.

์•Œ๋ฆผ

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