λͺ©λ‘π/Modern Java in Action (6)
DevLog πΆ
π¬ λͺ¨λ μλ° μΈ μ‘μ μ±ν° 5μ μ½κ³ μ 리ν κΈμ λλ€. βοΈ νν°λ§ π± ν리λμΌμ΄νΈλ‘ νν°λ§νκΈ° List crews = new ArrayList(); List backendCrews = crews.stream() // λλ€μ μΈμ(λ°±μλ ν¬λ£¨)λ₯Ό λ°μ νΉμ μμλ₯Ό μ ννλ€. .filter(crew -> crew.getCourse() == Course.BACKEND) .collect(Collectors.toUnmodifiableList()); μ§λ μ±ν°μμ μ¬μ©νλ μμ μ΄λ€. μ¬κΈ°μ filter λ©μλλ Predicateλ₯Ό μΈμλ‘ λ°μμ, ν΄λΉ ν리λμΌμ΄νΈμ μΌμΉνλ λͺ¨λ μμλ₯Ό ν¬ν¨νλ μ€νΈλ¦Όμ λ°ννλ€. π± κ³ μ μμ νν°λ§ distinct λ©μλλ₯Ό μ¬μ©νλ©΄ μ€λ³΅μ μ κ±°ν μμλ‘ μ΄λ£¨μ΄μ§ μ€νΈλ¦Όμ λ°..
π¬ λͺ¨λ μλ° μΈ μ‘μ μ±ν° 4μ μ½κ³ μ 리ν κΈμ λλ€. βοΈ μ€νΈλ¦Όμ΄λ? μλ° 8μ μλ‘κ² λ€μ΄μ¨ κΈ°λ₯ μ€, κ°μ₯ ν΅μ¬μ μΈ κΈ°λ₯μ΄λΌκ³ λ§ν΄λ 무방νλ€. 컬λ μ λ°μ΄ν°μ λ°λ³΅μ λμμ£Όκ³ , λ©ν° μ€λ λ μ½λ μμ΄ λ³λ ¬μ±μ ꡬνν μ μλ μμ£Ό μ μ©ν μΉκ΅¬μ΄λ€. λν, filterλ sorted, map, collect κ°μ μ°μ°μ ‘high-level building block’μ΄λΌκ³ νλλ°, μ€νΈλ¦Όμ λ§μΉ λΈλ‘μ²λΌ μκ³ , 쑰립ν μ μλ€λ μ μ΄ ν° νΉμ§μ΄λ€. βοΈ stream λ©μλ π± μ€νΈλ¦Όμ΄λ, λ°μ΄ν° μ²λ¦¬ μ°μ°μ μν΄ μμ€μμ μΆμΆλ μ°μλ μμμ΄λ€. 1) μ°μλ μμ 컬λ μ μ λ°μ΄ν°μ λν μλ£κ΅¬μ‘°μλ€λ©΄, μ€νΈλ¦Όμ μ΄λ₯Ό μ΄λ€ μμΌλ‘ κ³μ°ν μ§μ λν΄ λ€λ£¬λ€. λ κ°μ§ λͺ¨λ, μ°μλ κ° μ§ν©μ μΈν°ν..
π¬ λͺ¨λ μλ° μΈ μ‘μ μ±ν° 3μ μ½κ³ μ 리ν κΈμ λλ€. βοΈ λ©μλ μ°Έμ‘° λ©μλ μ°Έμ‘°λ₯Ό μ¬μ©ν΄μ λ μ½λλ₯Ό κ°κ²°νκ² λ§λ€μ΄λ³΄μ. // Before inventory.sort((a1, a2) -> a1.getCourse().compareTo(a2.getCourse())); // After inventory.sort(comparing(Crew::getCourse)); λ©μλ μ΄λ¦μ νμ©νλ, 'λ©μλ μ°Έμ‘°'λ₯Ό νμ©νλ©΄ λλ€λ₯Ό λ κ°κ²°νκ² ννν μ μλ€. λ©μλ μ°Έμ‘°λ₯Ό νκΈ° μν΄μλ ꡬλΆμ(::)λ₯Ό νμ©νλ€. π± λ©μλ μ°Έμ‘°λ₯Ό λ§λλ λ°©λ² 1. μ μ λ©μλ μ°Έμ‘° (args) -> ClassName.staticMethod(args) ==> ClassName::staticMethod 2. λ€μν νμμ μΈμ€ν΄..
π¬ λͺ¨λ μλ° μΈ μ‘μ μ±ν° 3μ μ½κ³ μ 리ν κΈμ λλ€. βοΈ λλ€κ° λλ°μ? μ§λ μ±ν°μμλ λμ νλΌλ―Έν°νλ₯Ό ν΅ν΄μ νλΌλ―Έν°λ‘ λ©μλμ λμ μ체λ₯Ό μ λ¬ν΄μ£Όλ κ²μ λ°°μ λ€. μ΄λ, λ©μλμ λμμ μ λ¬νκΈ° μν΄μ λ³λμ @Override μ΄λ Έν μ΄μ μ΄λ μμλ λ©μλ μ΄λ¦ λ±, λμ μΈμ λ€λ₯Έ μ½λλ€μ΄ λ°λ³΅λμ΄ μλΉν λΆνΈνλ€. λλ€ ννμμ μ΄λ₯Ό ν΄κ²°νκΈ° μν΄μ, λ¨μν 'λμμ λν μ½λλ§' λ©μλλ‘ μ λ¬ν μ μλλ‘ μ΅λͺ ν¨μλ₯Ό λ¨μνν κ²μ΄λ€. λλ€ ννμμ λ€μκ³Ό κ°μ νΉμ§μ κ°μ§λ€. π¬ λ©μλμ μ΄λ¦μ΄ μμΌλκΉ “μ΅λͺ ”μ΄λ€. (λ©μλμ λν λ€μ΄λ°μ κ³ λ―Όν νμκ° μλ€!) - μ΄λ¦μ μμ§λ§, νλΌλ―Έν° 리μ€νΈμ λ°λ, λ°ν νμ, λ°μ κ°λ₯ν μμΈ λ¦¬μ€νΈλ κ°μ§ μ μλ€. π¬ ν¨μ : νΉμ ν΄..
π¬ λͺ¨λ μλ° μΈ μ‘μ μ±ν° 2μ μ½κ³ μ 리ν κΈμ λλ€. βοΈ λμ νλΌλ―Έν°ν μ¬λμ λ§μμ μ λ§ κ°λ κ°λ€. κ·Έλ¦¬κ³ , μꡬμ¬νμ μλΉμμ μ μ₯μμ λ μκ°νκ² λλ€. μ°λ¦¬λ μ½λλ₯Ό μ§λ νλ‘κ·Έλλ¨Έμ§λ§, κ°λ κ°μ μλΉμμ λ§μμ λ§μ‘±μν€κΈ° μν΄ μ΅λν μ λμ μΌλ‘ λμν νμκ° μλ€. μ΄λ λ , ν¬λΉκ° μ°ν μ½ κ³΅μ§μ¬νμ λ€μκ³Ό κ°μ μꡬμ¬νμ λμ Έμ£Όμλ€κ³ κ°μ νμ. π¬ λ°±μλ ν¬λ£¨ μ€μ 25μ΄ μ΄νμΈ ν¬λ£¨λ§ λ³΄κ³ μΆμλ°, λͺ¨μ¬ μ£ΌμΈμ. κ·Έλ¬μ λ€μ€κ° μμ λ§νλ€. π¬ μλμμ, νλ‘ νΈμλ ν¬λ£¨ μ€μμ 23μ΄ μ΄μμΈ ν¬λ£¨λ§ μμ£ΌμΈμ. μ΄λ»κ² νλ©΄ μ°λ¦¬λ λ³ννλ μꡬμ¬ν μμμ μ λμ μΌλ‘ λμν μ μμκΉ? κ°μ₯ λ¨Όμ , κ·Έλ₯ μꡬμ¬νμ λ§λλ‘ κ°λ₯ν λͺ¨λ μμ±μ λν΄μ μ λΆ μλνλ λ°©λ²μ΄ μλ€. 1) λ°±..
π¬ λͺ¨λ μλ° μΈ μ‘μ μ±ν° 1μ μ½κ³ μ 리ν κΈμ λλ€. βοΈ μλ° ν¨μ μλ°μμ νν 'ν¨μ', κ·Έλ¦¬κ³ 'λ©μλ'λΌλ μ΄λ¦μ λ§μ΄ λ€μ μ μλ€. μ€ν°λμμ ν¬λ£¨λΆμ΄ ν¨μμ λ©μλμ λν΄μ μ μλ₯Ό ν΄μ£Όμ ¨λλ°, ν¬κ² λ€μκ³Ό κ°μ΄ μκ°ν μ μλ€. λ¨μν νλ‘κ·Έλλ° μΈμ΄μμ 'ν¨μ'λ 'λ©μλ'μ λμΌν μλ―Έλ‘ μ°μΌ μ μμΌλ©°, νΉν static methodμ λν΄μ κ°μ μλ―Έλ‘ μ¬μ©λλ€. κ·Έλ¬λ, μλ°μμ ν¨μλ 'μνμ μΈ ν¨μ'λ‘, λΆμμ©μ μΌμΌν€μ§ μλ ν¨μλ₯Ό λ§ν μ μλ€. κ·Έ μΈμ ν¨μλ 'λ 립μ μΌλ‘ μ‘΄μ¬νλ©°, νλμ κΈ°λ₯μ ꡬννλλ‘ κ΅¬μ±ν κ²'μ΄λ©°, λ©μλλ 'ν΄λμ€ λ΄λΆμ μ μλμ΄, κ°μ²΄μ μμ±μ λ€λ£¨κΈ° μν νμ'λΌκ³ λ νλλ° λ 립μ μΈμ§, μ’ μμ μΈμ§μ λ°λ₯Έλ€κ³ λ³Ό μ μλ€. βοΈ μΌκΈ κ°μ²΄..