Skip to content

Latest commit

Β 

History

History
25 lines (20 loc) Β· 2.84 KB

Item45.md

File metadata and controls

25 lines (20 loc) Β· 2.84 KB

[Item 45] μŠ€νŠΈλ¦Όμ€ μ£Όμ˜ν•΄μ„œ μ‚¬μš©ν•˜λΌ.

슀트림이 μ œκ³΅ν•˜λŠ” 핡심 κ°œλ… 쀑 핡심은 두 κ°€μ§€λ‘œ λ‚˜λˆŒ 수 μžˆμŠ΅λ‹ˆλ‹€.

  • μŠ€νŠΈλ¦Όμ€ 데이터 μ›μ†Œμ˜ μœ ν•œ ν˜Ήμ€ λ¬΄ν•œ μ‹œν€€μŠ€λ₯Ό λœ»ν•©λ‹ˆλ‹€.
  • 슀트림 νŒŒμ΄ν”„λΌμΈμ€ 이 μ›μ†Œλ“€λ‘œ μˆ˜ν–‰ν•˜λŠ” μ—°μ‚° 단계λ₯Ό ν‘œν˜„ν•˜λŠ” κ°œλ…μž…λ‹ˆλ‹€.

μŠ€νŠΈλ¦Όμ€ μ†ŒμŠ€ 슀트림으둜 μ‹œμž‘ν•΄μ„œ 쒅단(μ΅œμ’…) μ—°μ‚°(terminal operation)으둜 λλ‚˜λ©°, κ·Έ 사이에 ν•˜λ‚˜ μ΄μƒμ˜ 쀑간 μ—°μ‚°μžκ°€ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. 쀑간 μ—°μ‚°μžλŠ” μ–΄λ– ν•œ λ°©μ‹μœΌλ‘œ λ³€ν™˜(transform) ν•©λ‹ˆλ‹€. μ΅œμ’… 연산은 μ›μ†Œλ₯Ό μ •λ ¬ν•΄ μ»¬λ ‰μ…˜μ— λ‹΄κ±°λ‚˜, νŠΉμ • μ›μ†Œ ν•˜λ‚˜λ₯Ό μ„ νƒν•˜κ±°λ‚˜, λͺ¨λ“  μ›μ†Œλ₯Ό 좜λ ₯ν•˜λŠ” μ‹μž…λ‹ˆλ‹€.

슀트림 νŒŒμ΄ν”„ 라인은 lazyν•©λ‹ˆλ‹€. μ΅œμ’… μ—°μ‚°μžκ°€ 호좜 되기 μ „κΉŒμ§€ μ‹€ν–‰ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ΅œμ’… 연산에 쓰이지 μ•ŠλŠ” 데이터 μ›μ†ŒλŠ” 계산에 쓰이지 μ•ŠμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ 지연 ν‰κ°€λŠ” λ¬΄ν•œ μŠ€νŠΈλ¦Όμ„ λ‹€λ£° 수 있게 ν•΄μ€λ‹ˆλ‹€. μ΅œμ’… 연산이 μ—†λŠ” μŠ€νŠΈλ¦Όμ€ 아무일도 ν•˜μ§€ μ•ŠμœΌλ‹ˆ(NOP) λΉΌλ¨ΉλŠ” 일이 없도둝 ν•©μ‹œλ‹€.

슀트림 APIλŠ” νŒŒμ΄ν”„λΌμΈ ν•˜λ‚˜λ₯Ό κ΅¬μ„±ν•˜λŠ” λͺ¨λ“  ν˜ΈμΆœμ„ μ—°κ²°ν•˜μ—¬ 단 ν•˜λ‚˜μ˜ ν‘œν˜„μ‹μœΌλ‘œ μ™„μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μŠ€νŠΈλ¦Όμ„ μ΄μš©ν•΄μ„œ λ‹€μ–‘ν•œ κΈ°λŠ₯을 ꡬ사할 수 μžˆμ§€λ§Œ, 잘λͺ» μ‚¬μš©ν•˜λ©΄ 읽기 μ–΄λ €μ›Œμ§€κ³  μœ μ§€λ³΄μˆ˜ ν•˜κΈ°λ„ νž˜λ“€μ–΄μ§‘λ‹ˆλ‹€.
μŠ€νŠΈλ¦Όμ„ γ…Šμ²˜μŒ μ‚¬μš©ν•˜λ©΄ λͺ¨λ“  λ°˜λ³΅λ¬Έμ„ 슀트림으둜 λ°”κΎΈκ³  μ‹Άκ² μ§€λ§Œ, μ‹ μ€‘ν•˜κ²Œ 생각해봐야 ν•©λ‹ˆλ‹€. 가독성과 μœ μ§€λ³΄μˆ˜, λ©”λͺ¨λ¦¬ μΈ‘λ©΄μ—μ„œ 손해λ₯Ό λ³Ό 수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€.
슀트림 νŒŒμ΄ν”„λΌμΈμ—μ„œ 계산을 ν•¨μˆ˜ 객체둜 ν‘œν˜„ν•˜λŠ”λ° ν•¨μˆ˜ κ°μ²΄λ‘œλŠ” ν•  수 μ—†μ§€λ§Œ μ½”λ“œ λΈ”λ‘μœΌλ‘œ ν•  수 μžˆλŠ” 일듀이 μžˆμŠ΅λ‹ˆλ‹€.

  • μ½”λ“œ λΈ”λ‘μ—μ„œλŠ” λ²”μœ„ μ•ˆμ˜ μ§€μ—­λ³€μˆ˜λ₯Ό 읽고 μˆ˜μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ λžŒλ‹€μ—μ„œλŠ” finalμ΄κ±°λ‚œ effective final만 읽을 수 있고, μ§€μ—­λ³€μˆ˜λ₯Ό μˆ˜μ •ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
  • μ½”λ“œ λΈ”λ‘μ—μ„œλŠ” return문을 μ‚¬μš©ν•΄ λ©”μ„œλ“œμ—μ„œ λΉ μ Έλ‚˜κ°€κ±°λ‚˜, breakλ‚˜ continue 문으둜 블둝 λ°”κΉ₯의 λ°˜λ³΅λ¬Έμ„ μ’…λ£Œν•˜κ±°λ‚˜ λ°˜λ³΅λ¬Έμ„ ν•œ 번 κ±΄λ„ˆλ›Έ 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ λ©”μ„œλ“œ 선언에 λͺ…μ‹œλœ 검사 μ˜ˆμ™Έλ₯Ό 던질 수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ λžŒλ‹€λ‘œλŠ” 이 쀑 어떀것도 ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

계산 λ‘œμ§μ—μ„œ μ΄μƒμ˜ 일듀을 μˆ˜ν–‰μ„ ν•œλ‹€λ©΄ μŠ€νŠΈλ¦Όκ³ΌλŠ” λ§žμ§€ μ•ŠλŠ” κ²ƒμž…λ‹ˆλ‹€. λ‹€μŒμ€ 슀트림과 μ•ˆμ„± 맞좀인 일듀 μž…λ‹ˆλ‹€.

  • μ›μ†Œλ“€μ˜ μ‹œν€€μŠ€λ₯Ό μΌκ΄€λ˜κ²Œ λ³€ν™˜ν•œλ‹€.
  • μ›μ†Œλ“€μ˜ μ‹œν€€μŠ€λ₯Ό ν•„ν„°λ§ν•œλ‹€.
  • μ›μ†Œλ“€μ˜ μ‹œν€€μŠ€λ₯Ό ν•˜λ‚˜μ˜ 연산을 μ‚¬μš©ν•΄ κ²°ν•©ν•œλ‹€.
  • μ›μ†Œλ“€μ˜ μ‹œν€€μŠ€λ₯Ό μ»¬λ ‰μ…˜μ— λͺ¨μ€λ‹€.
  • μ›μ†Œλ“€μ˜ μ‹œν€€μŠ€μ—μ„œ γ…ŒνŠΉμ • 쑰건을 λ§Œμ‘±ν•˜λŠ” μ›μ†Œλ₯Ό μ°ΎλŠ”λ‹€.