STREAM
์คํธ๋ฆผ์ด๋ ๋ฌด์์ธ๊ฐ?
์คํธ๋ฆผ(Stream)์ ์๋ฐ 8 API์์ ์๋ก ์ถ๊ฐ๋ ๊ธฐ๋ฅ์ด๋ค.
์คํธ๋ฆผ์ ์ด์ฉํ๋ฉด ์ ์ธํ(๋ฐ์ดํฐ๋ฅผ ์์ ๊ตฌํ ์ฝ๋ ๋์ ์ง์๋ฃ ํํ)์ผ๋ก ์ปฌ๋ ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค.
๋ํ ๋ฉํฐ์ค๋ ๋ ์ฝ๋๋ฅผ ๊ตฌํํ์ง ์์๋ ๋ฐ์ดํฐ๋ฅผ ํฌ๋ช ํ๊ฒ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
๊ธฐ์กด ์ฝ๋(์๋ฐ7)
์ ์ฝ๋์์๋ lowCaloricDishes๋ผ๋ ์ปจํ ์ด๋ ์ญํ ๋ง ์ํํ๋ '๊ฐ๋น์ง ๋ณ์'๋ฅผ ์ฌ์ฉํ๋ค.
์๋ฐ 8์์ ์ด๋ฐ ์ธ๋ถ ๊ตฌํ์ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ฒ๋ฆฌํ๋ค.
์ต์ ์ฝ๋(์๋ฐ8)
์คํธ๋ฆผ์ ์ฌ์ฉํ๋ฉด ๋ฃจํ์ ์กฐ๊ฑด๋ฌธ ๋ฑ์ ์ ์ด ๋ธ๋ก์ ์ฌ์ฉํ ํ์ ์์ด "์ ์นผ๋ก๋ฆฌ์ ์๋ฆฌ๋ง ์ ํํ๋ผ"์ ๊ฐ์ ๋์์ ์ํ์ ์ ์ธํ์ผ๋ก ์ง์ ํ ์ ์๋ค. ๋ํ ๋๋ค ์ฝ๋๋ฅผ ํ์ฉํด์ ๋ณํ๋ ์๊ตฌ์ฌํญ์ ์ฝ๊ฒ ๋์ํ ์ ์๋ค.
filter, sorted, map, collect ๊ฐ์ ์ฌ๋ฌ ๋น๋ฉ ๋ธ๋ก์ ์ฐ์ฐ์ ์ฐ๊ฒฐํด์ ๋ณต์กํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ์ดํ๋ผ์ธ์ ๋ง๋ค ์ ์๋ค.
์ด๋ค์ ๋ฉํฐ์ฝ์ด ์ํคํ ์ฒ๋ฅผ ์ต๋ํ ํ์ฉํ ์ ์๊ฒ ๊ตฌํ๋์ด ์์ด ๋ณ๋ ฌ์ฒ๋ฆฌ ์์ ์ค๋ ๋์ ๋ฝ์ ๊ฑฑ์ ํ ํ์๊ฐ ์๋ค.
์๋ฐ 8์ ์คํธ๋ฆผ API์ ํน์ง์ ๋ค์์ฒ๋ผ ์์ฝํ ์ ์๋ค.
์ ์ธํ : ๋ ๊ฐ๊ฒฐํ๊ณ ๊ฐ๋ ์ฑ์ด ์ข์์ง๋ค.
์กฐ๋ฆฝํ ์ ์์ : ์ ์ฐ์ฑ์ด ์ข์์ง๋ค.
๋ณ๋ ฌํ : ์ฑ๋ฅ์ด ์ข์์ง๋ค.
4.2 ์คํธ๋ฆผ ์์ํ๊ธฐ
์คํธ๋ฆผ์ด๋ '๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ฐ์ฐ์ ์ง์ํ๋๋ก ์์ค์์ ์ถ์ถ๋ ์ฐ์๋ ์์'๋ก ์ ์ํ ์ ์๋ค.
์ด ์ ์๋ฅผ ํ๋์ฉ ์ดํด๋ณด์.
์ฐ์๋ ์์ ์ปฌ๋ ์ ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์คํธ๋ฆผ์ ํน์ ์์ ํ์์ผ๋ก ์ด๋ฃจ์ด์ง ์ฐ์๋ ๊ฐ ์งํฉ์ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ค. ์ปฌ๋ ์ ์ ์๋ฃ๊ตฌ์กฐ์ด๋ฏ๋ก ์๊ฐ๊ณผ ๊ณต๊ฐ์ ๋ณต์ก์ฑ๊ณผ ๊ด๋ จ๋ ์์ ์ ์ฅ ๋ฐ ์ ๊ทผ ์ฐ์ฐ์ด ์ฃผ๋ฅผ ์ด๋ฃจ๋ ๋ฐ๋ฉด, ์คํธ๋ฆผ์ filter, sorted, map์ฒ๋ผ ํํ ๊ณ์ฐ์์ด ์ฃผ๋ฅผ ์ด๋ฃฌ๋ค. ์ฆ, ์ปฌ๋ ์ ์ ์ฃผ์ ๋ ๋ฐ์ดํฐ์ด๊ณ ์คํธ๋ฆผ์ ์ฃผ์ ๋ ๊ณ์ฐ์ด๋ค.
์์ค ์คํธ๋ฆผ์ ์ปฌ๋ ์ , ๋ฐฐ์ด, I/O ์์ ๋ฑ์ ๋ฐ์ดํฐ ์ ๊ณต ์์ค๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์๋นํ๋ค. ์ ๋ ฌ๋ ์ปฌ๋ ์ ์ผ๋ก ์คํธ๋ฆผ์ ์์ฑํ๋ฉด ์ ๋ ฌ์ด ๊ทธ๋๋ก ์ ์ง๋๋ค.
๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ฐ์ฐ ์คํธ๋ฆผ์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ง์ํ๋ ์ฐ์ฐ๊ณผ ๋น์ทํ ์ฐ์ฐ์ ์ง์ํ๋ค. ์คํธ๋ฆผ ์ฐ์ฐ์ ์์ฐจ์ ๋๋ ๋ณ๋ ฌ๋ก ์คํํ ์ ์๋ค.
๋ํ ์คํธ๋ฆผ์๋ ๋ค์๊ณผ ๊ฐ์ ๋๊ฐ์ง ์ค์ ํน์ง์ด ์๋ค.
ํ์ดํ๋ผ์ด๋ ๋๋ถ๋ถ์ ์คํธ๋ฆผ ์ฐ์ฐ์ ์คํธ๋ฆผ ์ฐ์ฐ๋ผ๋ฆฌ ์ฐ๊ฒฐํด์ ์ปค๋ค๋ ํ์ดํ ๋ผ์ธ์ ๊ตฌ์ฑํ ์ ์๋๋ก ์คํธ๋ฆผ ์์ฐ์ ๋ฐํํ๋ค. ๊ทธ๋๋ถ์ ๊ฒ์ผ๋ฆ(jaziness), ์ผํธ์ํท(short circuiting) ๊ฐ์ ์ต์ ํ๋ ์ป์ ์ ์๋ค.
๋ด๋ถ ๋ฐ๋ณต ๋ฐ๋ณต์๋ฅผ ์ด์ฉํด์ ๋ช ์์ ์ผ๋ก ๋ฐ๋ณตํ๋ ์ปฌ๋ ์ ๊ณผ ๋ฌ๋ฆฌ ์คํธ๋ฆผ์ ๋ด๋ถ ๋ฐ๋ณต์ ์ง์ํ๋ค.
์ค๋ช ํ ๋ด์ฉ์ ์์ ๋ก ํ์ธํด๋ณด์.
filter : ๋๋ค๋ฅผ ์ธ์๋ก ๋ฐ์ ์คํธ๋ฆผ์์ ํน์ ์์๋ฅผ ์ ์ธ์ํจ๋ค.
map : ๋๋ค๋ฅผ ์ด์ฉํด์ ํ ์์๋ฅผ ๋ค๋ฅธ ์๋ก์ ๋ณํํ๊ฑฐ๋ ์ ๋ณด๋ฅผ ์ถ์ถํ๋ค.
limit : ์ ํด์ค ๊ฐ์ ์ด์์ ์์๊ฐ ์คํธ๋ฆฌ์ ์ ์ฅ๋์ง ๋ชปํ๊ฒ ์คํธ๋ฆผ ํฌ๊ธฐ๋ฅผ ์ถ์ truncate ํ๋ค.
collect : ๋ค์ํ ๋ณํ ๋ฐฉ๋ฒ์ ์ธ์๋ก ๋ฐ์ ์คํธ๋ฆผ์ ๋์ ๋ ์์๋ฅผ ํน์ ๊ฒฐ๊ณผ๋ก(๋ค๋ฅธ ํ์์ผ๋ก) ๋ณํํ๋ค.
4.3 ์คํธ๋ฆผ๊ณผ ์ปฌ๋ ์
์ปฌ๋ ์ ๊ณผ ์คํธ๋ฆผ ๋ชจ๋ ์ฐ์๋ ํ์์ ๊ฐ์ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ์ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ค.
์ฌ๊ธฐ์ '์ฐ์๋'์ด๋ผ๋ ํํ์ ์์์ ์๊ด์์ด ์๋ฌด ๊ฐ์๋ ์ ์ํ ์ ์๋ ๊ฒ์ด ์๋๋ผ ์์ฐจ์ ์ผ๋ก ๊ฐ์ ์ ๊ทผํ๋ค๋ ์๋ฏธ์ด๋ค.
์ปฌ๋ ์ ๊ณผ ์คํธ๋ฆผ์ ๊ฐ์ฅ ํฐ ์ฐจ์ด๋ ๋ฐ์ดํฐ๋ฅผ ์ธ์ ๊ณ์ฐํ๋๋์ด๋ค.
์ปฌ๋ ์ ์ ํ์ฌ ์๋ฃ๊ตฌ์กฐ๊ฐ ํฌํจํ๋ ๋ชจ๋ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ๋ค.
์ปฌ๋ ์ ์ ์์๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ ์ ์์ผ๋ฉฐ, ์ปฌ๋ ์ ์ ๋ชจ๋ ์์๋ ์ปฌ๋ ์ ์ ์ถ๊ฐํ๊ธฐ ์ ์ ๊ณ์ฐ๋์ด์ผ ํ๋ค.
๋ฐ๋ฉด ์คํธ๋ฆผ์ ์ด๋ก ์ ์ผ๋ก ์์ฒญํ ๋๋ง ์์๋ฅผ ๊ณ์ฐํ๋ ๊ณ ์ ๋ ์๋ฃ๊ตฌ์กฐ๋ค.
์คํธ๋ฆผ์๋ ์์๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ ์ ์๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์คํธ๋ฆผ์ ์์ฐ์์ ์๋น์ ๊ด๊ณ๋ฅผ ํ์ฑํ๋ค.
์ปฌ๋ ์ ์ด DVD์ ์ ์ฅ๋ ์ํ๋ผ๋ฉด, ์คํธ๋ฆผ์ ์ธํฐ๋ท์ผ๋ก ์คํธ๋ฆฌ๋ฐํ๋ ์ํ๋ผ๊ณ ํ ์ ์๋ค.
4.3.1 ๋ฑ ํ๋ฒ๋ง ํ์ํ ์ ์๋ค.
๋ฐ๋ณต์์ ๋ง์ฐฌ๊ฐ์ง๋ก ์คํธ๋ฆผ๋ ๋ฑ ํ๋ฒ๋ง ํ์ํ ์ ์๋ค. ์ฆ, ํ์๋ ์คํธ๋ฆผ์ ์์๋ ์๋น๋๋ค.
ํ ๋ฒ ํ์ํ ์์๋ฅผ ๋ค์ ํ์ํ๋ ค๋ฉด ์ด๊ธฐ ๋ฐ์ดํฐ ์์ค์์ ์๋ก์ด ์คํธ๋ฆผ์ ๋ง๋ค์ด์ผ ํ๋ค.
๋ง์ฝ I/O์ฑ๋์ฒ๋ผ ๋ฐ๋ณต ์ฌ์ฉํ ์ ์๋ ์์ค๋ผ๋ฉด ์๋ก์ด ์คํธ๋ฆผ์ ๋ค์ ๋ง๋ค ์ ์๋ค.
4.3.2 ์ธ๋ถ ๋ฐ๋ณต๊ณผ ๋ด๋ถ ๋ฐ๋ณต
์ปฌ๋ ์ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด for-each ๋ฑ์ ์ฌ์ฉํด์ ์ฌ์ฉ์๊ฐ ์ง์ ์์๋ฅผ ๋ฐ๋ณตํ๋ ์ธ๋ถ ๋ฐ๋ณต์ ์ฌ์ฉํ๋ค.
๋ฐ๋ฉด ์คํธ๋ฆผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ฐ๋ณต์ ์์์ ์ฒ๋ฆฌํ๊ณ ๊ฒฐ๊ณผ ์คํธ๋ฆผ๊ฐ์ ์ด๋๊ฐ์ ์ ์ฅํด์ฃผ๋ ๋ด๋ถ ๋ฐ๋ณต์ ์ฌ์ฉํ๋ค.
๋ด๋ถ ๋ฐ๋ณต์ ์ฌ์ฉํ๋ฉด ์์ ์ ํฌ๋ช ํ๊ฒ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ๊ฑฐ๋ ๋ ์ต์ ํ๋ ๋ค์ํ ์์๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
4.4 ์คํธ๋ฆผ ์ฐ์ฐ
์คํธ๋ฆผ ์ธํฐํ์ด์ค์ ์ฐ์ฐ์ ํฌ๊ฒ ๋ ๊ฐ์ง๋ก ๊ตฌ๋ถํ ์ ์๋ค.
์ค๊ฐ ์ฐ์ฐ : filter, map, limit ๋ฑ์ผ๋ก ์๋ก ์ฐ๊ฒฐํ์ฌ ํ์ดํ๋ผ์ธ์ ํ์ฑํ๋ค.
์ต์ข ์ฐ์ฐ : collect๋ก ํ์ดํ๋ผ์ธ์ ์คํํ ๋ค์ ๋ซ๋๋ค.
4.4.1 ์ค๊ฐ ์ฐ์ฐ
์ค๊ฐ ์ฐ์ฐ์ ๋ค๋ฅธ ์คํธ๋ฆผ์ ๋ฐํํ๋ค. ๋ฐ๋ผ์ ์ฌ๋ฌ ์ค๊ฐ ์ฐ์ฐ์ ์ฐ๊ฒฐํด ์ง์๋ก ๋ง๋ค ์ ์๋ค.
์ค๊ฐ ์ฐ์ฐ์ ์ค์ํ ํน์ง์ ๋จ๋ง ์ฐ์ฐ์ ์คํธ๋ฆผ ํ์ดํ๋ผ์ธ์ ์คํํ๊ธฐ ์ ๊น์ง๋ ์๋ฌด ์ฐ์ฐ๋ ์ํํ์ง ์๋๋ค๋ ๊ฒ, ์ฆ ๊ฒ์ผ๋ฅด๋ค๋ ๊ฒ์ด๋ค. ์ค๊ฐ ์ฐ์ฐ์ ํฉ์น ๋ค์์ ํฉ์ณ์ง ์ค๊ฐ ์ฐ์ฐ์ ์ต์ข ์ฐ์ฐ์ผ๋ก ํ๋ฒ์ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ด๋ค.
์คํธ๋ฆผ์ ๊ฒ์ผ๋ฅธ ํน์ฑ ๋๋ถ์ ์ผํธ์ํท, ๋ฃจํ ํจ์ ๋ฑ์ ์ต์ ํ ํจ๊ณผ๋ฅผ ์ป์ ์ ์๋ค.(๋ค์ ์ฅ์์ ์์ธํ ์ค๋ช ํ๋ค)
4.4.2 ์ต์ข ์ฐ์ฐ
์ต์ข ์ฐ์ฐ์ ์คํธ๋ฆผ ํ์ดํ๋ผ์ธ์์ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํ๋ค. ์ด๋ฅผ ํตํด List, Integer, void ๋ฑ ์คํธ๋ฆผ ์ด์ธ์ ๊ฒฐ๊ณผ๊ฐ ๋ฐํ๋๋ค.
์๋ฅผ ๋ค์ด forEach๋ ์คํธ๋ฆผ์ ๊ฐ ์์์ ๋๋ค๋ฅผ ์ ์ฉํ ๋ค์ void๋ฅผ ๋ฐํํ๋ ์ต์ข ์ฐ์ฐ์ด๋ค.
Last updated