π Java&Spring (18) μΈλ€μΌν 리μ€νΈν [λͺ¨λμλ°μΈμ‘μ ] Stream μ€νΈλ¦Ό νμ© μ€νΈλ¦Ό νμ© λͺ μμ λ°λ³΅ λμ filterμ collect μ°μ°μ μ§μνλ μ€νΈλ¦Ό APIλ₯Ό μ΄μ©ν΄μ λ°μ΄ν° 컬λ μ λ°λ³΅μ λ΄λΆμ μΌλ‘ μ²λ¦¬ν μ μλ€. @Test void streamSample() { List nameList = new ArrayList(); nameList.add("λμ€"); nameList.add("룰루"); nameList.add("μ μ¬"); nameList.add("νΈλ¦°λ€λ―Έμ΄"); // μΈλΆ λ°λ³΅ List longNameList = new ArrayList(); for (String s : nameList) { if(s.length() > 5) { longNameList.add(s); } } // λ΄λΆ λ°λ³΅ List longNameStreamList = nameList.stream.. [λͺ¨λμλ°μΈμ‘μ ] Stream μ€νΈλ¦Ό μ€νΈλ¦Ό (Stream) 컬λ μ (collections)λ‘ λ°μ΄ν°λ₯Ό κ·Έλ£Ήννκ³ μ²λ¦¬ν μ μλ€. 컬λ μ μ λͺ¨λ μλ° μ΄ν리μΌμ΄μ μμ μ²λ¦¬νκ³ , λλΆλΆμ νλ‘κ·Έλλ° μμ μ μ¬μ©λκΈ° λλ¬Έμ μ€μνλ€.νμ§λ§ μμ§ μλ²½ν 컬λ μ μ°μ°μ μ§μνλ €λ©΄ λΆμ‘±νλ€. μ€νΈλ¦Όμ΄λ 무μμΈκ° μ€νΈλ¦Όλ μλ° 8 APIμ μλ‘ μΆκ°λ κΈ°λ₯μ΄λ€. λ°μ΄ν°λ₯Ό μ²λ¦¬νλ μ½λλ₯Ό μ§μλ‘ νννμ¬ μ μΈνμΌλ‘ 컬λ μ λ°μ΄ν°λ₯Ό μ²λ¦¬ν μ μλ€. μ€νΈλ¦Όμ μ¬μ©νλ©΄ λ©ν°μ€λ λ μ½λλ₯Ό ꡬννμ§ μμλ λ°μ΄ν°λ₯Ό λ³λ ¬λ‘ μ²λ¦¬ν μ μλ€. @Test @DisplayName("μ리 ν΄λμ€ μ λ ¬νκΈ°") void sortExample() { List menuList = new ArrayList(); menuList.add(new Dish(100,"λκ°μ΄μ΄")); m.. [λͺ¨λμλ°μΈμ‘μ ] λλ€ (Lambda) λλ€ννμμ μ΅λͺ ν΄λμ€μ²λΌ μ΄λ¦μ΄ μλ ν¨μμ΄λ€. λ©μλλ₯Ό μΈμλ‘ μ λ¬ν μ μλ μΉκ΅¬μ λλ€. λλ€ μ©μ΄ μ체λ λ―Έμ λΆν νκ³μμ μ λλμλ΅λλ€. μ€λμ λλ€ λλ€νλ κ·Έ λλ€μ λν΄μ μ 리ν΄λ³΄λ €κ³ ν©λλ€. λͺ¨λμλ°μΈμ‘μ μ± μ¬λν΄μ 1. λλ€λ 무μμΈκ°? λλ€ ννμ: λ©μλλ‘ μ λ¬ν μ μλ μ΅λͺ ν¨μλ₯Ό λ¨μνν κ². λλ€ νΉμ§ 1) μ΅λͺ μ΄λ€. λ©μλμ λ€λ₯΄κ² μ΄λ¦μ΄ μλ€. 2) ν¨μμ΄λ€. νΉμ ν΄λμ€μ μ’ μλμ§ μλλ€. κ·Έλμ ν¨μλΌκ³ λ λΆλ¦Ό. νμ§λ§ λ©μλμ νΉμ§ λν κ°μ§. 3) μ λ¬μ΄ κ°λ₯νλ€. λλ€ ννμμ λ©μλ μΈμλ‘ μ λ¬νκ±°λ λ³μλ‘ μ μ₯ κ°λ₯. 4) κ°κ²°νλ€. μ΅λͺ ν΄λμ€μ²λΌ μ€λ³΅λκ±°λ ν΄λμ€ μμ±μ μν μ½λλ₯Ό ꡬνν νμ μμ. cf) λ©μλμ νΉμ§μ? - νλΌλ―Έν° 리μ€νΈ, λ°λ,.. ν¨μν μΈν°νμ΄μ€ (Functional Interface) Javaμμ ν¨μν μΈν°νμ΄μ€λ λ¨μΌ μΆμ λ©μλ(Single Abstract Method, SAM)λ₯Ό κ°μ§ μΈν°νμ΄μ€λ€. Java 8 μ΄μμμλ λλ€ ννμ λ° ν¨μν μΈν°νμ΄μ€λ₯Ό μ§μνλ€. ν¨μν μΈν°νμ΄μ€μ μΆμ λ©μλ μκ·Έλμ²λ λλ€ ννμκ³Ό μ°κ΄μ΄ μλ€. (μΆμ λ©μλ μκ·Έλμ²λ ν΄λΉ ν¨μν μΈν°νμ΄μ€κ° λνλ΄λ ν¨μμ ννλ₯Ό κ²°μ νλ κ²) java.util.function ν¨ν€μ§μλ λ€μν ν¨μν μΈν°νμ΄μ€κ° ν¬ν¨λμ΄ μμ. Consumer μΈν°νμ΄μ€μ μΆμ λ©μλλ λ€μκ³Ό κ°λ€. @FunctionalInterface public interface Consumer { void accept(T t); } μ¬κΈ°μ acceptκ° μΆμ λ©μλμ΄λ€. μ΄ λ©μλλ νλμ 맀κ°λ³μλ₯Ό λ°κ³ λ°νκ°μ΄ μμΈ°. .. [λͺ¨λμλ°μΈμ‘μ ] λμ νλΌλ―Έν°(Behavior Parameter) λμ νλΌλ―Έν°λ₯Ό μμλκΉ? νλ‘κ·Έλλ° μ μ¬μ©νλ "λμ"μ μλμ κ°μ κ²μ μλ―Έν©λλ€. aμ bλ₯Ό κ³±νλ ν¨μκ° μλ€κ³ ν΄λ΄ μλ€. def multiply_numbers(a, b): result = a * b return result μ΄ ν¨μλ νλΌλ―Έν°λ‘ λ°μ κ³±νλ "λμ"μ νλλ°μ©, aμ bμ κ°μ λ°λΌμ multiply_numbers ν¨μμ κ²°κ³Ό κ°μ λ¬λΌμ§κ² λ©λλ€. μ΄λ, aμ bλ₯Ό λμ νλΌλ―Έν°λΌκ³ νλ κ±°μμ΄~ result1 = multiply_numbers(2, 3) # a=2, b=3μ μ λ¬νμ¬ 2 * 3 = 6μ΄ λ°νλ¨ result2 = multiply_numbers(5, 7) # a=5, b=7μ μ λ¬νμ¬ 5 * 7 = 35κ° λ°νλ¨ μ΄λ κ² λ§μ΄μ Έ. aμ bμ κ°μ λ°λΌ resul.. NonNull μ¬λ...μ¬...μ¬...λ... κ·Έλ₯ μ’μν©λλ€. @NonNullμ μ¬μ©μμκ² null μ²΄ν¬ μνμμΌ νκ³ μλ €μ€ μ μλ μ΄λ Έν μ΄μ μ λλ€ λ³΄ν΅ μ¬μ©ν μ μλ μ©λλ μλμ κ°μ΅λλ€ Record component / ν¨μμ νλΌλ―Έν° / μμ±μμ νλΌλ―Έν° μλ κ² μΈ μ μμ΅λλ€ public void doSomething(@NonNull String input) { // inputμ nullμΌ μ μμ // μ¬κΈ°μ μμ νκ² inputμ μ¬μ©ν μ μμ!! } @NonNullμ μ μ°λ©΄ μλμ κ°μ΄ νκ² μ₯¬? μ¬μ€ μ¨μμ΄λ μλμ μ½λκ° λ μ΅μνμ§λ§ π νλΌλ―Έν°λ§ 보면 if λ¬Έ λ§λ€μ΄μΌ μ§μ±μ΄ ν리λ νΈ. public void doSomething(String input) { // inputμ nullμ΄λ©΄ μλλλ€.. if( input == null ) {.. Intellij) JUnit5 μ€μ ν μ¬λ κ΄ μμ¦ μΌνλ©΄μ λ΄κ° μ μΌ μ κ²½ μ°κ³ μλ κ²μ νμ€ν 리λ₯Ό μ λ¨κΈ°λ κ²μ΄λ€ λͺ¨λ μΌμ λꡬλ ν μ μλ€λ κ²μ κΉ¨λ¬μμ§λ§ μ½λλ§λ€ μλ μ¬μ°μ... κ·Έ μ¬λλ°μ μ μκ° μλ€λ κ²μ΄λ€ π₯Ή μ κ·Έλ κ² μκ°νκ² λλꡬμ? μ λ κ·Έλ¬κ³ μΆμ§ μμμ΅λλ€ κ·Έλμ!! ν μ€νΈ μ½λλ₯Ό μ¬λλμ λ€λ¦μμ΄ μμ±νλ μ€... κΈ°μ‘΄μλ JUnit4 λ²μ μΌλ‘ μ¬μ©νκ³ μμλλ° λ€λ₯Έ λ΄λΉμκ° ν μ€νΈ μ½λ μ€ν μ λΉ λ₯΄κ² λ΄μ©μ νμ νμλ©΄ μ’κ² λ€κ³ μκ°μ΄ λ€μλ€ κ²°λ‘ λΆν° λ¨Όμ λ§νμλ©΄.. ν μ€νΈ μ½λλ₯Ό μ€ννμ λ μ μ΄λ° ν μ€νΈ~λ₯Ό μ½κ² νμ νκΈΈ μνλ€ κ·Έλ¬κΈ° μν΄μλ @DisplayName κ°μ μ΄λ Έν μ΄μ μ¬μ©μ΄ νμνκ³ , μ΄λ₯Ό μ¬μ©νκΈ° μν΄μλ JUnit λ²μ μ μ κ·Έλ μ΄λ ν΄μΌνλ€ 1. JUnit5 μμ‘΄μ± μΆκ° (1) bu.. Error) java: class, interface, or enum expected ν΄κ²° File-Settings-Editor-File Encodings Path μΆκ°ν΄μ μλ¬κ° λ λλ ν°λ¦¬ λλ νμΌμ Encoding μ€μ μ ν΄μ£Όλ©΄ λ©λλ€ κ·Έλλ μλλ€λ©΄ μλ‘ νμΌμ μΆκ°νκ³ μ½λλ₯Ό 볡λΆνλκ² κ°μ₯ λΉ λ¦ λλ€. μ κ°μ κ²½μ°μλ λ‘κ·Έλ μ½λμ μΈμ½λ© μ€μ μ λ°κΏ¨λλ°, μ λ° μλ¬κ° μκΈ°λλΌκ΅¬μ νκΈμ΄ κΉ¨μ§λ νμμ΄ μ겨μ ν΄κ²°νλ €λ€κ° μλ¬λ₯Ό λ§λκ² λ; μμΈμ BOM(Byte Order Mark) μ΄λΌλ κ²μ΄ μ겨μ κ·Έλ μ΅λλ€. μ λμ½λμ μΈμ½λ© λ°©μμλμ λΉ μλμ(BE)κ³Ό 리νμλμ(LE)μ΄ μμ΅λλ€. λμ μ°¨μ΄λ λ°μ΄νΈλ₯Ό μ½λ μμμ μ°¨μ΄μΈλ°, μ΄ κ²μ νμΌμ λͺ μνκΈ° μν΄ μμ μΈμ½λ©λ³ BOM κ°μ μ΄μ§ λ£μ΄ λμ΅λλ€. μ΄μ 1 2 3 λ€μ