π¦ chap1. μλ° 8, 9, 10, 11 : λ¬΄μ¨ μΌμ΄ μΌμ΄λκ³ μλκ°?
1.1 μμ¬μ νλ¦μ 무μμΈκ°?
μλ° μμ¬λ₯Ό ν΅νμ΄ κ°μ₯ ν° λ³νκ° μλ° 8μμ μΌμ΄λ¬λ€.
μ΄λ° κ³ μ μ μΈ μ½λλ μλ° 8μμ μλμ²λΌ λ°λμλ€.
μλ° 8μ κ°κ²°ν μ½λ, λ©ν°μ½μ΄ νλ‘μΈμμ μ¬μ΄ νμ©μ΄λΌλ λ κ°μ§ μꡬμ¬νμ κΈ°λ°μΌλ‘ νλ€.
μλ° 8μμ μ 곡νλ μλ‘μ΄ κΈ°μ μ λ€μκ³Ό κ°λ€.
- μ€νΈλ¦Ό API
- λ©μλμ μ½λλ₯Ό μ λ¬νλ κΈ°λ²
- μΈν°νμ΄μ€μ λν΄νΈ λ©μλ
μλ° 8μ λ°μ΄ν°λ² μ΄μ€ μ§μ μΈμ΄μμ ννμμ μ²λ¦¬νλ κ²μ²λΌ λ³λ ¬ μ°μ°μ μ§μνλ μ€νΈλ¦Όμ΄λΌλ μλ‘μ΄ API λ₯Ό μ 곡νλ€.
κ³ μμ€ μΈμ΄λ‘ μνλ λμμ νννλ©΄, ꡬνλΆμμ μ΅μ μ μ μμ€ μ€ν λ°©λ²μ μ ννλ λ°©μμΌλ‘ λμνλ€.
μ€νΈλ¦Όμ μ΄μ©νλ©΄ μλ¬λ₯Ό μμ£Ό μΌμΌν€κ³ λΉμ©μ΄ ν¨μ¬ λΉμΌ synchronized
ν€μλλ₯Ό μ¬μ©νμ§ μμλ λλ€.
λ©μλμ μ½λλ₯Ό μ λ¬νλ κΈ°λ²μ μ΄μ©νλ©΄ λμ νλΌλ―Έν°νλ₯Ό μμ½κ² ꡬνν μ μλ€.
μ΄λ ν¨μν νλ‘κ·Έλλ°μμ μλ ₯μ λ°ννλ€.
1.2 μ μμ§λ μλ°λ μ§ννλκ°?
1.2.1 νλ‘κ·Έλλ° μΈμ΄ μνκ³μμ μλ°μ μμΉ
μλ°λ μΆλ°μ΄ μ’μλ€.
μ²μλΆν° λ§μ μ μ©ν λΌμ΄λΈλ¬λ¦¬λ₯Ό ν¬ν¨νλ μ μ€κ³λ κ°μ²΄μ§ν₯ μΈμ΄λ‘ μμνλ€.
μ€λ λμ λ½μ μ΄μ©ν μμν λμμ±λ μ§μνλ€.
νμ§λ§ λΉ λ°μ΄ν°λΌλ λμ μ μ§λ©΄νλ©΄μ λ³λ ¬ νλ‘μΈμ±μ νμ©ν΄μΌ νλλ°,
μ§κΈκΉμ§μ μλ°λ‘λ μΆ©λΆν λμν μ μμλ€.
μλ° 8μ μΆκ°λ κΈ°λ₯μ μλ°μ μλ μμ ν μλ‘μ΄ κ°λ μ΄μ§λ§
νμ¬ μμ₯μμ μꡬνλ κΈ°λ₯μ ν¨κ³Όμ μΌλ‘ μ 곡νλ€.
1.2.2 μ€νΈλ¦Ό μ²λ¦¬
μ€νΈλ¦Όμ΄λ ν λ²μ ν κ°μ© λ§λ€μ΄μ§λ μ°μμ μΈ λ°μ΄ν° νλͺ©λ€μ λͺ¨μμ΄λ€.
μ λμ€μμλ μλμ°¨ μμ° κ³΅μ₯ λΌμΈμ²λΌ μμ°¨μ μΌλ‘ λ°μ΄ν°λ₯Ό μ μ‘νμ§λ§ κ° μμ μ₯μμλ λμμ μμ μ μ²λ¦¬νλ€.
μλ° 8μμλ java.util.stream
ν¨ν€μ§μ μ€νΈλ¦Ό APIκ° μΆκ°λμλ€.
μ€νΈλ¦Ό API λ νμ΄νλΌμΈμ λ§λλ λ° νμν λ§μ λ©μλλ₯Ό μ 곡νλ€.
μ°λ¦¬λ μμ μ κ³ μμ€μΌλ‘ μΆμνν΄μ μΌλ ¨μ μ€νΈλ¦ΌμΌλ‘ λ§λ€μ΄ μ²λ¦¬ν μ μλ€.
λν μ€λ λλΌλ 볡μ‘ν μμ μ μ¬μ©νμ§ μμΌλ©΄μλ 곡μ§λ‘ λ³λ ¬μ±μ μ»μ μ μλ€.
1.2.3 λμ νλΌλ―Έν°νλ‘ λ©μλμ μ½λ μ λ¬νκΈ°
μλ° 8 μ΄μ μλ λ©μλλ₯Ό λ€λ₯Έ λ©μλλ‘ μ λ¬ν λ°©λ²μ΄ μμλ€.
μλ° 8μμλ λ©μλλ₯Ό λ€λ₯Έ λ©μλμ μΈμλ‘ λ겨주λ κΈ°λ₯μ μ 곡νλ€.
μ΄λ¬ν κΈ°λ₯μ μ΄λ‘ μ μΌλ‘ λμ νλΌλ―Έν°ν(behavior parameterization)λΌκ³ λΆλ₯Έλ€
1.2.4 λ³λ ¬μ±κ³Ό 곡μ κ°λ³ λ°μ΄ν°
λ³΄ν΅ λ€λ₯Έ μ½λμ λμμ μ€ννλλΌλ μμ νκ² μ€νν μ μλ μ½λλ₯Ό λ§λ€λ €λ©΄ 곡μ λ κ°λ³ λ°μ΄ν°μ μ κ·Όνμ§ μμμΌ νλ€.
μ΄λ¬ν ν¨μλ₯Ό μμ ν¨μ, λΆμμ©μλ ν¨μ, 무μν ν¨μλΌκ³ λΆλ₯Έλ€.
μλ° 8 μ€νΈλ¦Όμ νμ©νλ©΄ κΈ°μ‘΄μ μλ° μ€λ λ API (synchronized)λ³΄λ€ μ½κ² λ³λ ¬μ±μ νμ©ν μ μλ€.
1.2.5 μλ°κ° μ§νν΄μΌ νλ μ΄μ
λ§μ μ΄λ μλ°μ λ³νμ μ΄λ―Έ μ΅μν΄μ Έ μκ³ κ·Έκ²μ΄ κ°μ Έλ€μ£Όλ νΈλ¦¬ν¨μ λλ¦¬κ³ μλ€.
μλ₯Ό λ€λ©΄ μ λ€λ¦μ΄ κ°μκΈ° λνλκ³ , List κ° List
νμ λ°ν Iterator λμ for-each 루νλ₯Ό μ¬μ©ν μ μκ² λμλ€.
κ³ μ μ μΈ κ°μ²΄μ§ν₯μμ λ²μ΄λ ν¨μν νλ‘κ·Έλλ°μΌλ‘ λ€κ°μ°λ€.
μΈμ΄λ νλμ¨μ΄λ νλ‘κ·Έλλ¨Έ κΈ°λμ λ³νμ λΆμνλ λ°©ν₯μΌλ‘ λ³νν΄μΌ νλ€.
1.3 μλ° ν¨μ
νλ‘κ·Έλλ° μΈμ΄μμ ν¨μλΌλ μ©μ΄λ λ©μλ, νΉν μ μ λ©μλμ κ°μ μλ―Έλ‘ μ¬μ©λλ€.
μλ°μ ν¨μλ μ΄μ λν΄ μνμ μΈ ν¨μμ²λΌ μ¬μ©λλ©° λΆμμ©μ μΌμΌν€μ§ μλ ν¨μλ₯Ό μλ―Ένλ€.
μλ° 8μμλ ν¨μλ₯Ό μλ‘μ΄ κ°μ νμμΌλ‘ μΆκ°νλ€.
νλ‘κ·Έλλ° μΈμ΄μ ν΅μ¬μ κ°μ λ°κΎΈλ κ²μ΄λ€.
μμ¬μ μΌλ‘λ, μ ν΅μ μΌλ‘λ νλ‘κ·Έλλ° μΈμ΄μμλ μ΄ κ°μ μΌκΈκ° λλ μΌκΈμλ―ΌμΌλ‘ λΆλ₯Έλ€.
νλ‘κ·Έλλ°μ μ€ννλ λμ λͺ¨λ ꡬ쑰체λ₯Ό μμ λ‘κ² μ λ¬ν μλ μλλ°
μ΄λ κ² μ λ¬ν μ μλ ꡬ쑰체λ μ΄κΈ μλ―Όμ΄λ€.
λ©μλ, ν΄λμ€ λ±μ μ΄κΈ μλ° μλ―Όμ ν΄λΉνλ€.
μλ° 8 μ€κ³μλ€μ μ΄κΈ μλ―Όμ μΌκΈ μλ―ΌμΌλ‘ λ°κΏ μ μλ κΈ°λ₯μ μΆκ°νλ€.
λ°νμμ λ©μλλ₯Ό μ λ¬ν μ μλ€λ©΄ νλ‘κ·Έλλ°μ μ μ©νκ² νμ©ν μ μλ€.
1.3.1 λ©μλμ λλ€λ₯Ό μΌκΈ μλ―ΌμΌλ‘
μλ° 8μμλ λ©μλκ° μ΄κΈκ°μ΄ μλ μΌκΈκ°μ΄λ€.
κΈ°μ‘΄μ κ°μ²΄ μ°Έμ‘°λ₯Ό μ΄μ©νμ¬ κ°μ²΄λ₯Ό μ£Όκ³ λ°μλ κ² μ²λΌ File::isHidden
κ³Ό κ°μ΄ λ©μλ μ°Έμ‘°λ₯Ό λ§λ€μ΄ μ λ¬ν μ μκ² λμλ€.
- λλ€ : μ΅λͺ ν¨μ
λλ€λ₯Ό ν¬ν¨ν ν¨μλ μΌκΈκ°μΌλ‘ μ·¨κΈν μ μλ€.
1.3.2 μ½λ λ겨주기 : μμ
νΉμ νλͺ©μ μ νν΄μ λ°ννλ λμμ νν°λΌκ³ νλ€.
μλ° 8 μ΄μ μλ λ€μμ²λΌ λ©μλλ₯Ό ꡬννμ κ²μ΄λ€.
λκ΅°κ°λ μ¬κ³Όλ₯Ό 무κ²λ‘ νν°λ§νκ³ μΆμ μλ μλ€.
μ΄λ¬ν λ³νλ λ³΄ν΅ λ³΅μ¬&λΆμ¬λ£κΈ°λ‘ μ΄λ£¨μ΄μ§λ€.
λ§μ½ μ΄λ€ μ½λμ λ²κ·Έκ° μλ€λ©΄ λ³΅μ¬ λΆμ¬λ£κΈ°ν λͺ¨λ μ½λλ₯Ό κ³ μ³μΌνλ λ¨μ μ΄ μλ€.
μλ° 8μμλ μ½λλ₯Ό μΈμλ‘ λκ²¨μ€ μ μκ³ Predicate λ κ·Έ μμμ΄λ€.
Predicate λ μνμμ μΈμλ‘ κ°μ λ°μ true λ false λ₯Ό λ°ννλ ν¨μμ΄λ€.
1.3.3 λ©μλ μ λ¬μμ λλ€λ‘
ν λ²λ§ μ¬μ©ν λ©μλλ λ°λ‘ μ μλ₯Ό ꡬνν νμκ° μλ€.
μ΄ λ, λλ€λ₯Ό μ¬μ©νμ¬ κ°λ¨ν ν΄κ²°ν μ μλ€.
λ€λ§ λλ€κ° λͺ μ€ μ΄μμΌλ‘ κΈΈμ΄μ§λ€λ©΄ μ΄ μ½λκ° μννλ μΌμ μ μ€λͺ νλ λ©μλλ₯Ό μ μνκ³ λ©μλ μ°Έμ‘°λ₯Ό μ¬μ©νλ κ²μ΄ λ°λμ§νλ€.
1.4 μ€νΈλ¦Ό
κ±°μ λͺ¨λ μλ° μ΄ν리μΌμ΄μ μ 컬λ μ μ λ§λ€κ³ νμ©νλ€.
μλ₯Ό λ€μ΄ 리μ€νΈμμ κ³ κ°μ κ±°λλ§ νν°λ§ν λ€μ ν΅νλ‘ κ²°κ³Όλ₯Ό κ·Έλ£Ήνν΄μΌ νλ€κ³ νμ.
μ½λλ₯Ό ν λ²μ μ΄ν΄νκΈ° μ΄λ ΅λ€.
μ€νΈλ¦Ό API λ₯Ό μ΄μ©νλ©΄ ν΄κ²°ν μ μλ€.
- μΈλΆ λ°λ³΅ : 컬λ μ μμλ for-each 루νλ₯Ό μ΄μ©νμ¬ κ° μμλ₯Ό λ°λ³΅νλ©° μμ μ μννλ€.
- λ΄λΆ λ°λ³΅ : μ€νΈλ¦Ό API μμλ λΌμ΄λΈλ¬λ¦¬ λ΄λΆμμ λͺ¨λ λ°μ΄ν°κ° μ²λ¦¬λλ€.
1.4.1 λ©ν°μ€λ λ©μ μ΄λ ΅λ€
λ©ν°μ€λ λ© νκ²½μμ κ°κ°μ μ€λ λλ λμμ 곡μ λ λ°μ΄ν°μ μ κ·Όνκ³ λ°μ΄ν°λ₯Ό κ°±μ ν μ μλ€.
νμ§λ§ μ€λ λλ₯Ό μλͺ» μ μ΄νλ©΄ μμΉ μμ λ°©μμΌλ‘ λ°μ΄ν°κ° λ°λ μ μλ€.
μλ° 8μ μ€νΈλ¦Όμμ λ©ν°μ½μ΄ νμ© μ΄λ €μμ λν λ¬Έμ λ₯Ό λν ν΄κ²°νλ€.
- λ°μ΄ν°λ₯Ό λΆλ¦¬ν΄ νλμ CPU λ μλΆλΆ, λ€λ₯Έ CPU λ λ· λΆλΆμ μ²λ¦¬νλλ‘ νλ€. μ΄λ₯Ό ν¬νΉ λ¨κ³λΌκ³ νλ€.
- κ° CPUκ° λ°μ΄ν°λ₯Ό μ²λ¦¬νλ€.
- κ²°κ³Όλ₯Ό νλλ‘ μ 리νλ€.
parallelStream μΌλ‘ λ³λ ¬ μ²λ¦¬λ₯Ό μμ²ν μ μλ€.
1.5 λν΄νΈ λ©μλμ μλ° λͺ¨λ
μλ° 8μμλ μΈν°νμ΄μ€λ₯Ό μ½κ² λ°κΏ μ μλλ‘ λν΄νΈ λ©μλλ₯Ό μ§μνλ€.
μλ° 8 μ΄μ μλ List
μ¦ λ°λ μλ° 8μμλ μ΄μ μ½λμ Stream μ μΆκ°νμ¬ μ»΄νμΌ ν μκ° μλ€.
μ΄λ―Έ 컬λ μ APIμ μΈν°νμ΄μ€λ₯Ό ꡬννλ λ§μ 컬λ μ νλ μμν¬κ° μ‘΄μ¬νλ κ²λ λ¬Έμ λ€.
κ·Έλμ ꡬν ν΄λμ€μμ ꡬννμ§ μμλ λλ λ©μλλ₯Ό μΈν°νμ΄μ€μ μΆκ°νλ κΈ°λ₯μ μΆκ°νλ€.
λν΄νΈ λ©μλλ₯Ό μ΄μ©νλ©΄ κΈ°μ‘΄ μ½λλ₯Ό 건λλ¦¬μ§ μκ³ λ μλμ μΈν°νμ΄μ€ μ€κ³λ₯Ό μμ λ‘κ² νμ₯νλ€.
μλ° 8μμλ List μμ μ§μ sort λ₯Ό νΈμΆν μ μλ€.
μ΄λ¬ν default λ©μλκ° μΆκ°λμκΈ° λλ¬Έμ΄λ€.
1.6 ν¨μν νλ‘κ·Έλλ°μμ κ°μ Έμ¨ λ€λ₯Έ μ μ©ν μμ΄λμ΄
μλ° 8μμλ NPEλ₯Ό ννΌν μ μκ² λμμ£Όλ Optional
Optional μ κ°μ΄ μλ μν©μ μ΄λ»κ² μ²λ¦¬ν μ§ λͺ μμ μΌλ‘ ꡬννλ λ©μλλ₯Ό κ°μ§κ³ μλ€.