[Java] Java8: ์คํธ๋ฆผ(Stream)
์คํธ๋ฆผ์ ๋ฐฐ์ด ๊ฐ์ ์ฐ์ํ ๊ฐ๋ค์ ํ์ ๋ํ๊ฒ ์ฒ๋ฆฌํ ์ ์๊ฒ ํด์ฃผ๋ ์ ํธ์ฑ ํ์ค ๊ธฐ๋ฅ์ด๋ค.
map, filter, reduce ๋ฑ์ ํธ๋ฆฌํ ๋ฆฌ์คํธ ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ์ด์ฉํ ์ ์๋ค.
์๋ง ์ฌ๋งํด์๋ ๋ฐฐ์ด์ ๋ง์ด ๊ฐ๊ณตํ ํ ๋ฐ, Arrays.stream() ํน์ Stream.of์ Stream.toArray๋ก ์ํธ๊ฐ์ ๋ณํ์ด ๊ฐ๋ฅํ๋ค.
๋๊ฐ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ค.
map์ผ๋ก ๊ฐ ๊ฐ์ 2๋ฅผ ๊ณฑํ๋ ์ฝ๋๋ค.

๊ทผ๋ฐ ์๋ฐ ํน์ ์ ์ถ๋ก ๋ฅ๋ ฅ ๋ถ์กฑ์ผ๋ก toArray๋ Object ๋ฐฐ์ด๋ง์ ๋ฑ์ด์, ํ์ดํ์ ํด์ฃผ๋ ค๋ฉด ์์ ์ข ์จ์ผํ๋ค. ์๋์ฒ๋ผ ๋ง์ด๋ค.


๊ทธ๋ฆฌ๊ณ ๋ค์๊ณผ ๊ฐ์ด ๋ฉ์๋๋ค์ ์ฐ๊ฒฐํด์ ์ฌ์ฉํ ์๋ ์๋ค. filter๋ ์ฝ๋ฐฑํจ์๊ฐ true์ธ ๊ฒ๋ง ๋จ๊ธฐ๊ณ ๋ฒ๋ฆฐ๋ค.

๋จ, ์ ์ํ ์ ์ stream์ ๋ฉ์๋๋ฅผ ํ๋ฒ ํธ์ถํ๋ฉด ๊ฐ์ฒด ์์ ์ด ์ฃฝ์ด๋ฒ๋ฆฐ๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋์ ํด๋น ๋ฉ์๋๊ฐ ๋ฐํํ ๊ฐ์ผ๋ก ๋ค์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ์์ผ๋ก ์ฐ์ฐ์ ์ฐ๊ฒฐํด์ผ ํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด ์๋ฌ๋ฅผ ๋ฟ๋๋ค.


์ด์ธ์ reduce๋ ์ดํฉ ๊ฐ์๊ฑธ ๊ตฌํ๊ธฐ ์ข๋ค.


์ด์ธ์๋ ์๋ง์ ํธ์๊ธฐ๋ฅ์ด ๋ง์ผ๋, ๋ณดํต์ ์ด ์ธ๊ฐ์ง๋ฅผ ๋ง์ด ์ฐ๊ฒ ๋ ๊ฒ์ด๋ค.
๋๋จธ์ง ๊ธฐ๋ฅ๋ค์ ๋ ๋ณด๊ณ ์ถ๋ค๋ฉด ์๋ ์ฐธ์กฐ๋งํฌ๋ก ๋ค์ด๊ฐ๋ณด๊ธธ ๋ฐ๋๋ค.
์ฐธ์กฐ
https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html