๐ก
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์ ๋ ๊ฐ์ง ์ฐ์ฐ ๋์ ๋ฐฉ์ (๋ฐ๋์ ์ดํด)
- ์ค๊ฐ ์ฐ์ฐ (Intermediate Operation):
- ์คํธ๋ฆผ์ ์ค๊ฐ ๋จ๊ณ์์ ๋ฐ์ดํฐ๋ฅผ ๋ณํํ๊ฑฐ๋ ํํฐ๋งํฉ๋๋ค.
- ์ฌ๋ฌ ์ค๊ฐ ์ฐ์ฐ์ ์ฐ๊ฒฐํ ์ ์์ผ๋ฉฐ, ์ง์ฐ๋ ์คํ(lazy execution)์ด ์ด๋ฃจ์ด์ง๋๋ค.
- ์์: filter(), map(), sorted()
- ์ต์ข
์ฐ์ฐ (Terminal Operation):
- ์คํธ๋ฆผ์ ์ข ๋ฃํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
- ์ต์ข ์ฐ์ฐ์ด ์คํ๋๊ธฐ ์ ๊น์ง๋ ์ค๊ฐ ์ฐ์ฐ์ด ์ํ๋์ง ์์ต๋๋ค.
- ์์: forEach(), collect(), reduce()
๐ก
์ง์ฐ ์คํ(lazy execution)
(์ต์ข ์ฐ์ฐ์ด ์คํ๋๊ธฐ ์ ๊น์ง๋ ์ค๊ฐ ์ฐ์ฐ์ด ์ํ๋์ง ์์ต๋๋ค.)
filter(); ํธ์ถ
map(); ํธ์ถ
sorted(); ํธ์ถ
์ ์ฝ๋๋ฅผ ํธ์ถ ํ์์ง๋ง ์ค๊ฐ ์ฐ์ฐ์๋ค์ด๊ธฐ ๋๋ฌธ์ ์ํ ๋์ง ์๋๋ค(์ง์ฐ ์ฐ์ฐ)
forEach();
์ต์ข ์ฐ์ฐ์ด ํธ์ถ๋ ๋ ๋น๋ก์ ๋ชจ๋ ์ค๊ฐ ์ฐ์ฐ๋ค์ด ํจ๊ป ์คํ๋๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
์ค๊ฐ ์ฐ์ฐ์ ์ค๋น๋ง ํ๊ณ ์คํํ์ง ์์์. ์ค์ ๋ก ๋ฐ์ดํฐ๊ฐ ์ฒ๋ฆฌ๋๋ ๊ฒ์ ์ต์ข ์ฐ์ฐ์ด ํธ์ถ๋ ์ดํ์ ๋๋ค.