Skip to content

Latest commit

ย 

History

History
107 lines (104 loc) ยท 6.04 KB

File metadata and controls

107 lines (104 loc) ยท 6.04 KB

Stream

Stream ์ด๋ž€?

  • Java 8๋ถ€ํ„ฐ ์ง€์›ํ•˜๋Š” ๊ธฐ๋Šฅ
  • ์ปฌ๋ ‰์…˜, ๋ฐฐ์—ด ๋“ฑ์— ๋Œ€ํ•ด ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์š”์†Œ๋“ค์„ ํ•˜๋‚˜์”ฉ ์ฐธ์กฐํ•˜์—ฌ ๋ฐ˜๋ณต์ ์ธ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๊ธฐ๋Šฅ
  • ๋ถˆํ•„์š”ํ•œ for๋ฌธ๊ณผ ๊ทธ ์•ˆ์—์„œ ๋™์ž‘ํ•˜๋Š” if๋ฌธ ๋“ฑ์˜ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š๊ณ  ๊น”๋”ํ•˜๊ณ  ์ง๊ด€์ ์ธ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Œ

Stream ํŠน์ง•

  1. ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Œ
    • Stream์€ ์›๋ณธ๋ฐ์ดํ„ฐ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ธฐ๋งŒ ํ•  ๋ฟ, ์›๋ณธ๋ฐ์ดํ„ฐ ์ž์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Œ
  2. ์ผํšŒ์šฉ์ด๋‹ค.
    • Stream์€ ํ•œ ๋ฒˆ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ซํ˜€์„œ ์žฌ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•จ
    • ํ•„์š”ํ•˜๋‹ค๋ฉด ์ •๋ ฌ๋œ ๊ฒฐ๊ณผ๋ฅผ ์ปฌ๋ ‰์…˜์ด๋‚˜ ๋ฐฐ์—ด์— ๋‹ด์•„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Œ
  3. ์ž‘์—…์„ ๋‚ด๋ถ€ ๋ฐ˜๋ณต์œผ๋กœ ์ฒ˜๋ฆฌํ•จ
    • ๋‚ด๋ถ€ ๋ฐ˜๋ณต์€ ๋ฐ˜๋ณต๋ฌธ์„ ๋ฉ”์„œ๋“œ์˜ ๋‚ด๋ถ€์— ์ˆจ๊ธธ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธ
    • ์ฆ‰, ๋ฐ˜๋ณต๋ฌธ์ด ์ฝ”๋“œ ์ƒ์— ๋…ธ์ถœ๋˜์ง€ ์•Š์Œ

Stream ๊ตฌ์กฐ

  • Stream์˜ ์„ธ ๊ฐ€์ง€ ๊ตฌ์กฐ
    1. Stream ์ƒ์„ฑ
    2. ์ค‘๊ฐœ ์—ฐ์‚ฐ
    3. ์ตœ์ข… ์—ฐ์‚ฐ
  • ๋ฐ์ดํ„ฐ ์†Œ์Šค ๊ฐ์ฒด ์ง‘ํ•ฉ.Stream์ƒ์„ฑ().์ค‘๊ฐœ์—ฐ์‚ฐ().์ตœ์ข…์—ฐ์‚ฐ();
  • ์˜ˆ์‹œ ์ฝ”๋“œ
String[] strArray = {"red", "yellow", "blue", "green", "brown"};
Set<String> colorSet = Arrays.asList(strArray)              // strArray๋ฅผ List๋กœ ๋ณ€ํ™˜
			.stream()                           // 1. Stream ์ƒ์„ฑ
			.filter(x -> x.contains("b"))       // 2. ์ค‘๊ฐœ ์—ฐ์‚ฐ : "b"๊ฐ€ ํฌํ•จ๋œ ๋‹จ์–ด๋งŒ 
			.collect(Collectors.toSet());       // 3. ์ตœ์ข… ์—ฐ์‚ฐ : ์ค‘๊ฐœ ์—ฐ์‚ฐ์„ ํ†ตํ•ด ๊ฐ€๊ณต๋œ stream์„ Set ํ˜•ํƒœ๋กœ ๋ชจ์•„์คŒ
colorSet.forEach(x -> System.out.println(x));               // ์ถœ๋ ฅ: blue brown

Stream ์‚ฌ์šฉ ๊ฐ€๋Šฅ ๋ฐ์ดํ„ฐ์†Œ์Šค

  1. ์ปฌ๋ ‰์…˜
  2. ๋ฐฐ์—ด
  3. ๊ฐ€๋ณ€ ๋งค๊ฐœ๋ณ€์ˆ˜
  4. ์ง€์ •๋œ ๋ฒ”์œ„์˜ ์—ฐ์†๋œ ์ •์ˆ˜
  5. ํŠน์ • ํƒ€์ž…์˜ ๋‚œ์ˆ˜๋“ค
  6. ๋žŒ๋‹ค ํ‘œํ˜„์‹
  7. ํŒŒ์ผ
  8. ๋นˆ ์ŠคํŠธ๋ฆผ

์ค‘๊ฐœ ์—ฐ์‚ฐ

  • ๋Œ€ํ‘œ์ ์ธ ์ค‘๊ฐœ ์—ฐ์‚ฐ๊ณผ ๊ทธ์— ๋”ฐ๋ฅธ ๋ฉ”์„œ๋“œ
    1. Stream ํ•„ํ„ฐ๋ง: filter(), distinct()
    2. Stream ๋ณ€ํ™˜: map(), flatMap()
      • map(): ๋‹จ์ผ ์ŠคํŠธ๋ฆผ ์•ˆ์˜ ์š”์†Œ๋ฅผ ์›ํ•˜๋Š” ํŠน์ • ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜
      • flatMap(): ์ŠคํŠธ๋ฆผ ์•ˆ์˜ ๋ชจ๋“  ์›์†Œ๋ฅผ ๋‹จ์ผ ์›์†Œ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ณ€ํ™˜
    3. Stream ์ œํ•œ: limit(), skip()
    4. Stream ์ •๋ ฌ: sorted()
    5. Stream ์—ฐ์‚ฐ ๊ฒฐ๊ณผ ํ™•์ธ: peek()

์ตœ์ข… ์—ฐ์‚ฐ

  • ์ตœ์ข… ์—ฐ์‚ฐ์€ ์•ž์„œ ์ค‘๊ฐœ ์—ฐ์‚ฐ์„ ํ†ตํ•ด ๋งŒ๋“ค์–ด์ง„ stream์— ์žˆ๋Š” ์š”์†Œ๋“ค์— ๋Œ€ํ•ด ๋งˆ์ง€๋ง‰์œผ๋กœ ๊ฐ ์š”์†Œ๋ฅผ ์†Œ๋ชจํ•˜๋ฉฐ ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ํ‘œ์‹œ
  • ์ง€์—ฐ(lazy)๋˜์—ˆ๋˜ ๋ชจ๋“  ์ค‘๊ฐœ ์—ฐ์‚ฐ๋“ค์ด ์ตœ์ข… ์—ฐ์‚ฐ์‹œ์— ๋ชจ๋‘ ์ˆ˜ํ–‰๋จ
  • ์ตœ์ข… ์—ฐ์‚ฐ ์‹œ์— ๋ชจ๋“  ์š”์†Œ๋ฅผ ์†Œ๋ชจํ•œ ํ•ด๋‹น stream์€ ๋” ์ด์ƒ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ
  • ๋Œ€ํ‘œ์ ์ธ ์ตœ์ข… ์—ฐ์‚ฐ
    1. ์š”์†Œ์˜ ์ถœ๋ ฅ: forEach()
    2. ์š”์†Œ์˜ ์†Œ๋ชจ: reduce()
    3. ์š”์†Œ์˜ ๊ฒ€์ƒ‰: findFirst(), findAny()
    4. ์š”์†Œ์˜ ๊ฒ€์‚ฌ: anyMatch(), allMatch(), noneMatch()
    5. ์š”์†Œ์˜ ํ†ต๊ณ„: count(), min(), max()
    6. ์š”์†Œ์˜ ์—ฐ์‚ฐ: sum(), average()
    7. ์š”์†Œ์˜ ์ˆ˜์ง‘: collect()

allMatch() ์‚ฌ์šฉ ์‹œ ์ฃผ์˜ํ•  ์ 

  • allMatch()๋Š” ์ปฌ๋ ‰์…˜ ๋‚ด ๋ชจ๋“  ์š”์†Œ๋“ค์ด ์ฃผ์–ด์ง„ ์กฐ๊ฑด์— ๋งŒ์กฑํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค.
  • ํ•˜์ง€๋งŒ ๋งŒ์•ฝ ์ปฌ๋ ‰์…˜์ด ๋น„์–ด์žˆ๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด ์–ด๋–จ๊นŒ?
@Test
public void allMatchTestWhenEmpty() {
	List<Member> members = new AraryList<>();
	
	boolean result = members.stream()
        .allMatch(member -> member.getAge() > 20);
	
	assertThat(result).isFalse();
}
  • members ํšŒ์› ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋น„์–ด์žˆ๊ณ  20์‚ด ์ด์ƒ์˜ ํšŒ์›์ด ํ•œ ๋ช…๋„ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์กฐ๊ฑด์— ๋งž์ง€ ์•Š์•„ false๋ฅผ ๋ฐ˜ํ™˜ํ•  ๊ฒƒ์œผ๋กœ ๋ณดํ†ต ์˜ˆ์ƒํ•  ๊ฒƒ์ด๋‹ค.
  • ํ•˜์ง€๋งŒ allMatch() ๋ฉ”์„œ๋“œ๋Š” true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ์ด๋Š” Vacuous Truth ๋ผ๋Š” ๋…ผ๋ฆฌํ•™ ๊ฐœ๋…์—์„œ ๋น„๋กฏ๋œ ๊ฒƒ์œผ๋กœ, P์ด๋ฉด Q์ด๋‹ค. ๋ผ๋Š” ๋ช…์ œ์—์„œ P๊ฐ€ ๊ฑฐ์ง“์ด๋ฉด Q๋Š” ์ฐธ์ด๋˜ ๊ฑฐ์ง“์ด๋˜ ์ƒ๊ด€์—†์ด ์ „์ฒด ๋ช…์ œ๋Š” ์ฐธ์ด ๋œ๋‹ค๋Š” ๊ฐœ๋…์ด๋‹ค.

Stream ์‚ฌ์šฉ ์‹œ ์ฃผ์˜์‚ฌํ•ญ

  1. ์ŠคํŠธ๋ฆผ ์žฌ์‚ฌ์šฉ
    • ์ŠคํŠธ๋ฆผ์€ ๋‹จ ํ•œ ๋ฒˆ๋งŒ ์†Œ๋น„ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์ŠคํŠธ๋ฆผ์„ ์žฌ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ปฌ๋ ‰์…˜์— ์ €์žฅํ•˜๊ฑฐ๋‚˜ ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋ฅผ ์บ์‹œํ•ด์•ผ ํ•œ๋‹ค.
  2. ์ŠคํŠธ๋ฆผ ํฌ๊ธฐ ๊ณ ๋ ค
    • ํฐ ๋ฐ์ดํ„ฐ์…‹์— ๋Œ€ํ•ด ์ŠคํŠธ๋ฆผ์„ ์ƒ์„ฑํ•  ๋•Œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์— ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.
    • ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ŠคํŠธ๋ฆผ ์ฒ˜๋ฆฌ๋Š” OutOfMemoryError๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค.
  3. ๋ณ‘๋ ฌ ์ŠคํŠธ๋ฆผ ์ฃผ์˜
    • parallelStream() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ‘๋ ฌ ์ŠคํŠธ๋ฆผ์„ ์ƒ์„ฑํ•  ๋•Œ, ์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ์„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.
    • ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰๋˜๋Š” ์—ฐ์‚ฐ์€ ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฃผ์˜
  4. ์ŠคํŠธ๋ฆผ์„ ์กฐ์ž‘ํ•˜๋Š” ์ค‘๊ฐ„ ์—ฐ์‚ฐ๊ณผ ์ตœ์ข… ์—ฐ์‚ฐ ์ดํ•ด
    • ์ค‘๊ฐ„ ์—ฐ์‚ฐ์€ ์ŠคํŠธ๋ฆผ์„ ๋ฆฌํ„ดํ•˜๋ฉฐ, ์ตœ์ข… ์—ฐ์‚ฐ์€ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
    • ์ŠคํŠธ๋ฆผ์„ ์ƒ์„ฑํ•œ ํ›„ ์–ธ์ œ ์ค‘๊ฐ„ ์—ฐ์‚ฐ๊ณผ ์ตœ์ข… ์—ฐ์‚ฐ์„ ์ ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์ดํ•ดํ•ด์•ผ ํ•œ๋‹ค.
  5. ์ŠคํŠธ๋ฆผ ์—ฐ์‚ฐ ์ˆœ์„œ ์ฃผ์˜
    • ์ŠคํŠธ๋ฆผ ์—ฐ์‚ฐ์˜ ์ˆœ์„œ๊ฐ€ ๊ฒฐ๊ณผ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋‹ค.
      • Filtering ์—ฐ์‚ฐ ํ›„ Mapping ์—ฐ์‚ฐํ•˜๊ธฐ
      • Sorting ์—ฐ์‚ฐ์€ ๋งˆ์ง€๋ง‰์— ์ˆ˜ํ–‰
      • ์ค‘๊ฐ„ ์—ฐ์‚ฐ ์ค‘์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ํฌํ•จํ•˜๋„๋ก ์ตœ์ ํ™”
      • ๋ถˆํ•„์š”ํ•œ ์ค‘๋ณต ์—ฐ์‚ฐ ํ”ผํ•˜๊ธฐ
  6. ์ŠคํŠธ๋ฆผ API ์ดํ•ด
    • ์ŠคํŠธ๋ฆผ API์˜ ๋‹ค์–‘ํ•œ ์—ฐ์‚ฐ์„ ์ดํ•ดํ•˜๊ณ  ํ™œ์šฉํ•œ๋‹ค.
  7. ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
    • ์ŠคํŠธ๋ฆผ ์—ฐ์‚ฐ ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  8. ์ŠคํŠธ๋ฆผ vs ๋ฐ˜๋ณต๋ฌธ ์„ ํƒ
    • ๋ชจ๋“  ์ž‘์—…์— ์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ•ญ์ƒ ์ข‹์€ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.
    • ๊ฐ„๋‹จํ•œ ๋ฐ˜๋ณต ์ž‘์—…์€ ์ „ํ†ต์ ์ธ ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹์„ ์ˆ˜๋„ ์žˆ๋‹ค.
  9. ์ŠคํŠธ๋ฆผ ์„ฑ๋Šฅ ์ตœ์ ํ™”
    • ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ŠคํŠธ๋ฆผ ์ฒ˜๋ฆฌ๋ฅผ ๊ณ ๋ คํ•  ๋•Œ, ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ์ŠคํŠธ๋ฆผ ๋ณ‘๋ ฌํ™” ๋ฐ ์ ์ ˆํ•œ ์ค‘๊ฐ„ ์—ฐ์‚ฐ์„ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค.
  10. ์ŠคํŠธ๋ฆผ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ณ€ํ™˜
    • ์ŠคํŠธ๋ฆผ์—์„œ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ณ€ํ™˜ ์—ฐ์‚ฐ์€ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋‹ค.