Stream
๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ฐ์ฐ์ ์ง์ํ๋๋ก ์์ค์์ ์ถ์ถ๋ ์ฐ์๋ ์์
์คํธ๋ฆผ์ ํน์ ์์ ํ์์ผ๋ก ์ด๋ฃจ์ด์ง ์ฐ์๋ ๊ฐ ์งํฉ์ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ค(filter, sorted, map ๊ฐ์ ํํ ๊ณ์ฐ์) โ ์ปฌ๋ ์ ์ ๋ฐ์ดํฐ์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํจ
์คํธ๋ฆผ์ ์ปฌ๋ ์ , ๋ฐฐ์ด, I/O ์์ ๋ฑ์ ๋ฐ์ดํฐ ์ ๊ณต ์์ค๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์๋นํ๋ค. ์ ๋ ฅ ๊ทธ๋๋ก ๊ฐ์ ์ถ๋ ฅ์์๋ฅผ ์ ์งํ๋ค
์คํธ๋ฆผ์ fp์์ ์ผ๋ฐ์ ์ผ๋ก ์ง์ํ๋ ์ฐ์ฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋น์ทํ๊ฒ filter, map, reduce, find, match, sort ๋ฑ์ผ๋ก ๋ฐ์ดํฐ๋ฅด๋ฅด ์กฐ์ํ ์ ์๊ณ ์ด๋ฅผ ์์ฐจ์ ๋๋ ๋ณ๋ ฌ๋ก ์คํํ ์ ์๋ค
์คํธ๋ฆผ ํน์ง
ํ์ดํ๋ผ์ด๋ - ์คํธ๋ฆผ ์ฐ์ฐ๋ผ๋ฆฌ ์ฐ๊ฒฐํด์ ํ์ดํ๋ผ์ธ์ ๊ตฌ์ฑํ ์ ์๋๋ก ์คํธ๋ฆผ ์๊ธฐ ์์ ์ ๋ฐํํ๋ค - laziness, short-circuiting ์ต์ ํ๊ฐ ๊ฐ๋ฅํด์ง
๋ฐ์ดํฐ ์์ค๋ฅผ ๋ฐ์์ ์คํธ๋ฆผ์ ๊ตฌ์ฑํ๊ณ , filter, map, limit,๋ก ์ด์ด์ง๋ ์ผ๋ จ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ฐ์ฐ์ ์ ์ฉํ๊ณ , collect๋ก ํ์ดํ๋ผ์ธ์ ์ฒ๋ฆฌํด์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค. collect๊ฐ ํธ์ถ๋๊ธฐ ์ ๊น์ง๋ ์๋ฌด ์ฐ์ฐ๋ ์ผ์ด๋์ง ์๋๋ค.(๋ฉ์๋ ํธ์ถ์ด ์ ์ฅ๋จ. ์ง์ฐ์ฐ์ฐ)
collect๋ ์คํธ๋ฆผ์ ๋ค๋ฅธ ํ์์ผ๋ก ๋ณํํ๋ค(toList()๋ก ๋ฆฌ์คํธ ๋ณํ)
๋ด๋ถ ๋ฐ๋ณต - ๋ด๋ถ ๋ฐ๋ณต์ ์ง์ํจ โ ์ปฌ๋ ์ ์ ๋ฐ๋ณต์๋ฅผ ์ด์ฉํด์ ๋ช ์์ ์ผ๋ก ๋ฐ๋ณตํ๋ค.
์คํธ๋ฆผ๊ณผ ์ปฌ๋ ์ ์ ์ฐจ์ด, ๋ฐฐ๊ฒฝ
๊ณตํต์ - ์๋ฐ ์ปฌ๋ ์ , ์คํธ๋ฆผ์ ์ฐ์๋ ์์ ํ์์ ๊ฐ์ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ์ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ค
์ฐจ์ด์
๋ฐ์ดํฐ๋ฅผ ์ธ์ ๊ณ์ฐํ๋ ์ง์ ์ฌ๋ถ
์ปฌ๋ ์ ์ ํ์ฌ ์๋ฃ๊ตฌ์กฐ๊ฐ ํฌํจํ๋ ๋ชจ๋ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค(์ ๊ทน์ ์์ฑ - ๋ชจ๋ ๊ฐ์ ๊ณ์ฐํ ๋ ๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค. DVD์ ์ ์ฅ๋ ์ํ)
์คํธ๋ฆผ์ ์์ฒญํ ๋๋ง ์์๋ฅผ ๊ณ์ฐํ๋ ๊ณ ์ ๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค(๊ฒ์ผ๋ฅธ ์์ฑ - ํ์ํ ๋๋ง ๊ฐ์ ๊ณ์ฐํ๋ค. ์คํธ๋ฆฌ๋ฐ ์๋น์ค์์ ์์ฐจ์ ์ผ๋ก ๋ค์ด์ค๋ ํจํท ์ฐ์ฐ)
์คํธ๋ฆผ์ ์์๋ ์์ฒญํ ๋ ๊ฒ์ผ๋ฅด๊ฒ ๊ณ์ฐ๋๋ค
ํ๋ฒ ์๋น๋ ์คํธ๋ฆผ์ ๋ค์ ํ์ํ ์ ์์
์คํธ๋ฆผ์ ํ๋ฒ๋ง ํ์ํ ์ ์๋ค. ํ๋ฒ ํ์ํ ์คํธ๋ฆผ์ ๋ค์ ํ์ํ๋ ค๋ฉด ์๋ก์ด ์คํธ๋ฆผ์ ๋ง๋ค์ด์ผํ๋ค(๋จ ํ๋ฒ๋ง ์๋นํ ์ ์๋ค)
์คํธ๋ฆผ ์ฌ์ฌ์ฉ ๋ถ๊ฐ
A stream should be operated on (invoking an intermediate or terminal stream operation) only once.
A stream implementation may throw IllegalStateException if it detects that the stream is being reused.
์ฌํ ๋น์ ํ๊ฑฐ๋ ์๋ก์ด ์คํธ๋ฆผ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ Supplier๋ฅผ ๊ตฌํํ ์ ์๋ค.
์ธ๋ถ ๋ฐ๋ณต, ๋ด๋ถ ๋ฐ๋ณต
์ปฌ๋ ์ ์ธํฐํ์ด์ค๋ฅผ ์ํํ๋ ค๋ฉด ์ฌ์ฉ์๊ฐ ์ง์ ์์๋ฅผ ๋ฐ๋ณตํด์ผ ๋๋ค. (iterator๋ foreach๋ฌธ์ผ๋ก ๋ช ์์ ์ธ ๋ฐ๋ณต๋ฌธ์ผ๋ก ์ํํ๋ค. ๋ด๋ถ์ ์ผ๋ก ์จ๊ฒจ์ง iterator๋ฅผ ์ฌ์ฉํด์ ์ธ๋ถ ๋ฐ๋ณต)
์คํธ๋ฆผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ filter, map, sorted ๋ฑ์ ์ฐ์ฐ์ผ๋ก ๋ฐ๋ณต์ ์ถ์ํํด์ ์์์ ์ฒ๋ฆฌํ๊ณ , ๊ฒฐ๊ณผ ์คํธ๋ฆผ๊ฐ์ ์ ์ฅํด์ฃผ๋ ๋ด๋ถ ๋ฐ๋ณต์ ์ฌ์ฉํ๋ค(iterator๊ฐ ํ์์์)
์คํธ๋ฆผ์ ๋ด๋ถ๋ฐ๋ณต์ด ์ปฌ๋ ์ ์ ์ธ๋ถ๋ฐ๋ณต๋ณด๋ค ๋ ์ข์ 2๊ฐ์ง ์ด์
filter๋ map ๋ฑ์ ์ค๊ฐ์ฐ์ฐ์ด ์ ๊ณตํ๋ ๋ด๋ถ๋ฐ๋ณต์ ์ด์ฉํ๋ฉด ์์ ์ ํฌ๋ช ํ๊ฒ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ ์ ์๊ณ , ๋ ์ต์ ํ๋ ๋ค์ํ ์์๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
์คํธ๋ฆผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ด๋ถ ๋ฐ๋ณต์ ๋ฐ์ดํฐ ํํ๊ณผ ๋ณ๋ ฌ์ฑ ๊ตฌํ์ ์๋์ผ๋ก ์ ํํ์ง๋ง ์ธ๋ถ๋ฐ๋ณต์ ๊ฒฝ์ฐ ๋ณ๋ ฌ์ฑ์ synchronized ๋ฑ์ผ๋ก ์ค์ค๋ก ๊ด๋ฆฌํด์ผํ๋ค(์คํธ๋ฆผ API ๋ด๋ถ์ ์ผ๋ก ์ฝ๋๋ฅผ ๋ณ๋ ฌ๋ก ์คํํ ์ง ๋ง์ง๋ฅผ ์ ํํ ์ ์๋ค)
Last updated