๋ณธ ํฌ์คํ ์ '๋ชจ๋ ์๋ฐ ์ธ ์ก์ '์ ์ฐธ๊ณ ํ์ฌ ์์ฑํ์์ต๋๋ค.
์คํธ๋ฆผ์ Java8 ์์ ๋๋ค์ ๊ฐ์ด ๋ฑ์ฅํ Java API์
๋๋ค.
์คํธ๋ฆผ์ ์๋ฐ์ ์กด์ฌํ๋ ์๋ฃ๊ตฌ์กฐ์ธ ์ปฌ๋ ์
, ๋ฐฐ์ด ๋ฑ์ ์ ์ฅ๋ ๋ฐ์ดํฐ์ ์ฐธ์กฐ
๋ฐ๋ณต์ ์ฒ๋ฆฌํด์ฃผ๋ API์
๋๋ค.
์คํธ๋ฆผ์ ๋๋ค ํํ์๊ณผ ๊ฒฐํฉํ์ฌ ์ฌ์ฉํ ๋ ๊ฐ์ ์ ๋ฐํํ๋ฉฐ ๊ธฐ์กด์ Iterator๋
์ง์ ๊ตฌํ ๋ฐ๋ณต์๋ณด๋ค ์ ์ฉํ๊ฒ ์ปฌ๋ ์
๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๊ฒ ํด์ค๋๋ค.
๊ทธ๋ผ ๊ธฐ์กด์ ์ฝ๋์ ์คํธ๋ฆผ์ ์ด์ฉํ ์ฝ๋๋ฅผ ๋น๊ตํ๋ฉด์ ์คํธ๋ฆผ์ ์ฌ์ฉํ๋ ์ด์ ์
์ฌ์ฉ ๋ฐฉ๋ฒ์ ์์๋ณด๊ฒ ์ต๋๋ค.
// ๊ธฐ์กด์ ์๋ฐ ์ฝ๋
List<Dish> lowCaloricDishes = new ArrayList<>();
for(Dish dish: menu) {
if(dish.getCalories() < 400) {
lowCaloricDishes.add(dish);
}
}
Collections.sort(lowCaloricDishes, new Comparator<Dish>() {
public int(Dish dish1, Dish dish2) {
return Integer.compare(dish1.getCalories(), dish2.getCalories());
}
});
List<String> lowCaloricDishesName = new ArrayList<>();
for(Dish dish: lowcaloricDishes) {
lowCaloricDishesName.add(dish.getName());
}
// Stream์ ์ด์ฉํ ์๋ฐ8 ์ฝ๋
List<String> lowCaloricDishesName =
menu.stream()
.filter(d -> d.getCalories() < 400)
.sorted(comparing(Dish::getCalories))
.map(Dish::getName)
.collect(toList());
๋จผ์ ์์ ์ฝ๋๋ ๋ณดํต ํํ๊ฒ ์ฌ์ฉ๋๋ ๋ฐฉ๋ฒ์
๋๋ค. ํ์ง๋ง ์๋์ฒ๋ผ Stream๊ณผ ๋๋ค๋ฅผ ์กฐํฉํ๋ฉด
๊ต์ฅํ ๊ฐ๊ฒฐํ๊ณ ์ง๊ด์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๊ฒ ๋ฉ๋๋ค. ๋ํ ์๋ ์ฝ๋์์
menu.stream() ๋ถ๋ถ์ menu.parallelStream()์ผ๋ก ํธ์ถํ๊ฒ ๋๋ฉด ์ด ์ฝ๋๋ฅผ
๋ฉํฐ์ฝ์ด ์ํคํ
์ฒ์์ ๋ณ๋ ฌ๋ก ์คํํ ์ ์๊ฒ ๋ฉ๋๋ค.
์์์ ํ์ธํ Stream์ ์ฅ์ ์ ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค
์ด ์ธ ๊ฐ์ง๊ฐ ์คํธ๋ฆผ์ ๊ฐ์ฅ ํฐ ์ฅ์ ๋ค์
๋๋ค. ์คํธ๋ฆผ์ filtering, mapping๋ฑ์ ํตํด
๋ฐ์ดํฐ๋ฅผ ์๊ตฌ์ฌํญ์ ๋ง์ถ์ด ํํฐ๋งํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ธฐ์ ์ฉ์ดํฉ๋๋ค.
Stream์๋ ์์์ ๋ณธ ์ฐ์ฐ๋ค์ ํฌํจํด ๋ค ๊ฐ์ง์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ฐ์ฐ์ ์ ๊ณตํฉ๋๋ค
๋๋ค๋ฅผ ์ธ์๋ก ๋ฐ์ ์คํธ๋ฆผ์์ ํน์ ์์๋ฅผ ์ ์ธ์ํต๋๋ค.
๋๋ค๋ฅผ ์ด์ฉํด์ ํ ์์๋ฅผ ๋ค๋ฅธ ์์๋ก ๋ณํํ๊ฑฐ๋ ์ ๋ณด๋ฅผ ์ถ์ถํฉ๋๋ค
์ ํด์ง ๊ฐ์ ์ด์์ ์์๊ฐ ์คํธ๋ฆผ์ ์ ์ฅ๋์ง ๋ชปํ๊ฒ ์คํธ๋ฆผ ํฌ๊ธฐ๋ฅผ ์ ํํฉ๋๋ค
์คํธ๋ฆผ์ ๋ค๋ฅธ ํ์(์ปฌ๋ ์ ๋ฑ)์ผ๋ก ๋ณํํฉ๋๋ค.
์คํธ๋ฆผ์ ๊ธฐ์กด์ ์ปฌ๋ ์ ๋ฐฉ์๊ณผ ์ด๋ ํ ์ฐจ์ด์ ์ ๊ฐ์ง๊ณ ์๋์ง ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์ปฌ๋ ์
์ ํ์ฌ ์๋ฃ๊ตฌ์กฐ๊ฐ ํฌํจํ๋ ๋ชจ๋ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค.
ํ์ง๋ง ์คํธ๋ฆผ์ ์ด๋ก ์ ์ผ๋ก ์์ฒญํ ๋์๋ง ์์๋ฅผ ๊ณ์ฐํ๋ ๊ณ ์ ๋ ์๋ฃ๊ตฌ์กฐ๋ก
์ฌ์ฉ์๊ฐ ์์ฒญํ๋ ๊ฐ๋ง ์คํธ๋ฆผ์์ ์ถ์ถํ ์ ์๊ฒ ํด์ค๋๋ค.
๋ฐ๋ณต์์ ๋ง์ฐฌ๊ฐ์ง๋ก ์คํธ๋ฆผ๋ ํ ๋ฒ๋ง ํ์ํ ์ ์์ต๋๋ค. ์ฆ ํ์๋ ์คํธ๋ฆผ์ ์์๋
์๋น๋๋ฉฐ ํ ๋ฒ ํ์ํ ์์๋ฅผ ๋ค์ ํ์ํ๋ ค๋ฉด ์ด๊ธฐ ๋ฐ์ดํฐ ์์ค์์ ์๋ก์ด ์คํธ๋ฆผ์
๋ง๋ค์ด์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์ปฌ๋ ์
์ธํฐํ์ด์ค์์ for ๋ฑ์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์๊ฐ ์ง์ ์์๋ฅผ ๋ฐ๋ณตํ๋ ์ผ์
์ธ๋ถ ๋ฐ๋ณต์ด๋ผ๊ณ ํฉ๋๋ค. ํ์ง๋ง ์คํธ๋ฆผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ฐ๋ณต์ ์์์ ์ฒ๋ฆฌํ๋
๋ด๋ถ ๋ฐ๋ณต์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ํจ์์์ ์ด๋ค ์์
์ ์ํํ ์ง๋ง ์ง์ ํด์ฃผ๋ฉด
๋๋จธ์ง ๋ฐ๋ณต ์์
์ ์คํธ๋ฆผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ฒ๋ฆฌํด์ค๋๋ค.
๊ฒฐ๊ตญ ์ด์ ๊ฐ์ ํน์ฑ์ด ๋ณ๋ ฌ์ฑ์ผ๋ก ์ด์ด์ง๋๋ฐ, ์ธ๋ถ ๋ฐ๋ณต์์๋ ๋ณ๋ ฌ์ฑ์
synchronized์ ๊ฐ์ ํค์๋๋ฅผ ์ฌ์ฉํด์ ์ง์ ๊ด๋ฆฌํด์ค์ผ ํ๋ ๋ฐ๋ฉด ์คํธ๋ฆผ์
๋ฐ๋ณต์ ๋ด๋ถ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ฏ๋ก ์ฝ๋๋ฅผ ๋ณ๋ ฌ ์ฒ๋ฆฌํ๊ธฐ๊ฐ ํธ๋ฆฌํด์ง๋๋ค.