Collector
์ปฌ๋ ํฐ๋ ๋ฌด์์ธ๊ฐ?
Collector ์ธํฐํ์ด์ค ๊ตฌํ์ ์คํธ๋ฆผ์ ์์๋ฅผ ์ด๋ค ์์ผ๋ก ๋์ถํ ์ง ์ง์ ํ๋ค.
๋ฆฌ์คํธ๋ฅผ ๋ง๋ค๊ธฐ์ํด toList๋ฅผ Collector ์ธํฐํ์ด์ค์ ๊ตฌํ์ผ๋ก ์ฌ์ฉํ๊ฑฐ๋ groupingBy๋ฅผ ์ด์ฉํด์ ๊ฐ ํค ๋ฒํท์ ๋์ํ๋ ์์ ๋ณ๋ก ๋งต์ ๋ง๋ค ์๋ ์๋ค.
6.1.1 ๊ณ ๊ธ ๋ฆฌ๋์ฑ ๊ธฐ๋ฅ์ ์ํํ๋ ์ปฌ๋ ํฐ
์ปฌ๋ ํฐ์ ์ต๋ ๊ฐ์ ์ collect๋ก ๊ฒฐ๊ณผ๋ฅผ ์์งํ๋ ๊ณผ์ ์ ๊ฐ๋จํ๋ฉด์๋ ์ ์ฐํ ๋ฐฉ์์ผ๋ก ์ ์ํ ์ ์๋ค๋ ์ ์ด๋ค.
์คํธ๋ฆผ์์ collect๋ฅผ ํธ์ถํ๋ฉด collect์์๋ ๋ฆฌ๋์ฑ ์ฐ์ฐ์ ์ด์ฉํด์ ์คํธ๋ฆผ์ ๊ฐ ์์๋ฅผ ๋ฐฉ๋ฌธํ๋ฉด์ ์ปฌ๋ ํฐ๊ฐ ์์ ์ ์ํํ๋ค.
๋ณดํต ํจ์๋ฅผ ์์๋ก ๋ณํํ ๋๋ ์ปฌ๋ ํฐ๋ฅผ ์ ์ฉํ๋ฉฐ ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ์ ๊ฐ์ ๋์ ํ๋ค.
6.1.2 ๋ฏธ๋ฆฌ ์ ์๋ ์ปฌ๋ ํฐ
Collectors ์ ํธ๋ฆฌํฐ ํด๋์ค๋ ์์ฃผ ์ฌ์ฉํ๋ ์ปฌ๋ ํฐ ์ธ์คํด์ค๋ฅผ ์์ฝ๊ฒ ์์ฑํ ์ ์๋ ์ ์ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค.
Collectors์์ ์ ๊ณตํ๋ ๋ฉ์๋์ ๊ธฐ๋ฅ์ ํฌ๊ฒ ์ธ ๊ฐ์ง๋ก ๊ตฌ๋ถ๋๋ค.
์คํธ๋ฆผ ์์๋ฅผ ํ๋์ ๊ฐ์ผ๋ก ๋ฆฌ๋์คํ๊ณ ์์ฝ
์์ ๊ทธ๋ฃนํ
์์ ๋ถํ
6.2 ๋ฆฌ๋์ฑ๊ณผ ์์ฝ
์ปฌ๋ ํฐ๋ก ์คํธ๋ฆผ์ ๋ชจ๋ ํญ๋ชฉ์ ํ๋์ ๊ฒฐ๊ณผ๋ก ํฉ์น ์ ์๋ค.
์ฒซ ๋ฒ์งธ ์์ ๋ก counting() ํฉํ ๋ฆฌ ๋ฉ์๋๊ฐ ๋ฐํํ๋ ์ปฌ๋ ํฐ๋ฅผ ์ฌ์ฉํด๋ณด์.
6.2.1 ์คํธ๋ฆผ ๊ฐ์์ ์ต๋๊ฐ๊ณผ ์ต์๊ฐ ๊ฒ์
Collectors.maxBy, Collectors.minBy ๋ฉ์๋๋ฅผ ์ด์ฉํด์ ์คํธ๋ฆผ์ ์ต๋๊ฐ๊ณผ ์ต์๊ฐ์ ๊ณ์ฐํ ์ ์๋ค.
๋ ์ปฌ๋ ํฐ๋ ์คํธ๋ฆผ์ ์์๋ฅผ ๋น๊ตํ๋ ๋ฐ ์ฌ์ฉํ Comparator๋ฅผ ์ธ์๋ก ๋ฐ๋๋ค.
์คํธ๋ฆผ์ ์๋ ๊ฐ์ฒด์ ์ซ์ ํ๋์ ํฉ๊ณ๋ ํ๊ท ๋ฑ์ ๋ฐํํ๋ ์ฐ์ฐ์๋ ๋ฆฌ๋์ฑ ๊ธฐ๋ฅ์ด ์์ฃผ ์ฌ์ฉ๋๋ค. ์ด๋ฌํ ์ฐ์ฐ์ ์์ฝ ์ฐ์ฐ์ด๋ผ ๋ถ๋ฅธ๋ค.
6.2.2 ์์ฝ ์ฐ์ฐ
Collectors ํด๋์ค๋ Collectors.summingInt๋ผ๋ ํน๋ณํ ์์ฝ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค.
summingInt๋ ๊ฐ์ฒด๋ฅผ int๋ก ๋งคํํ๋ ํจ์๋ฅผ ์ธ์๋ก ๋ฐ์ผ๋ฉฐ, ์ธ์๋ก ์ ๋ฌ๋ ํจ์๋ ๊ฐ์ฒด๋ฅผ int๋ก ๋งคํํ ์ปฌ๋ ํฐ๋ฅผ ๋ฐํํ๋ค. ๊ทธ๋ฆฌ๊ณ summingInt๊ฐ collect ๋ฉ์๋๋ก ์ ๋ฌ๋๋ฉด ์์ฝ ์์ ์ ์ํํ๋ค.
๋ค์์ ๋ฉ๋ด ๋ฆฌ์คํธ์ ์ด ์นผ๋ก๋ฆฌ๋ฅผ ๊ณ์ฐํ๋ ์ฝ๋๋ค.
์ด๋ฌํ ๋จ์ ํฉ๊ณ ์ธ์ ํ๊ท ๊ฐ ๊ณ์ฐ ๋ฑ์ ์ฐ์ฐ๋ ์์ฝ ๊ธฐ๋ฅ์ผ๋ก ์ ๊ณต๋๋ค.
๋ง์ฝ ๋๊ฐ ์ด์์ ์ฐ์ฐ์ด ํ๋ฒ์ ์ํ๋์ด์ผ ํ๋ค๋ฉด summarizingInt๊ฐ ๋ฐํํ๋ ์ปฌ๋ ํฐ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
6.2.3 ๋ฌธ์์ด ์ฐ๊ฒฐ
์ปฌ๋ ํฐ์ joining ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ด์ฉํ๋ฉด ์คํธ๋ฆผ์ ๊ฐ ๊ฐ์ฒด์ toString ๋ฉ์๋๋ฅผ ํธ์ถํด์ ์ถ์ถํ ๋ชจ๋ ๋ฌธ์์ด์ ํ๋์ ๋ฌธ์์ด๋ก ์ฐ๊ฒฐํด์ ๋ฐํํ๋ค.
์ฐ๊ฒฐ๋ ๋ ์์ ๊ฐ์ ๊ตฌ๋ถ ๋ฌธ์์ด์ ๋ฃ์ ์ ์๋๋ก ์ค๋ฒ๋ก๋๋ joining ํฉํ ๋ฆฌ ๋ฉ์๋๋ ์๋ค.
6.2.4 ๋ฒ์ฉ ๋ฆฌ๋์ฑ ์์ฝ ์ฐ์ฐ
์ง๊ธ๊น์ง ์ดํด๋ณธ ๋ชจ๋ ์ปฌ๋ ํฐ๋ reducing ํฉํ ๋ฆฌ ๋ฉ์๋๋ก๋ ์ ์ํ ์ ์๋ค.
์๋ฅผ ๋ค์ด ๋ค์ ์ฝ๋์ฒ๋ผ reducing ๋ฉ์๋๋ก ๋ง๋ค์ด์ง ์ปฌ๋ ํฐ๋ก๋ ๋ฉ๋ด์ ๋ชจ๋ ์นผ๋ก๋ฆฌ ํฉ๊ฒ๋ฅผ ๊ฒ์ฐํ ์ ์๋ค.
๋๋ ํ ๊ฐ์ ์ธ์๋ฅผ ๊ฐ์ง reducing ๋ฒ์ ์ ์ด์ฉํด์ ๊ฐ์ฅ ์นผ๋ก๋ฆฌ๊ฐ ๋์ ์๋ฆฌ๋ฅผ ์ฐพ์ ์๋ ์๋ค.
์ปฌ๋ ์ ํ๋ ์์ํฌ ์ ์ฐ์ฑ : ๊ฐ์ ์ฐ์ฐ๋ ๋ค์ํ ๋ฐฉ์์ผ๋ก ์ํํ ์ ์๋ค.
์ด์ ์์ ์์ ๋๋ค ํํ์ ๋์ Integer ํด๋์ค์ sum ๋ฉ์๋ ์ฐธ์กฐ๋ฅผ ์ด์ฉํ๋ฉด ์ฝ๋๋ฅผ ์ข ๋ ๋จ์ํํ ์ ์๋ค.
counting ์ปฌ๋ ํฐ๋ ์ธ ๊ฐ์ ์ธ์๋ฅผ ๊ฐ๋ reducing ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ด์ฉํด์ ๊ตฌํํ ์ ์๋ค.
์์ ์ ์ํฉ์ ๋ง๋ ์ต์ ์ ํด๋ฒ ์ ํ
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์์๋ ํ๋์ ์ฐ์ฐ์ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐํ ์ ์๋ค.
์ปฌ๋ ํฐ๋ฅผ ์ด์ฉํ๋ฉด ์คํธ๋ฆผ ์ธํฐํ์ด์ค์์ ์ง์ ์ ๊ณตํ๋ ๋ฉ์๋๋ฅผ ์ด์ฉํ๋ ๊ฒ์ ๋นํด ์ฝ๋๊ฐ ๋ณต์กํด์ง์ง๋ง,
์ฌ์ฌ์ฉ์ฑ๊ณผ ์ปค์คํฐ๋ง์ด์ฆ ๊ฐ๋ฅ์ฑ์ ์ ๊ณตํ๋ ๋์ ์์ค์ ์ถ์ํ์ ์ผ๋ฐํ๋ฅผ ์ป์ ์ ์๋ค.
6.3๊ทธ๋ฃนํ
์๋ฐ8์ ํจ์ํ์ ์ด์ฉํ๋ฉด ๊ฐ๋ ์ฑ ์๋ ํ ์ค ์ฝ๋๋ก ๊ทธ๋ฃนํ๋ฅผ ๊ตฌํํ ์ ์๋ค.
์คํธ๋ฆผ์ ๊ฐ ์๋ฆฌ์์ Dish.Type๊ณผ ์ผ์นํ๋ ๋ชจ๋ ์๋ฆฌ๋ฅผ ์ถ์ถํ๋ ํจ์๋ฅผ groupbingBy ๋ฉ์๋๋ก ์ ๋ฌํ๋ค.
์ด ํจ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์คํธ๋ฆผ์ด ๊ทธ๋ฃนํ๋๋ฏ๋ก ์ด๋ฅผ ๋ถ๋ฅํจ์๋ผ๊ณ ๋ถ๋ฅธ๋ค.
๋จ์ํ ์์ฑ ์ ๊ทผ์ ๋์ ๋ ๋ณต์กํ ๋ถ๋ฅ ๊ธฐ์ค์ด ํ์ํ ์ํฉ์์๋ ๋ฉ์๋ ์ฐธ์กฐ๋ฅผ ๋ถ๋ฅ ํจ์๋ก ์ฌ์ฉํ ์ ์๋ค.
์๋ฅผ ๋ค์ด 400 ์นผ๋ก๋ฆฌ ์ดํ๋ฅผ 'diet', 400~700์นผ๋ก๋ฆฌ๋ฅผ 'normal', 700์นผ๋ก๋ฆฌ ์ด์์ 'fat' ์๋ฆฌ๋ก ๋ถ๋ฅํ๋ค ๊ฐ์ ํด๋ณด์.
6.3.1 ๊ทธ๋ฃนํ๋ ์์ ์กฐ์
์์๋ฅผ ๊ทธ๋ฃนํ ํ ๋ค์์๋ ๊ฐ ๊ฒฐ๊ณผ ๊ทธ๋ฃน์ ์์๋ฅผ ์กฐ์ํ๋ ์ฐ์ฐ์ด ํ์ํ๋ค.
์๋ฅผ ๋ค์ด 500์นผ๋ก๋ฆฌ๊ฐ ๋๋ ์๋ฆฌ๋ง ํํฐํ๋ค๊ณ ๊ฐ์ ํ์. ๋ค์ ์ฝ๋์ฒ๋ผ ๊ทธ๋ฃนํ๋ฅผ ํ๊ธฐ ์ ์ ํ๋ ๋์ผ์ดํธ๋ก ํํฐ๋ฅผ ์ ์ฉํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค๊ณ ์๊ฐํ ๊ฒ์ด๋ค.
์ ์ฝ๋๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ง๋ง, ํํฐ ํ๋ ๋์ผ์ดํธ๋ฅผ ๋ง์กฑํ๋ FISH ์ข ๋ฅ ์๋ฆฌ๋ ์์ผ๋ฏ๋ก ๊ฒฐ๊ณผ ๋งต์์ ํด๋น ํค ์์ฒด๊ฐ ์ฌ๋ผ์ง๋ค.
ํํฐ ํ๋ ๋์ผ์ดํธ๋ฅผ groupingBy ํฉํ ๋ฆฌ ๋ฉ์๋์ ์ธ์๋ก ์ฌ์ฉํ๋ฉด ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
filtering ๋ฉ์๋๋ Collectors ํด๋์ค์ ๋๋ค๋ฅธ ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ก ํ๋ ๋์ผ์ดํธ๋ฅผ ์ธ์๋ก ๋ฐ๋๋ค. ์ด ํ๋ ๋์ผ์ดํธ๋ก ๊ฐ ๊ทธ๋ฃน์ ์์์ ํํฐ๋ง๋ ์์๋ฅผ ์ฌ๊ทธ๋ฃนํํ๋ค.
๊ทธ๋ฃนํ๋ ํญ๋ชฉ์ ์กฐ์ํ๋ ๋ค๋ฅธ ์ ์ฉํ ๊ธฐ๋ฅ ์ค ํ๋๋ ๋งคํ ํจ์๋ฅผ ์ด์ฉํด ์์๋ฅผ ๋ณํํ๋ ์์ ์ด๋ค.
๊ฐ ๊ทธ๋ฃน์ด ๋ฆฌ์คํธ ํํ๋ผ๋ฉด flatMap ๋ณํ์ ์ฌ์ฉํด์ ์ถ์ถํ ์๋ ์๋ค.
6.3.2 ๋ค์์ค ๊ทธ๋ฃนํ
๋ ์ธ์๋ฅผ ๋ฐ๋ ํฉํ ๋ฆฌ ๋ฉ์๋ Collectors.groupingBy๋ฅผ ์ด์ฉํด์ ํญ๋ชฉ์ ๋ค์์ค์ผ๋ก ๊ทธ๋ฃนํํ ์ ์๋ค.
์ธ๋ถ ๋งต์ ์ฒซ ๋ฒ์งธ ์์ค์ ๋ถ๋ฅํจ์์์ ๋ถ๋ฅํ ํค๊ฐ 'fish, meat, other'๋ฅผ ๊ฐ์ง๋ฉฐ, ๋ด๋ถ ๋งต์ ๋ ๋ฒ์งธ ๋ถ๋ฅ ํจ์์ ํค๊ฐ 'normal, diet, fat'์ ๊ฐ์ง๋ค.
๋ณดํต groupingBy์ ์ฐ์ฐ์ '๋ฒํท(๋ฌผ๊ฑด์ ๋ด์ ์ ์๋ ์๋์ด)' ๊ฐ๋ ์ผ๋ก ์๊ฐํ๋ฉด ์ฝ๋ค.
์ฒซ ๋ฒ์งธ groupingBy๋ ๊ฐ ํค์ ๋ฒํท์ ๋ง๋ ๋ค. ๊ทธ๋ฆฌ๊ณ ์ค๋น๋ ๊ฐ๊ฐ์ ๋ฒํท์ ์๋ธ์คํธ๋ฆผ ์ปฌ๋ ํฐ๋ก ์ฑ์๊ฐ๊ธฐ๋ฅผ ๋ฐ๋ณตํ๋ฉด์ n์์ค ๊ทธ๋ฃนํ๋ฅผ ๋ฌ์ฑํ๋ค.
6.3.3 ์๋ธ๊ทธ๋ฃน์ผ๋ก ๋ฐ์ดํฐ ์์ง
groupingBy ๋ฉ์๋์ ๋๋ฒ์งธ ์ธ์๋ก ์ ๋ฌ๋ฐ๋ ์ปฌ๋ ํฐ์ ํ์์ ์ ํ์ด ์๋ค.
๋ถ๋ฅ ํจ์ ํ๊ฐ์ ์ธ์๋ฅผ ๊ฐ๋ groupingBy(f)๋ groupingBy(f, toList())์ ์ถ์ฝํ์ผ ๋ฟ์ด๋ฉฐ, ๋ค์ํ ์ปฌ๋ ํฐ๋ฅผ ์ ๋ฌ๋ฐ์ ์ ์๋ค.
์ปฌ๋ ํฐ ๊ฒฐ๊ณผ๋ฅผ ๋ค๋ฅธ ํ์์ ์ ์ฉํ๊ธฐ
๋ง์ง๋ง ๊ทธ๋ฃนํ ์ฐ์ฐ์์ ๋งต์ ๋ชจ๋ ๊ฐ์ Optional๋ก ๊ฐ์ ํ์๊ฐ ์์ผ๋ฏ๋ก Optional์ ์ญ์ ํ ์ ์๋ค.
Collectors.collectingAndThen ํฉํ ๋ฆฌ ๋ฉ์๋๋ก ์ปฌ๋ ํฐ๊ฐ ๋ฐํํ ๊ฒฐ๊ณผ๋ฅผ ๋ค๋ฅธ ํ์์ผ๋ก ํ์ฉํ ์ ์๋ค.
groupingBy์ ํจ๊ผ ์ฌ์ฉํ๋ ๋ค๋ฅธ ์ปฌ๋ ํฐ ์์
์ผ๋ฐ์ ์ผ๋ก ์คํธ๋ฆผ์์ ๊ฐ์ ๊ทธ๋ฃน์ผ๋ก ๋ถ๋ฅ๋ ๋ชจ๋ ์์์ ๋ฆฌ๋์ฑ ์์ ์ ์ํํ ๋์๋ ํฉํ ๋ฆฌ ๋ฉ์๋ groupingBy์ ๋ ๋ฒ์งธ ์ธ์๋ก ์ ๋ฌํ ์ปฌ๋ ํฐ๋ฅผ ์ฌ์ฉํ๋ค.
์ด ์ธ์๋ mapping ๋ฉ์๋๋ก ๋ง๋ค์ด์ง ์ปฌ๋ ํฐ๋ groupingBy์ ์์ฃผ ์ฌ์ฉ๋๋ค.
mapping์ ์ ๋ ฅ ์์๋ฅผ ๋์ ํ๊ธฐ ์ ์ ๋งคํ ํจ์๋ฅผ ์ ์ฉํด์ ๋ค์ํ ํ์์ ๊ฐ์ฒด๋ฅผ ์ฃผ์ด์ง ํ์์ ์ปฌ๋ ํฐ์ ๋ง๊ฒ ๋ณํํ๋ค.
6.4 ๋ถํ
๋ถํ ์ ๋ถํ ํจ์๋ผ ๋ถ๋ฆฌ๋ ํ๋ ๋์ผ์ดํธ๋ฅผ ๋ถ๋ฅ ํจ์๋ก ์ฌ์ฉํ๋ ํน์ํ ๊ทธ๋ฃนํ ๊ธฐ๋ฅ์ด๋ค.
๋ถํ ํจ์๋ ๋ถ๋ฆฌ์ธ์ ๋ฐํํ๋ฏ๋ก ๋งต์ ํค ํ์์ Boolean์ด๋ฉฐ, ์ฐธ ๋๋ ๊ฑฐ์ง์ ๊ฐ๋ ๋ ๊ฐ์ ๊ทธ๋ฃน์ผ๋ก ๋ถ๋ฅ๋๋ค.
true ๊ฐ์ ํค๋ก ๋งต์์ ๋ชจ๋ ์ฑ์ ์๋ฆฌ๋ฅผ ์ป์ ์ ์๋ค.
๋ฉ๋ด ๋ฆฌ์คํธ๋ก ์์ฑํ ์คํธ๋ฆผ์ ํ๋ ๋์ผ์ดํธ๋ก ํํฐ๋งํด๋ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค.
6.4.1 ๋ถํ ์ ์ฅ์
๋ถํ ํจ์๊ฐ ๋ฐํํ๋ ์ฐธ, ๊ฑฐ์ง ๋ ๊ฐ์ง ์์์ ์คํธ๋ฆผ ๋ฆฌ์คํธ๋ฅผ ๋ชจ๋ ์ ์งํ๋ค๋ ๊ฒ์ด ๋ถํ ํจ์์ ์ฅ์ ์ด๋ค.
๋ํ ์ปฌ๋ ํฐ๋ฅผ ๋ ๋ฒ์งธ ์ธ์๋ก ์ ๋ฌํ ์ ์๋ ์ค๋ฒ๋ก๋๋ ๋ฒ์ ์ partitioningBy ๋ฉ์๋๋ ์๋ค.
์ด์ ์ฝ๋๋ฅผ ํ์ฉํ๋ฉด ์ฑ์ ์๋ฆฌ์ ์ฑ์์ด ์๋ ์๋ฆฌ์ ๊ฐ๊ฐ์ ๊ทธ๋ฃน์์ ๊ฐ์ฅ ์นผ๋ก๋ฆฌ๊ฐ ๋์ ์๋ฆฌ๋ ์ฐพ์ ์ ์๋ค.
6.4.2 ์ซ์๋ฅผ ์์์ ๋น์์๋ก ๋ถํ ํ๊ธฐ
์ ์ n์ ์ธ์๋ก ๋ฐ์์ 2์์ n๊น์ง์ ์์ฐ์๋ฅผ ์์์ ๋น์์๋ก ๋๋๋ ํ๋ก๊ทธ๋จ์ ๊ตฌํํ์.
๋จผ์ ์ฃผ์ด์ง ์๊ฐ ์์์ธ์ง ์๋์ง ํ๋ณํ๋ ํ๋ ๋์ผ์ดํธ๋ฅผ ๊ตฌํํ๋ค.
๋ค์์ฒ๋ผ ์์์ ๋์์ ์ฃผ์ด์ง ์์ ์ ๊ณฑ๊ทผ ์ดํ์ ์๋ก ์ ํํ ์ ์๋ค.
์ด์ n๊ฐ์ ์ซ์๋ฅผ ํฌํจํ๋ ์คํธ๋ฆผ์ ๋ง๋ ๋ค์, isPrime ๋ฉ์๋๋ฅผ ํ๋ ๋์ผ์ดํธ๋ก ์ด์ฉํ๊ณ partitioningBy ์ปฌ๋ ํฐ๋ก ๋ฆฌ๋์คํด์ ์ซ์๋ฅผ ์์์ ๋น์์๋ก ๋ถํ ํ ์ ์๋ค.
6.5 Collector ์ธํฐํ์ด์ค
Collector ์ธํฐํ์ด์ค๋ ๋ฆฌ๋์ฑ ์ฐ์ฐ(์ฆ, ์ปฌ๋ ํฐ)์ ์ด๋ป๊ฒ ๊ตฌํํ ์ง ์ ๊ณตํ๋ ๋ฉ์๋ ์งํฉ์ผ๋ก ๊ตฌ์ฑ๋๋ค.
Collector ์ธํฐํ์ด์ค๋ฅผ ์ดํด๋ณด๊ธฐ ์ ์ 6์ฅ์ ์์ํ๋ฉด์ ์ดํด๋ณธ ํฉํ ๋ฆฌ ๋ฉ์๋์ธ toList๋ฅผ ์์ธํ ํ์ธํ์.
๋ค์ ์ฝ๋๋ Collector ์ธํฐํ์ด์ค์ ์๊ทธ๋์ฒ์ ๋ค์ฏ ๊ฐ์ ๋ฉ์๋ ์ ์๋ฅผ ๋ณด์ฌ์ค๋ค.
์ ์ฝ๋๋ ๋ค์์ฒ๋ผ ์ค๋ช ํ ์ ์๋ค.
T๋ ์์ง๋ ์คํธ๋ฆผ ํญ๋ชฉ์ ์ ๋ค๋ฆญ ํ์์ด๋ค.
A๋ ๋์ ์. ์ฆ ์์ง ๊ณผ์ ์์ ์ค๊ฐ ๊ฒฐ๊ณผ๋ฅผ ๋์ ํ๋ ๊ฐ์ฒด์ ํ์์ด๋ค.
R์ ์์ง ์ฐ์ฐ ๊ฒฐ๊ณผ ๊ฐ์ฒด์ ํ์(ํญ์ ๊ทธ๋ฐ๊ฒ์ ์๋์ง๋ง ๋๊ฒ ์ปฌ๋ ์ ํ์)์ด๋ค.
์๋ฅผ ๋ค์ด Stream<T>์ ๋ชจ๋ ์์๋ฅผ List<T>๋ก ์์งํ๋ ToListCollector<T>๋ผ๋ ํด๋์ค๋ฅผ ๊ตฌํํ ์ ์๋ค.
6.5.1 Collector ์ธํฐํ์ด์ค์ ๋ฉ์๋ ์ดํด๋ณด๊ธฐ
supplier ๋ฉ์๋ : ์๋ก์ด ๊ฒฐ๊ณผ ์ปจํ ์ด๋ ๋ง๋ค๊ธฐ
supplier ๋ฉ์๋๋ ๋น ๊ฒฐ๊ณผ๋ก ์ด๋ฃจ์ด์ง Supplier๋ฅผ ๋ฐํํด์ผ ํ๋ค. ์ฆ, ์์ง ๊ณผ์ ์์ ๋น ๋์ ์ ์ธ์คํด์ค๋ฅผ ๋ง๋๋ ํ๋ผ๋ฏธํฐ๊ฐ ์๋ ํจ์๋ค.
ToListCollector์ฒ๋ผ ๋์ ์๋ฅผ ๋ฐํํ๋ ์ปฌ๋ ํฐ์์๋ ๋น ๋์ ์๊ฐ ๋น์ด์๋ ์คํธ๋ฆผ์ ์์ง ๊ณผ์ ์ ๊ฒฐ๊ณผ๊ฐ ๋ ์ ์๋ค.
accumlator ๋ฉ์๋ : ๊ฒฐ๊ณผ ์ปจํ ์ด๋์ ์์ ์ถ๊ฐํ๊ธฐ
accumlator ๋ฉ์๋๋ ๋ฆฌ๋์ฑ ์ฐ์ฐ์ ์ํํ๋ ํจ์๋ฅผ ๋ฐํํ๋ค. ์คํธ๋ฆผ์์ n๋ฒ์งธ ์์๋ฅผ ํ์ํ ๋ ๋ ์ธ์, ์ฆ ๋์ ์(n-1๋ฒ์งธ ํญ๋ชฉ๊น์ง ์์งํ ์ํ)์ n๋ฒ์งธ ์์๋ฅผ ํจ์์ ์ ์ฉํ๋ค.
ํจ์์ ๋ฐํ๊ฐ์ void, ์ฆ ์์๋ฅผ ํ์ํ๋ฉด์ ์ ์ฉํ๋ ํจ์์ ์ํด ๋์ ์ ๋ด๋ถ ์ํ๊ฐ ๋ฐ๋๋ฏ๋ก ๋์ ์๊ฐ ์ด๋ค ๊ฐ์ผ์ง ๋จ์ ํ ์ ์๋ค.
finisher ๋ฉ์๋ : ์ต์ข ๋ณํ๊ฐ์ ๊ฒฐ๊ณผ ์ปจํ ์ด๋๋ก ์ ์ฉํ๊ธฐ
finisher ๋ฉ์๋๋ ์คํธ๋ฆผ ํ์์ ๋๋ด๊ณ ๋์ ์ ๊ฐ์ฒด๋ฅผ ์ต์ข ๊ฐ์ฒด๋ก ๋ณํํ๋ฉด์ ๋์ ๊ณผ์ ์ ๋๋ผ ๋ ํธ์ถํ ํจ์๋ฅผ ๋ฐํํด์ผ ํ๋ค.
combiner ๋ฉ์๋ : ๋ ๊ฒฐ๊ณผ ์ปจํ ์ด๋ ๋ณํฉ
combiner๋ ์คํธ๋ฆผ์ ์๋ก ๋ค๋ฅธ ์๋ธํํธ๋ฅผ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ ๋ ๋์ ์๊ฐ ์ด ๊ฒฐ๊ณผ๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ง ์ ์ํ๋ค.
toList์ combiner๋ ๋น๊ต์ ์ฝ๊ฒ ๊ตฌํํ ์ ์์ผ๋ฉฐ, ์คํธ๋ฆผ์ ๋ ๋ฒ์งธ ์๋ธ ํํธ์์ ์์งํ ํญ๋ชฉ ๋ฆฌ์คํธ๋ฅผ ์ฒซ ๋ฒ์งธ ์๋ธํํธ ๊ฒฐ๊ณผ ๋ฆฌ์คํธ์ ๋ค์ ์ถ๊ฐํ๋ฉด ๋๋ค.
์ด ๋ฉ์๋๋ฅผ ์ด์ฉํ๋ฉด ์คํธ๋ฆผ์ ๋ฆฌ๋์ฑ์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
๋ณ๋ ฌ ๋ฆฌ๋์ฑ ์ํ ๊ณผ์
์คํธ๋ฆผ์ ๋ถํ ํด์ผ ํ๋์ง ์ ์ํ๋ ์กฐ๊ฑด์ด ๊ฑฐ์ง์ผ๋ก ๋ฐ๋๊ธฐ ์ ๊น์ง ์๋ ์คํธ๋ฆผ์ ์ฌ๊ท์ ์ผ๋ก ๋ถํ ํ๋ค.
๋ชจ๋ ์๋ธ์คํธ๋ฆผ์ ๊ฐ ์์์ ๋ฆฌ๋์ฑ ์ฐ์ฐ์ ์์ฐจ์ ์ผ๋ก ์ ์ฉํด์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ๋ค.
์ปฌ๋ ํฐ์ combiner ๋ฉ์๋๊ฐ ๋ฐํํ๋ ํจ์๋ก ๋ชจ๋ ๋ถ๋ถ๊ฒฐ๊ณผ๋ฅผ ์์ผ๋ก ํฉ์น๋ค.
Characteristics ๋ฉ์๋
characteristics ๋ฉ์๋๋ ์ปฌ๋ ํฐ์ ์ฐ์ฐ์ ์ ์ํ๋ Characteristics ํ์์ ๋ถ๋ณ ์งํฉ์ ๋ฐํํ๋ค.
Characteristics๋ ์คํธ๋ฆผ์ ๋ณ๋ ฌ๋ก ๋ฆฌ๋์ค ํ ์ง์ ๋ณ๋ ฌ๋ก ๋ฆฌ๋์คํ๋ค๋ฉด ์ด๋ค ์ต์ ํ๋ฅผ ์ ํํด์ผํ ์ง ํํธ๋ฅผ ์ ๊ณตํ๋ค.
Characteristics์ ํญ๋ชฉ
UNORDERED : ๋ฆฌ๋์ฑ ๊ฒฐ๊ณผ๋ ์คํธ๋ฆผ ์์์ ๋ฐฉ๋ฌธ ์์๋ ๋์ ์์์ ์ํฅ์ ๋ฐ์ง ์๋๋ค.
CONCURRENT : ๋ค์ค ์ค๋ ๋์์ accumulator ํจ์๋ฅผ ํธ์ถํ ์ ์์ผ๋ฉฐ ์ด ์ปฌ๋ ํฐ๋ ์คํธ๋ฆผ์ ๋ณ๋ ฌ ๋ฆฌ๋์ฑ์ ์ํํ ์ ์๋ค. ์ปฌ๋ ํฐ์ ํ๋๊ทธ์ UNORDERED๋ฅผ ํจ๊ป ์ค์ ํ์ง ์์๋ค๋ฉด ๋ฐ์ดํฐ ์์ค๊ฐ ์ ๋ ฌ๋์ด์์ง ์์ ์ํฉ์์๋ง ๋ณ๋ ฌ ๋ฆฌ๋์ฑ์ ์ํํ ์ ์๋ค.
IDENTITY_FINISH : finisher ๋ฉ์๋๊ฐ ๋ฐํํ๋ ํจ์๋ ๋จ์ํ identity๋ฅผ ์ ์ฉํ ๋ฟ์ด๋ฏ๋ก ์ด๋ฅผ ์๋ตํ ์ ์๋ค. ๋ฐ๋ผ์ ๋ฆฌ๋์ฑ ๊ณผ์ ์ ์ต์ข ๊ฒฐ๊ณผ๋ก ๋์ ์ ๊ฐ์ฒด๋ฅผ ๋ฐ๋ก ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ๋์ ์ A๋ฅผ ๊ฒฐ๊ณผ R๋ก ์์ ํ๊ฒ ํ๋ณํํ ์ ์๋ค.
6.5.2 ์์ฉํ๊ธฐ
์ง๊ธ๊น์ง ์ดํด๋ณธ ๋ค์ฏ ๊ฐ์ง ๋ฉ์๋๋ฅผ ์ด์ฉํด์ ์์ ๋ง์ ์ปค์คํ toListCollector๋ฅผ ๊ตฌํํ ์ ์๋ค.
์ปฌ๋ ํฐ ๊ตฌํ์ ๋ง๋ค์ง ์๊ณ ๋ ์ปค์คํ ์์ง ์ํํ๊ธฐ
IDENTITY_FINISH ์์ง ์ฐ์ฐ์์๋ Collector ์ธํฐํ์ด์ค๋ฅผ ์์ ํ ์๋ก ๊ตฌํํ์ง ์๊ณ ๋ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค.
Stream์ ์ธ ํจ์(๋ฐํ, ๋์ , ํฉ์นจ)๋ฅผ ์ธ์๋ก ๋ฐ๋ collect ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ก๋ํ์ฌ ๊ฐ๊ฐ์ ๋ฉ์๋๋ Collector ์ธํฐํ์ด์ค์ ๋ฉ์๋๊ฐ ๋ฐํํ๋ ํจ์์ ๊ฐ์ ๊ธฐ๋ฅ์ ์ํํ๋ค.
6.6 ์ปค์คํ
์ปฌ๋ ํฐ๋ฅผ ๊ตฌํํด์ ์ฑ๋ฅ ๊ฐ์ ํ๊ธฐ
์ด์ ์์ ์์ n๊น์ง์ ์์ฐ์๋ฅผ ์์์ ๋น์์๋ก ๋ถํ ํ๋ ์ปค์คํ ์ปฌ๋ ํฐ๋ฅผ ๋ง๋ค์๋ค.
์ปค์คํ ์ปฌ๋ ํฐ๋ฅผ ์ด์ฉํด์ ์ฑ๋ฅ์ ๋ ๊ฐ์ ํด๋ณด์.
6.6.1 ์์๋ก๋ง ๋๋๊ธฐ
์ฐ์ ์์๋ก ๋๋์ด๋จ์ด์ง๋์ง ํ์ธํด์ ๋์์ ๋ฒ์๋ฅผ ์ขํ ์ ์๋ค.
์ ์๊ฐ ์์๊ฐ ์๋๋ฉด ์์ฉ์์ผ๋ฏ๋ก ์ ์๋ฅผ ํ์ฌ ์ซ์ ์ดํ์์ ๋ฐ๊ฒฌํ ์์๋ก ์ ํํ ์ ์์ผ๋ฉฐ, ์ฃผ์ด์ง ์ซ์๊ฐ ์์์ธ์ง ํ์ธํ๊ธฐ ์ํด ์ง๊ธ๊น์ง ๋ฐ๊ฒฌํ ์์ ๋ฆฌ์คํธ์ ์ ๊ทผํด์ผํ๋ค.
์ฐ๋ฆฌ๊ฐ ์ดํด๋ณธ ์ปฌ๋ ํฐ๋ก๋ ์ปฌ๋ ํฐ ์์ง ๊ณผ์ ์์ ๋ถ๋ถ ๊ฒฐ๊ณผ์ ์ ๊ทผํ ์ ์์ง๋ง, ์ปค์คํ ์ปฌ๋ ํฐ ํด๋์ค๋ฅผ ์ฌ์ฉํด์ ํด๊ฒฐํ ์ ์๋ค.
์ด๋ฒ์๋ ๋์ ์ซ์์ ์ ๊ณฑ๊ทผ๋ณด๋ค ์์ ์์๋ง ์ฌ์ฉํ๋๋ก ์ฝ๋๋ฅผ ์ต์ ํํด์ผํ๋ค.
filter(p -> p <= candidtaRoot)๋ฅผ ์ด์ฉํด์ ๋์์ ๋ฃจํธ๋ณด๋ค ์์ ์์๋ฅผ ํํฐ๋ง ํ ์ ์์ง๋ง, filter๋ ์ ์ฒด ์คํธ๋ฆผ์ ์ฒ๋ฆฌํ ๋ค์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํด์ผ ํ๋ค.
๋์์ ์ ๊ณฑ๋ณด๋ค ํฐ ์์๋ฅผ ์ฐพ์ผ๋ฉด ๊ฒ์ฌ๋ฅผ ์ค๋จํ๊ธฐ ์ํด์๋ talkWhile ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
talkWhile ๋ฉ์๋๋ ์๋ฐ9๋ถํฐ ์ง์ํ๋ ๊ธฐ๋ฅ์ด๋ค. ์๋ฐ 8์์๋ ์ง์ ๊ตฌํํด์ผํ๋ค.
๊ฒ์ผ๋ฅธ ๋ฒ์ ์ ์คํธ๋ฆผ API์ ๋ฌ๋ฆฌ ์ง์ ๊ตฌํํ talkWhile ๋ฉ์๋๋ ์ ๊ทน์ ์ผ๋ก ๋์ํ๋ค.
์๋ก์ด isPrime ๋ฉ์๋๋ฅผ ๊ตฌํํ์ผ๋ ๋ณธ๊ฒฉ์ ์ผ๋ก ์ปค์คํ ์ปฌ๋ ํฐ๋ฅผ ๊ตฌํํ์. Collector ํด๋์ค๋ฅผ ์ ์ธํ๊ณ Collector ์ธํฐํ์ด์ค์์ ์๊ตฌํ๋ ๋ฉ์๋ ๋ค์ฏ ๊ฐ๋ฅผ ๊ตฌํํด์ผํ๋ค.
1๋จ๊ณ : Collector ํด๋์ค ์๊ทธ๋์ฒ ์ ์
T๋ ์คํธ๋ฆผ ์์์ ํ์, A๋ ์ค๊ฐ ๊ฒฐ๊ณผ๋ฅผ ๋์ ํ๋ ๊ฐ์ฒด์ ํ์, R์ collect ์ฐ์ฐ์ ์ต์ข ๊ฒฐ๊ณผ ํ์์ ์๋ฏธํ๋ค.
์์์ ๋น์์๋ฅผ ์ฐธ๊ณผ ๊ฑฐ์ง์ผ๋ก ๋๋๊ธฐ ์ํด ์ ์๋ก ์ด๋ฃจ์ด์ง ์คํธ๋ฆผ์์ ๋์ ์์ ์ต์ข ๊ฒฐ๊ณผ ํ์์ด Map<Boolean, List<Integer>>์ธ ์ปฌ๋ ํฐ๋ฅผ ๊ตฌํํด์ผ ํ๋ค.
2๋จ๊ณ : ๋ฆฌ๋์ฑ ์ฐ์ฐ ๊ตฌํ
๋จผ์ supplier ๋ฉ์๋๋ก ๋์ ์๋ฅผ ๋ง๋๋ ํจ์๋ฅผ ๋ฐํํด์ผ ํ๋ค.
์ ์ฝ๋์์๋ ๋์ ์๋ก ๋ง๋ค ๋งต์ ๋ง๋ค๋ฉด์ true, false ํค์ ๋น ๋ฆฌ์คํธ๋ก ์ด๊ธฐํํ๋ค.
๋ค์์ผ๋ก ์คํธ๋ฆผ ์์๋ฅผ ์ด๋ป๊ฒ ์์งํ ์ง ๊ฒฐ์ ํ๋ accumulator ๋ฉ์๋๋ฅผ ๋ง๋ ๋ค.
์ด์ ์ธ์ ๋ ์ง ์ํ ๋ ์์ง ๊ณผ์ ์ ์ค๊ฐ ๊ฒฐ๊ณผ, ์ฆ ์ง๊ธ๊น์ง ๋ฐ๊ฒฌํ ์์๋ฅผ ํฌํจํ๋ ๋์ ์์ ์ ๊ทผํ ์ ์๋ค.
์ง๊ธ๊น์ง ๋ฐ๊ฒฌํ ์์ ๋ฆฌ์คํธ acc.get(true) ์ ์์ ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์๋ candidate๋ฅผ ์ธ์๋ก isPrime ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค. ๊ทธ๋ฆฌ๊ณ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์๋ง์ ๋ฆฌ์คํธ์ ์ถ๊ฐํ๋ค.
3๋จ๊ณ : ๋ณ๋ ฌ ์คํํ ์ ์๋ ์ปฌ๋ ํฐ ๋ง๋ค๊ธฐ(๊ฐ๋ฅํ๋ค๋ฉด)
์ด๋ฒ์๋ ๋ณ๋ ฌ ์์ง ๊ณผ์ ์์ ๋ ๋ถ๋ถ ๋์ ์๋ฅผ ํฉ์น ์ ์๋ ๋ฉ์๋๋ฅผ ๋ง๋ ๋ค. ์์ ์์๋ ๋ ๋ฒ์งธ ๋งต์ ์์ ๋ฆฌ์คํธ์ ๋น์์ ๋ฆฌ์คํธ์ ๋ชจ๋ ์๋ฅผ ์ฒซ ๋ฒ์งธ ๋งต์ ์ถ๊ฐํ๋ ์ฐ์ฐ์ด๋ฉด ์ถฉ๋ถํ๋ค.
์๊ณ ๋ฆฌ์ฆ ์์ฒด๊ฐ ์์ฐจ์ ์ด์ด์ ์ปฌ๋ ํฐ๋ฅผ ์ค์ ๋ก ๋ณ๋ ฌ๋ก ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก combiner ๋ฉ์๋๋ ๋น ๊ตฌํ์ผ๋ก ๋จ๊ฒจ๋๊ฑฐ๋ exception์ ๋์ง๋๋ก ๊ตฌํํ๋ฉด ๋๋ค.
4๋จ๊ณ : finisher ๋ฉ์๋์ ์ปฌ๋ ํฐ์ characteristics ๋ฉ์๋
accumulator์ ํ์์ ์ปฌ๋ ํฐ ๊ฒฐ๊ณผ ํ์๊ณผ ๊ฐ์ผ๋ฏ๋ก ๋ณํ ๊ณผ์ ์ ํ์์๋ค. ๋ฐ๋ผ์ ํญ๋ฑ ํจ์ identity๋ฅผ ๋ฐํํ๋๋ก finisher ๋ฉ์๋๋ฅผ ๊ตฌํํ๋ค.
6.6.2 ์ปฌ๋ ํฐ ์ฑ๋ฅ ๋น๊ต
๊ฐ๋จํ ํ๋์ค๋ฅผ ๋ง๋ค์ด์ ์ปฌ๋ ํฐ ์ฑ๋ฅ์ ํ์ธํ ์ ์๋ค.
collect ๋ฉ์๋๋ก PrimeNumbersCollector์ ํต์ฌ ๋ก์ง์ ๊ตฌํํ๋ ์ธ ํจ์๋ฅผ ์ ๋ฌํด์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค.
Last updated