์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

Stream API(1)

๋ฏธ๋กœ910 2024. 10. 2. 14:10
๐Ÿ’ก
1. ์ž๋ฐ” I/O ์—์„œ์˜ ์ŠคํŠธ๋ฆผ( java.io.)๊ณผ java.util.stream ํŒจํ‚ค์ง€์— ์žˆ๋Š” Stream ๊ตฌ๋ถ„ํ•ด์„œ ์ด์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ŠคํŠธ๋ฆผ ํŒจํ‚ค์ง€์˜ ๊ตฌ๋ถ„

์ž๋ฐ” I/O ์ŠคํŠธ๋ฆผ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ฐ๋Š” ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ, ๋„คํŠธ์›Œํฌ, ๋ฉ”๋ชจ๋ฆฌ ๋“ฑ ๋‹ค์–‘ํ•œ ์†Œ์Šค์—์„œ ๋ฐ”์ดํŠธ๋‚˜ ๋ฌธ์ž ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ฑฐ๋‚˜ ์“ฐ๊ธฐ ์œ„ํ•œ ์ŠคํŠธ๋ฆผ์ž…๋‹ˆ๋‹ค. InputStream๊ณผ OutputStream์ด ๋Œ€ํ‘œ์ ์ธ I/O ์ŠคํŠธ๋ฆผ์ž…๋‹ˆ๋‹ค.

Stream API์™€ ์ž๋ฐ” I/O ์ŠคํŠธ๋ฆผ์€ ์ด๋ฆ„์€ ๋น„์Šทํ•˜์ง€๋งŒ, ์™„์ „ํžˆ ๋‹ค๋ฅธ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. Stream API๋Š” ์ž๋ฐ” 8์—์„œ ๋„์ž…๋œ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋กœ, ๋ฐ์ดํ„ฐ ์ปฌ๋ ‰์…˜(์ž๋ฃŒ๊ตฌ์กฐ)์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ŠคํŠธ๋ฆผ(Stream)์€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ์–ธ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋ฉฐ, ํŠนํžˆ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ฐ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ์ œ์–ด์— ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

Stream API๋ž€?

Stream API๋Š” ์ปฌ๋ ‰์…˜(List, Set, Map ๋“ฑ)์ด๋‚˜ ๋ฐฐ์—ด ๋“ฑ์˜ ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์Šคํƒ€์ผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ํ•„ํ„ฐ๋งํ•˜๊ณ , ๋ณ€ํ™˜ํ•˜๊ณ , ์ง‘๊ณ„ํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์„ ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Stream์˜ ํŠน์ง•

  • ์„ ์–ธ์  ๋ฐฉ์‹: ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ์ง€์— ์ง‘์ค‘ํ•˜์ง€ ์•Š๊ณ  ๋ฌด์—‡์„ ํ• ์ง€์—๋งŒ ์ง‘์ค‘ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
  • ๋‚ด๋ถ€ ๋ฐ˜๋ณต: ์ปฌ๋ ‰์…˜์˜ ๋ชจ๋“  ์š”์†Œ์— ๋Œ€ํ•ด ์ง์ ‘ ๋ฐ˜๋ณตํ•˜์ง€ ์•Š๊ณ , ์ŠคํŠธ๋ฆผ์ด ๋ฐ˜๋ณต์„ ๊ด€๋ฆฌํ•˜์—ฌ ๊ฐ„๊ฒฐํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ผํšŒ์„ฑ: ์ŠคํŠธ๋ฆผ์€ ํ•œ ๋ฒˆ ์‚ฌ์šฉํ•˜๋ฉด ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•˜๋ฉด ๋‹ค์‹œ ์ŠคํŠธ๋ฆผ์„ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ง€์—ฐ ์‹คํ–‰: ์ŠคํŠธ๋ฆผ์€ ์ค‘๊ฐ„ ์—ฐ์‚ฐ์ด ์™„๋ฃŒ๋˜๊ธฐ ์ „๊นŒ์ง€ ์‹คํ–‰๋˜์ง€ ์•Š์œผ๋ฉฐ, ์ตœ์ข… ์—ฐ์‚ฐ์ด ํ˜ธ์ถœ๋  ๋•Œ๋งŒ ์—ฐ์‚ฐ์ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

 

Stream์˜ ๋‘ ๊ฐ€์ง€ ์—ฐ์‚ฐ ๋™์ž‘ ๋ฐฉ์‹ (๋ฐ˜๋“œ์‹œ ์ดํ•ด)

  1. ์ค‘๊ฐ„ ์—ฐ์‚ฐ (Intermediate Operation):
    • ์ŠคํŠธ๋ฆผ์˜ ์ค‘๊ฐ„ ๋‹จ๊ณ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.
    • ์—ฌ๋Ÿฌ ์ค‘๊ฐ„ ์—ฐ์‚ฐ์„ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ง€์—ฐ๋œ ์‹คํ–‰(lazy execution)์ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.
    • ์˜ˆ์‹œ: filter(), map(), sorted()
  2. ์ตœ์ข… ์—ฐ์‚ฐ (Terminal Operation):
    • ์ŠคํŠธ๋ฆผ์„ ์ข…๋ฃŒํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•œ ํ›„ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    • ์ตœ์ข… ์—ฐ์‚ฐ์ด ์‹คํ–‰๋˜๊ธฐ ์ „๊นŒ์ง€๋Š” ์ค‘๊ฐ„ ์—ฐ์‚ฐ์ด ์ˆ˜ํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • ์˜ˆ์‹œ: forEach(), collect(), reduce()
๐Ÿ’ก
์ง€์—ฐ ์‹คํ–‰(lazy execution)
(์ตœ์ข… ์—ฐ์‚ฐ์ด ์‹คํ–‰๋˜๊ธฐ ์ „๊นŒ์ง€๋Š” ์ค‘๊ฐ„ ์—ฐ์‚ฐ์ด ์ˆ˜ํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)

filter(); ํ˜ธ์ถœ
map(); ํ˜ธ์ถœ
sorted(); ํ˜ธ์ถœ

์œ„ ์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœ ํ•˜์˜€์ง€๋งŒ ์ค‘๊ฐ„ ์—ฐ์‚ฐ์ž๋“ค์ด๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜ํ–‰ ๋˜์ง€ ์•Š๋Š”๋‹ค(์ง€์—ฐ ์—ฐ์‚ฐ)


forEach();

์ตœ์ข… ์—ฐ์‚ฐ์ด ํ˜ธ์ถœ๋  ๋•Œ ๋น„๋กœ์†Œ ๋ชจ๋“  ์ค‘๊ฐ„ ์—ฐ์‚ฐ๋“ค์ด ํ•จ๊ป˜ ์‹คํ–‰๋˜๋ฉฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์ค‘๊ฐ„ ์—ฐ์‚ฐ์€ ์ค€๋น„๋งŒ ํ•˜๊ณ  ์‹คํ–‰ํ•˜์ง€ ์•Š์•„์š”. ์‹ค์ œ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ฒ˜๋ฆฌ๋˜๋Š” ๊ฒƒ์€ ์ตœ์ข… ์—ฐ์‚ฐ์ด ํ˜ธ์ถœ๋œ ์ดํ›„์ž…๋‹ˆ๋‹ค.