๋ฐฐ์ด/์ปฌ๋ ์ ์ “๊ฐ์ ๋ฐฉ์”์ผ๋ก ์ฒ๋ฆฌํ๋ ์ด์ + filter/map/sorted/forEach/sum/count/reduce๊น์ง
0) ์คํธ๋ฆผ(Stream)์ด ๋ญ์ผ?
์ฌ๋ผ์ด๋ ์์ฝ์ ์์ฃผ ์ฝ๊ฒ ํ๋ฉด ์ด๊ฑฐ์ผ:
- ์คํธ๋ฆผ(Stream) = “์ฌ๋ฌ ์๋ฃ(๋ฐฐ์ด, ๋ฆฌ์คํธ ๋ฑ)๋ฅผ ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฅ(์ฐ์ฐ)์ ๋ชจ์๋ ํ๋ฆ(ํ์ดํ๋ผ์ธ)”
- ์ค์ํ ํฌ์ธํธ:
- ๋ฐฐ์ด์ด๋ ์ปฌ๋ ์ ์ด๋ ๋๊ฐ์ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ ์ ์์
- “์๋ฃ ๊ตฌ์กฐ(๋ฐฐ์ด/๋ฆฌ์คํธ)๊ฐ ๋ญ๋”๋ณด๋ค “์ด๋ค ์ฒ๋ฆฌ๋ฅผ ํ๊ณ ์ถ๋”์ ์ง์คํ๊ฒ ํด์ค
- ๋ฐ๋ณต๋ฌธ์ ์ง์ ๋๋ฆฌ๋ ๋์ , ์คํธ๋ฆผ์ด ๋ด๋ถ์ ์ผ๋ก ์์๋ฅผ ํ๋์ฉ ๊บผ๋ด์ ์ฒ๋ฆฌํจ(๋ด๋ถ ๋ฐ๋ณต)
โ ๋น์
- ๋ฐฐ์ด/๋ฆฌ์คํธ = ์ฌ๋ฃ๊ฐ ๋ด๊ธด ๋ฐ์ค
- ์คํธ๋ฆผ = ์ปจ๋ฒ ์ด์ด ๋ฒจํธ(์์ ๋ผ์ธ)
- filter, map, sorted ๊ฐ์ ๊ฑด “์์ ๊ธฐ๊ณ”
- ๋ง์ง๋ง์ forEach, sum, count, reduce ๊ฐ์ “์ต์ข ๋ฒํผ”์ ๋๋ฌ์ผ ์ค์ ๋ก ์ปจ๋ฒ ์ด์ด๊ฐ ์์ง์
1) ์คํธ๋ฆผ์ ์ฐ๋ฉด ๋ญ๊ฐ ์ข์?
์ฌ๋ผ์ด๋ ๋ฌธ์ฅ์ ๊ทธ๋๋ก “์๋ฏธ”๋ก ํ๋ฉด:
โ (1) ์๋ฃ์ ๋์๊ณผ ๊ด๊ณ์์ด ๋์ผํ ์ฐ์ฐ ์ํ
- ๋ฐฐ์ด์ด๋ ArrayList๋ ๋๊ฐ์ด:
- .stream() ๋๋ Arrays.stream()๋ก ์คํธ๋ฆผ์ ๋ง๋ค๊ณ
- .filter().map().sorted().forEach() ๊ฐ์ ํํ๋ก ์ฒ๋ฆฌ ๊ฐ๋ฅ
โ (2) ํ ๋ฒ ์์ฑํ๊ณ ์ฌ์ฉํ ์คํธ๋ฆผ์ ์ฌ์ฌ์ฉ ๋ถ๊ฐ (์๋ชจ๋จ)
- ์คํธ๋ฆผ์ “์ปจ๋ฒ ์ด์ด ๋ฒจํธ ํ ๋ฒ ๋๋ฆฌ๋ฉด ๋”์ด์ผ.
- ํ ๋ฒ forEach() ๊ฐ์ ์ต์ข ์ฐ์ฐ์ ์ํํ๋ฉด ๊ทธ ์คํธ๋ฆผ์ ๋์ด๋ผ์ ๋ค์ ๋ชป ์จ.
โ (3) ์คํธ๋ฆผ ์ฐ์ฐ์ ๊ธฐ์กด ์๋ฃ๋ฅผ ๋ณ๊ฒฝํ์ง ์์
- ์คํธ๋ฆผ์ ์๋ณธ ๋ฐฐ์ด/๋ฆฌ์คํธ๋ฅผ “์ง์ ” ๋ฐ๊พธ๋ ๊ฒ ์๋๋ผ
์๋ณธ์ ์ฝ์ด์ ์๋ก์ด ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค๊ฑฐ๋ ์ถ๋ ฅํ๋ ๋ฐฉ์์ด์ผ.
(๋จ, ์์์ ์๋ณธ ๊ฐ์ฒด ์์ฒด๋ฅผ ์์ ํ๋ฉด ๊ทธ๊ฑด ๋ณ๊ฐ๋ก ๋ฐ๋ ์ ์์)
โ (4) ์ค๊ฐ์ฐ์ฐ + ์ต์ข ์ฐ์ฐ ๊ตฌ์กฐ
- ์ค๊ฐ์ฐ์ฐ: filter, map, sorted …
→ “๊ฐ๊ณต” ๋จ๊ณ(์ฌ๋ฌ ๊ฐ ์ฐ๊ฒฐ ๊ฐ๋ฅ) - ์ต์ข
์ฐ์ฐ: forEach, sum, count, reduce …
→ “๊ฒฐ๊ณผ ๋ง๋ค๊ธฐ / ์ถ๋ ฅ” ๋จ๊ณ(๋ง์ง๋ง์ 1๋ฒ๋ง)
2) ๋ฐ๋ณต๋ฌธ vs ์คํธ๋ฆผ: ๊ฐ์ฅ ๊ธฐ๋ณธ ์์
2-1) ๋ฐ๋ณต๋ฌธ ๋ฒ์

ํ ์ค์ฉ ํด์
- int[] arr = {1,2,3,4,5};
- ์ ์ ๋ฐฐ์ด ์์ฑ
- for (int i = 0; i < arr.length; i++)
- ์ธ๋ฑ์ค i๋ฅผ 0๋ถํฐ ๋๊น์ง ์ฆ๊ฐ
- System.out.println(arr[i]);
- i๋ฒ์งธ ์์ ์ถ๋ ฅ
2-2) ์คํธ๋ฆผ ๋ฒ์

ํ ์ค์ฉ ํด์(์์ ์ฐ์ผ๋ก)
- int[] arr = {1,2,3,4,5};
- ๋ฐฐ์ด ์์ฑ(๋์ผ)
- Arrays.stream(arr)
- arr ๋ฐฐ์ด์ IntStream(์ ์ ์คํธ๋ฆผ) ์ผ๋ก ๋ฐ๊ฟ
- ์ฆ, “๋ฐฐ์ด ์์๋ฅผ ํ๋์ฉ ํ๋ ค๋ณด๋ผ ์ปจ๋ฒ ์ด์ด ๋ฒจํธ” ์์ฑ
- .forEach(n -> System.out.println(n));
- forEach๋ ์ต์ข ์ฐ์ฐ
- ์คํธ๋ฆผ์ ๊ฐ ์์๋ฅผ ํ๋์ฉ ๊บผ๋ด์(๋ด๋ถ์ ์ผ๋ก ๋ฐ๋ณต)
- n์ ๋ฃ๊ณ → System.out.println(n) ์คํ
โ ์ฌ๊ธฐ์ ๋๋ค n -> System.out.println(n) ๋ป
- n : ์์ ํ๋
- -> : “์ด๊ฑธ๋ก ์ด๋ ๊ฒ ์คํํ ๊ฒ”
- System.out.println(n) : ์คํ ๋ด์ฉ
์ฆ, “์์ ํ๋ ๋ค์ด์ค๋ฉด ๊ทธ๊ฑธ ์ถ๋ ฅํด๋ผ”
3) ์คํธ๋ฆผ ํ์ดํ๋ผ์ธ ๊ตฌ์กฐ: ์์ฑ → ์ค๊ฐ์ฐ์ฐ → ์ต์ข ์ฐ์ฐ
์ฌ๋ผ์ด๋ ๋นจ๊ฐ ๋ฐ์ค ๊ทธ๋๋ก ๊ตฌ์กฐ๋ ์ด๊ฑฐ์ผ:

3-1) stream() = ์คํธ๋ฆผ ์์ฑ(์์์ )
- sList.stream()
→ ๋ฆฌ์คํธ๋ฅผ ์คํธ๋ฆผ์ผ๋ก “๋ฐ๊ฟ์” ์์๋ค์ ํ๋ ค๋ณด๋ผ ์ค๋น
3-2) filter() = ์ค๊ฐ์ฐ์ฐ(๊ฑธ๋ฌ๋ด๊ธฐ)
- filter(s -> s.length() >= 5)
- ์กฐ๊ฑด์ ๋ฃ๊ณ , ์กฐ๊ฑด์ด true์ธ ๊ฒ๋ง ๋ค์์ผ๋ก ํต๊ณผ
- s -> s.length() >= 5๋ “ํํฐ ์กฐ๊ฑด์(ํ๋ณ์)”
โ ๋น์
- filter = “๊ฒ๋ฌธ์”
- ํต๊ณผ ์กฐ๊ฑด = length >= 5
3-3) forEach() = ์ต์ข ์ฐ์ฐ(์๋น/์ถ๋ ฅ)
- forEach(s -> System.out.println(s))
- ํต๊ณผ๋ ์์๋ฅผ ํ๋์ฉ ๊บผ๋ด ์ถ๋ ฅ
- ์คํํ๋ฉด ์คํธ๋ฆผ์ด ์๋ชจ(๋) ๋จ
4) map()์ ๋ญ์ผ? “ํํ ๋ณํ / ์ํ๋ ๊ฐ๋ง ๋ฝ๊ธฐ”

ํ ์ค์ฉ ํด์
- customerList.stream()
- ๊ณ ๊ฐ ๊ฐ์ฒด๋ค์ด ๋ค์ด์๋ ๋ฆฌ์คํธ๋ฅผ ์คํธ๋ฆผ์ผ๋ก
- .map(c -> c.getName())
- ๊ณ ๊ฐ ๊ฐ์ฒด c๋ฅผ ๋ฐ์์ → c.getName() ๊ฒฐ๊ณผ๋ก ๋ฐ๊ฟ
- ์ฆ, Customer → String(์ด๋ฆ) ์ผ๋ก ๋ณํ
- .forEach(s -> System.out.println(s))
- ๋ณํ๋ ์ด๋ฆ(String)์ ํ๋์ฉ ์ถ๋ ฅ
โ ๋น์
- map = “ํฌ์ฅ ๋ฏ๊ธฐ”
- ๊ณ ๊ฐ ๊ฐ์ฒด(๋ฐ์ค)๋ฅผ ๋ฏ์ด์ ๊ทธ ์์ ์๋ “์ด๋ฆ”๋ง ๊บผ๋ด๋ ๋๋
5) ์ต์ข ์ฐ์ฐ: sum(), count() ๊ทธ๋ฆฌ๊ณ “count๊ฐ long์ธ ์ด์ + ์บ์คํ ”
์ฌ๋ผ์ด๋ ์์ (์ ์ ๋ฐฐ์ด ํฉ/๊ฐ์):

ํ ์ค์ฉ ํด์
- int[] arr = {1,2,3,4,5};
- ๋ฐฐ์ด ์์ฑ
- int sumVal = Arrays.stream(arr).sum();
- Arrays.stream(arr) : IntStream ์์ฑ
- .sum() : ์ต์ข
์ฐ์ฐ
→ ์์๋ค์ ์ ๋ถ ๋ํด์ int๋ก ๋ฐํ
- int count = (int) Arrays.stream(arr).count();
- .count()๋ ์ต์ข
์ฐ์ฐ
→ ์์ ๊ฐ์๋ฅผ ์ธ์ ๋ฐํ - ๊ทผ๋ฐ ๋ฐํ ํ์ ์ด long์ด์ผ (long count())
- ๊ทธ๋์ int ๋ณ์์ ๋ฃ์ผ๋ ค๋ฉด (int)๋ก ๊ฐ์ ํ ๋ณํ(์บ์คํ ) ํ์
- .count()๋ ์ต์ข
์ฐ์ฐ
โ
์ count()๋ long์ผ๊น?
๋ฐฐ์ด/์ปฌ๋ ์
ํฌ๊ธฐ๊ฐ ์์ฒญ ํด ์ ์์์.
- int ์ต๋: ์ฝ 21์ต
- ๋ฐ์ดํฐ๊ฐ 21์ต ๊ฐ๋ฅผ ๋์ด๊ฐ ์๋ ์์ผ๋ ์์ ํ๊ฒ long์ผ๋ก ๋ฐํํด.
โ ์ค๋ฌด์ ์ผ๋ก ๋ ์์ ํ ์ฝ๋

6) “์คํธ๋ฆผ์ ํ ๋ฒ ์ฐ๋ฉด ์ฌ์ฌ์ฉ ๋ถ๊ฐ”๋ฅผ ์ฝ๋๋ก ํ์ธ
์ฌ๋ผ์ด๋ ๋๋ ๊ทธ๋๋ก ์์๋ฅผ ์ ๋ฆฌํ๋ฉด:

ํ ์ค์ฉ ํด์
- List<String> sList = new ArrayList<>();
- ๋ฌธ์์ด ๋ฆฌ์คํธ ์์ฑ
- sList.add(...)
- ์์ ์ถ๊ฐ
- Stream<String> stream = sList.stream();
- ๋ฆฌ์คํธ๋ก๋ถํฐ ์คํธ๋ฆผ ์์ฑ
- (์์ง ์คํ์ ์ ๋จ)
- stream.forEach(s -> System.out.print(s + " "));
- ์ต์ข ์ฐ์ฐ ์คํ → ์์ ์ถ๋ ฅํ๋ฉด์ ์คํธ๋ฆผ ์๋ชจ
- System.out.println();
- ์ค๋ฐ๊ฟ
- sList.stream().sorted().forEach(...)
- ์ฌ๊ธฐ์ ์ ์คํธ๋ฆผ์ ๋ค์ ์์ฑํจ (sList.stream()์ ๋ค์ ํธ์ถํ์ง!)
- ์๋๋ฉด ์๊น stream์ ์ด๋ฏธ forEach๋ก ์๋ชจ๋ผ์ ์ฌ์ฌ์ฉ ๋ถ๊ฐ๋๊น
โ ๋ง์ฝ ์ด๋ ๊ฒ ํ๋ฉด?
7) sorted()๋ ๋ญ์ผ?
- sorted()๋ ์ค๊ฐ์ฐ์ฐ
- ์์๋ค์ ์ ๋ ฌํ “์๋ก์ด ์คํธ๋ฆผ”์ ๋ง๋ค์ด ์ค
- ๋ฌธ์์ด์ด๋ฉด ๊ธฐ๋ณธ ์ ๋ ฌ(์ฌ์ ์/์ ๋์ฝ๋ ์)
8) reduce() ์์ ์ ๋ณต: “๋ชจ๋ ๊ฐ์ ํ๋๋ก ํฉ์น๊ธฐ(๋์ )”
์ฌ๋ผ์ด๋ ์ ์:

8-1) reduce์ ํต์ฌ ์๋ฏธ
- identity : ์ด๊ธฐ๊ฐ(์์ ๊ฐ)
- accumulator : “๋ ๊ฐ์ ๋ฐ์์ ํ๋๋ก ๋ง๋๋ ๊ท์น”
โ ๋น์
- reduce = “๋๋ฉ์ด ๊ตด๋ฆฌ๊ธฐ”
- identity = ์ฒ์ ์์ ์ฅ ์์ ๋๋ฉ์ด(์ด๊ธฐ ํฌ๊ธฐ)
- accumulator = “์ ๋์ ๋ถ์ด๋ ๋ฐฉ๋ฒ(๊ท์น)”
8-2) ์ ์ ํฉ ๊ตฌํ๊ธฐ ์์ (์ฌ๋ผ์ด๋)

ํ ์ค์ฉ ํด์
- Arrays.stream(arr)
- ๋ฐฐ์ด์ IntStream์ผ๋ก
- .reduce(0, (a, b) -> a + b)
- ์ด๊ธฐ๊ฐ 0์์ ์์
- (a, b) -> a + b ๊ท์น์ผ๋ก ๊ณ์ ๋์
โ
๋ด๋ถ์์ ์ค์ ๋ก ์ผ์ด๋๋ ๋๋
arr์ด [1,2,3,4,5]๋ฉด:
- ์์: a=0
- a=0, b=1 → 1
- a=1, b=2 → 3
- a=3, b=3 → 6
- a=6, b=4 → 10
- a=10, b=5 → 15
๊ฒฐ๊ณผ 15
8-3) reduce๋ overload(ํํ)๊ฐ 2๊ฐ์ง๊ฐ ์์ฃผ ๋์ด
(A) identity ์๋ reduce → ๊ฒฐ๊ณผ๊ฐ ๋ฐ๋ก T

- identity๊ฐ ์์ผ๋๊น “๋น ๊ฒฝ์ฐ”์๋ ๊ฒฐ๊ณผ๊ฐ ๋ฌด์กฐ๊ฑด ๋์์ String์ผ๋ก ๋ฐ๋ก ๋ฐํ
(B) identity ์๋ reduce → Optional<T>

- ์์๊ฐ ํ๋๋ ์์ ์ ์์ผ๋ Optional๋ก ๊ฐ์
- ๊ทธ๋์ .get()์ ์ฐ๊ฑฐ๋ orElse()๋ฅผ ์จ์ผ ํจ
9) BinaryOperator ํด๋์ค๋ก reduce ๊ท์น ๋ง๋ค๊ธฐ(์ฌ๋ผ์ด๋)
์ฌ๋ผ์ด๋ ์์ง:
- BinaryOperator<T>๋ “T ๋ ๊ฐ ๋ฐ์์ T ํ๋ ๋ฐํ”
- ์ฐ๋ฆฌ๊ฐ ํด๋์ค๋ก ๊ตฌํํ๋ฉด apply()๊ฐ ์๋ ํธ์ถ๋จ
9-1) ๊ฐ์ฅ ๊ธด ๋ฌธ์์ด ๊ณ ๋ฅด๋ ๊ท์น ํด๋์ค(์ฌ๋ผ์ด๋ ์คํ์ผ)

ํ ์ค์ฉ ํด์
- class CompareString implements BinaryOperator<String>
- ๋ฌธ์์ด 2๊ฐ ๋น๊ตํด์ “ํ๋”๋ฅผ ๋ฐํํ๋ ๊ท์น ํด๋์ค
- public String apply(String s1, String s2)
- reduce๊ฐ ๋ด๋ถ์ ์ผ๋ก ๊ณ์ ํธ์ถํ๋ ๋ฉ์๋
- s1.getBytes().length
- ๋ฌธ์์ด์ ๋ฐ์ดํธ ๊ธธ์ด(ํ๊ธ์ ๋ณดํต 2~3๋ฐ์ดํธ๋ผ ๊ธธ๊ฒ ๋์ฌ ์ ์์)
- ๋ ๊ธธ๋ฉด s1 ๋ฐํ, ์๋๋ฉด s2 ๋ฐํ
→ ๊ฒฐ๊ตญ reduce ๋๋๋ฉด “๊ฐ์ฅ ๊ธธ์๋ ๋ฌธ์์ด”์ด ๋จ์
9-2) reduce์ ์ ์ฉ(์ฌ๋ผ์ด๋)

ํ ์ค์ฉ ํด์
- Arrays.stream(greetings)
- ๋ฌธ์์ด ๋ฐฐ์ด ์คํธ๋ฆผ
- .reduce(new CompareString())
- identity ์๋ reduce → ๊ฒฐ๊ณผ๊ฐ Optional<String>
- ๋ด๋ถ์ ์ผ๋ก apply(s1, s2)๋ฅผ ๊ณ์ ํธ์ถํด “์ต์ข 1๊ฐ”๋ง ๋จ๊น
- .get()
- Optional์์ ์ค์ ๊ฐ์ ๊บผ๋
- โ ๏ธ ๋จ, ๋น์ด์์ผ๋ฉด ์์ธ๊ฐ ๋ ์ ์์
- ์์ ํ๊ฒ๋ .orElse("") ์ถ์ฒ
- System.out.println(str);
- ์ต์ข ๊ฒฐ๊ณผ ์ถ๋ ฅ
โ ์์ ๋ฒ์
10) ์ค์ต ์์ : ์ฌํ ๊ณ ๊ฐ(TravelCustomer) ์คํธ๋ฆผ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ
์ฌ๋ผ์ด๋ ๋ฌธ์ ์๊ตฌ:
- ๊ณ ๊ฐ ๋ช ๋จ ์ถ๋ ฅ
- ์ฌํ ์ด ๋น์ฉ ๊ณ์ฐ
- 20์ธ ์ด์ ๊ณ ๊ฐ ์ด๋ฆ์ ์ ๋ ฌํด์ ์ถ๋ ฅ
10-1) TravelCustomer ํด๋์ค(์ฌ๋ผ์ด๋ ์ฝ๋ ํด์)

ํฌ์ธํธ
- private ๋ฉค๋ฒ๋ณ์ 3๊ฐ: ์ด๋ฆ/๋์ด/๊ฐ๊ฒฉ
- ์์ฑ์๋ก ํ ๋ฒ์ ์ธํ
- getter๋ก ๊ฐ ๊บผ๋ด๊ธฐ
- toString()์ ๊ฐ์ฒด๋ฅผ ์ถ๋ ฅํ๋ฉด ์ด๋ค ๋ฌธ์์ด๋ก ๋ณด์ผ์ง ์ ํจ
10-2) TravelTest(์ฌ๋ผ์ด๋ ์ฝ๋ ๊ธฐ๋ฐ + ๋ณ์๋ช ์ค๋ฅ ๊ฐ๋ฅ์ฑ ์์ ํด์ “์ ์ ๋ฒ์ ”)
์ฌ๋ผ์ด๋์๋ customerLee ๋ง๋ค์ด๋๊ณ customerDong์ addํ๋ ์์ผ๋ก
๋ณ์๋ช ์ด ์์ฌ ๋ณด์ด๋ ๋ถ๋ถ์ด ์์ ์ ์์ด์, ์คํ ๊ฐ๋ฅํ ํํ๋ก ์ ๋ฆฌํด์ค๊ฒ.

ํ ์ค์ฉ “์๋ฏธ” ํด์
- ๊ณ ๊ฐ 3๋ช
๊ฐ์ฒด ์์ฑ
- ๊ฐ๊ฒฉ 100/100/50 (์ฌ๋ผ์ด๋ ์กฐ๊ฑด: 15์ธ ์ด์ 100๋ง์, ๋ฏธ๋ง 50๋ง์๊ณผ ๋งค์นญ)
- List<TravelCustomer> customerList = new ArrayList<>();
- ๊ณ ๊ฐ ๋ฆฌ์คํธ ์ค๋น
- customerList.add(...)
- ๋ฆฌ์คํธ์ ๊ณ ๊ฐ ๋ฃ๊ธฐ
(1) ๊ณ ๊ฐ ๋ช ๋จ ์ถ๋ ฅ
- customerList.stream() : ๊ณ ๊ฐ ์คํธ๋ฆผ ์์ฑ
- map(c -> c.getName()) : ๊ณ ๊ฐ → ์ด๋ฆ(String)์ผ๋ก ๋ณํ
- forEach(...) : ์ด๋ฆ ์ถ๋ ฅ(์ต์ข ์ฐ์ฐ)
(2) ์ด ๋น์ฉ ํฉ
- mapToInt(c -> c.getPrice())
- TravelCustomer → int(๊ฐ๊ฒฉ)์ผ๋ก ๋ฐ๊ฟ
- IntStream์ด ๋จ
- sum() : ํฉ๊ณ ๊ณ์ฐ(์ต์ข ์ฐ์ฐ)
(3) 20์ธ ์ด์๋ง + ์ด๋ฆ๋ง + ์ ๋ ฌ + ์ถ๋ ฅ
- filter(c -> c.getAge() >= 20) : 20์ธ ์ด์๋ง ํต๊ณผ
- map(c -> c.getName()) : ์ด๋ฆ๋ง ์ถ์ถ
- sorted() : ์ ๋ ฌ(์ค๊ฐ์ฐ์ฐ)
- forEach() : ์ถ๋ ฅ(์ต์ข ์ฐ์ฐ)
11) ์ค์ต ๋ฌธ์ : Book ๋ฆฌ์คํธ์์
โ ๋ชจ๋ ์ฑ ๊ฐ๊ฒฉ์ ํฉ
โ 20000์ ์ด์์ธ ์ฑ ์ด๋ฆ์ ์ ๋ ฌํด์ ์ถ๋ ฅ
(์ฌ๋ผ์ด๋ “LibraryTest” ์์ฑ)
11-1) Book ํด๋์ค (์ฌ๋ผ์ด๋ ์คํ์ผ ์ ์ง)

11-2) LibraryTest ์์ฑ ์ฝ๋(์คํธ๋ฆผ ์ฌ์ฉ)

ํ ์ค์ฉ ํด์
(1) ํฉ๊ณ
- bookList.stream() : ์ฑ ์คํธ๋ฆผ ์์ฑ
- mapToInt(book -> book.getPrice())
- Book → ๊ฐ๊ฒฉ(int)์ผ๋ก ๋ณํ → IntStream
- sum() : ํฉ๊ณ(์ต์ข ์ฐ์ฐ)
(2) 20000์ ์ด์ + ์ด๋ฆ + ์ ๋ ฌ + ์ถ๋ ฅ
- filter(book -> book.getPrice() >= 20000) : 20000 ์ด์๋ง ๋จ๊น
- map(book -> book.getName()) : ์ด๋ฆ๋ง ๋ฝ๊ธฐ
- sorted() : ์ด๋ฆ ์ ๋ ฌ
- forEach(System.out::println)๋ ๊ฐ๋ฅํ์ง๋ง(๋ฉ์๋ ์ฐธ์กฐ),
์ฌ๊ธฐ์๋ ์ดํด๋ฅผ ์ํด ๋๋ค๋ก ์ ์ง:- forEach(name -> System.out.println(name))
12) ์ค๋์ ํต์ฌ ์์ฝ(์ฌ๋ผ์ด๋ ์ ์ฒด ๋ด์ฉ ์์ถ)
- ์คํธ๋ฆผ์ ๋ฐฐ์ด/์ปฌ๋ ์ ์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๊ฒ ํด์ฃผ๋ “๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ์ดํ๋ผ์ธ”
- ์คํธ๋ฆผ์
- ์๋ณธ์ ์ง์ ๋ฐ๊พธ์ง ์๊ณ
- ํ ๋ฒ ์ต์ข ์ฐ์ฐํ๋ฉด ์๋ชจ๋์ด ์ฌ์ฌ์ฉ ๋ถ๊ฐ
- ์ฐ์ฐ์
- ์ค๊ฐ์ฐ์ฐ(filter/map/sorted...) ์ฌ๋ฌ ๊ฐ ๊ฐ๋ฅ
- ์ต์ข ์ฐ์ฐ(forEach/sum/count/reduce...) ๋ง์ง๋ง์ 1๋ฒ
- count()๋ ๊ฒฐ๊ณผ๊ฐ long → ํ์ํ๋ฉด ์บ์คํ ํ์ง๋ง ๋ณดํต long์ผ๋ก ๋ฐ๋ ๊ฒ ์์
- reduce()๋ “๋์ ํด์ ํ๋๋ก ํฉ์น๋” ๊ฐ๋ ฅํ ์ต์ข
์ฐ์ฐ
- ์ด๊ธฐ๊ฐ(identity) ์์ผ๋ฉด ๊ฒฐ๊ณผ๊ฐ ๋ฐ๋ก T
- ์ด๊ธฐ๊ฐ ์์ผ๋ฉด Optional ๋ฐํ
'๐ฉโ๐ปDeveloper ๐ก > ๐พBack-end๐๏ธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Hello, jsp! (0) | 2026.03.12 |
|---|---|
| ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ(WAS) (1) | 2026.03.12 |
| JAVA ์ค๋ ๋(Thread) ์์ ์ ๋ฆฌ (0) | 2026.02.12 |
| Java ์ ๋ค๋ฆญ(Generic) ์์ ์ ๋ณต (0) | 2026.02.12 |
| JAVA ์ปฌ๋ ์ ์๋ฃ๊ตฌ์กฐ (0) | 2026.02.11 |