πŸ–₯️ λ°±μ—”λ“œ/Java

[ch.14] 슀트림의 νŠΉμ§•

OR15A 2023. 11. 15. 20:52

슀트림

  • λ°μ΄ν„°μ†ŒμŠ€ 좔상화 + (μžμ£Όμ‚¬μš©ν•˜λŠ”)λ©”μ„œλ“œ μ •μ˜
  • λ°μ΄ν„°μ†ŒμŠ€ 좔상화: λ°μ΄ν„°μ†ŒμŠ€κ°€ 무엇이든 간에 κ°™μ€ λ°©μ‹μœΌλ‘œ λ‹€λ£¨λŠ” 것=μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±↑ (λ°°μ—΄, μ»¬λ ‰μ…˜, νŒŒμΌλ°μ΄ν„° λͺ¨λ‘ κ°€λŠ₯함)
  • μœ ν•œμŠ€νŠΈλ¦Ό/λ¬΄ν•œμŠ€νŠΈλ¦Όμ΄ 있음.

 

슀트림의 νŠΉμ§•

β—‡ μŠ€νŠΈλ¦Όμ€ 데이터 μ†ŒμŠ€λ₯Ό λ³€κ²½ν•˜μ§€ μ•ŠλŠ”λ‹€.

  • 데이터 μ†ŒμŠ€λ‘œλΆ€ν„° 읽기만 함. 변경은 X.
  • ν•„μš”μ‹œ λ°˜ν™˜μ΄ κ°€λŠ₯함(κ²°κ³Όλ₯Ό 담은 μ»¬λ ‰μ…˜/λ°°μ—΄)

β—‡ μŠ€νŠΈλ¦Όμ€ μΌνšŒμš©μ΄λ‹€.

  • ν•œ 번 μ‚¬μš©ν•˜λ©΄(μ΅œμ’…μ—°μ‚°μˆ˜ν–‰) 슀트림 λ‹«ν˜€μ„œ λ‹€μ‹œ μ‚¬μš©ν•  수 μ—†μŒ. ν•„μš”μ‹œ λ‹€μ‹œ μƒμ„±ν•˜λ©΄ 됨.

β—‡ μŠ€νŠΈλ¦Όμ€ μž‘μ—…μ„ λ‚΄λΆ€λ°˜λ³΅μœΌλ‘œ μ²˜λ¦¬ν•œλ‹€.

  • λ‚΄λΆ€λ°˜λ³΅=λ°˜λ³΅λ¬Έμ„ λ©”μ„œλ“œ 내뢀에 숨길 수 μžˆλŠ” 것.

β—‡ 슀트림의 연산은 쀑간연산과 μ΅œμ’…μ—°μ‚°μ΄ μžˆλ‹€.

  • λ‹€μ–‘ν•œ 연산을 μ œκ³΅ν•΄μ„œ λ³΅μž‘ν•œ μž‘μ—…λ“€μ„ κ°„λ‹¨νžˆ μ²˜λ¦¬ν•˜λŠ” 것이 κ°€λŠ₯함.
  • *쀑간연산: μ—°μ‚°κ²°κ³Όκ°€ μŠ€νŠΈλ¦Όμž„. μŠ€νŠΈλ¦Όμ— μ—°μ†ν•΄μ„œ  쀑간연산이 κ°€λŠ₯함.
  • *μ΅œμ’…μ—°μ‚°: μ—°μ‚°κ²°κ³Όκ°€ 슀트림X. 슀트림의 μš”μ†Œλ₯Ό  μ†Œλͺ¨ν•˜λ―€λ‘œ 단 ν•œ 번만 κ°€λŠ₯함

β—‡ μ§€μ—°λœ 연산을 ν•œλ‹€.

  • μ΅œμ’…μ—°μ‚°μ΄ μˆ˜ν–‰λ˜κΈ° μ „κΉŒμ§€λŠ” 쀑간연산 μˆ˜ν–‰X (λ¬΄ν•œμŠ€νŠΈλ¦Όμ—λ„ distinct()μ€‘λ³΅μ œκ±°κ°€ κ°€λŠ₯ν•œ 이유)
  • 즉각적인 연산이 μ•„λ‹ˆλ©° μ–΄λ–€ μˆ˜ν–‰μ„ ν•΄μ•Όν•˜λŠ”μ§€ μ§€μ •λ§Œ ν•΄λ‘ . μ΅œμ’… 연산이 호좜되면 μ§€μ •λœ 쀑간 연산이 싀행됨.

β—‡ λ³‘λ ¬μŠ€νŠΈλ¦Όμ΄ κ°€λŠ₯ν•˜λ‹€.

  • λ‚΄λΆ€μ μœΌλ‘œ fork&join ν”„λ ˆμž„μ›Œν¬λ₯Ό μ΄μš©ν•΄μ„œ μžλ™μ μœΌλ‘œ 연산을 λ³‘λ ¬λ‘œ μˆ˜ν–‰ν•¨.(pararell( )이용)
  • λ³‘λ ¬μž‘μ—…μ΄ λ””ν΄νŠΈμ΄κ³  λ³‘λ ¬ν•˜μ§€ μ•Šμ„ λ•ŒλŠ” sequential( )λ©”μ„œλ“œ μ‚¬μš©.

β—‡ κΈ°λ³Έν˜• λ°μ΄ν„°μ†ŒμŠ€λ₯Ό λ‹€λ£¨λŠ” μŠ€νŠΈλ¦Όμ„ μ œκ³΅ν•œλ‹€.

  • μ˜€ν† λ°•μ‹±&μ–Έλ°•μ‹±μœΌλ‘œ μΈν•œ λΉ„νš¨μœ¨μ„ 쀄이기 μœ„ν•΄ λ°μ΄ν„°μ†ŒμŠ€μ˜ μš”μ†Œλ₯Ό κΈ°λ³Έν˜•μœΌλ‘œ λ‹€λ£¨λŠ” μŠ€νŠΈλ¦Όμ„ μ œκ³΅ν•¨.
  • κΈ°λ³Έν˜•λ§Œ 닀루기 λ•Œλ¬Έμ— κ΄€λ ¨λœ μœ μš©ν•œ λ©”μ„œλ“œλ₯Ό μΆ”κ°€λ‘œ μ œκ³΅ν•¨
  • ex) IntStream, LongStream, DoubleStream