MapleStory Finger Point

🟀 JAVA/🟀 JAVA κ°œλ…μ •λ¦¬

[JAVA 8+] λžŒλ‹€μ‹ κ°œλ… / 예제

HYEJU01 2024. 12. 6. 15:21

λžŒλ‹€μ‹

읡λͺ… ν•¨μˆ˜(anonymous function) ν˜•νƒœλ₯Ό 가진 ν‘œν˜„μ‹

 

 

λžŒλ‹€μ‹ κΈ°λ³Έ 문법

(λ§€κ°œλ³€μˆ˜) -> { μ‹€ν–‰μ½”λ“œ }

 

  • λ§€κ°œλ³€μˆ˜ : λ©”μ„œλ“œμ— 전달할 μž…λ ₯κ°’ μ •μ˜
  • (->) : λžŒλ‹€ μ—°μ‚°μž (arrow operator)
  • { μ‹€ν–‰μ½”λ“œ } : λ©”μ„œλ“œμ˜ μ‹€ν–‰ λ‚΄μš©μ„ μž‘μ„±

 

        int add(int x, int y) {
            return x + y;
        }

        // λ©”μ„œλ“œ λ°˜ν™˜ νƒ€μž… , λ©”μ„œλ“œλͺ…  μƒλž΅
        (int x , int y ) -> {
            return x + y;
        }

        // λ§€κ°œλ³€μˆ˜ νƒ€μž… μƒλž΅
        (x,y) -> {
            return x + y ;
        }

        // λ¦¬ν„΄λ¬Έλ§Œ μžˆλŠ” 경우 μ€‘κ΄„ν˜Έ, return μƒλž΅
        (x, y) -> x + y;

        // νƒ€μž…μ„ μƒλž΅ν•΄λ„ μ»΄νŒŒμΌλŸ¬κ°€ νƒ€μž… μœ„μΉ˜λ₯Ό μΆ”λ‘ ν•˜μ—¬ λ™μž‘ν•˜κΈ°λ•Œλ¬Έμ— 였λ₯˜λ‚˜μ§€μ•ŠμŒ

 

 

 

λžŒλ‹€μ‹ μž₯점

 

  • μ½”λ“œ κ°„κ²°μ„±: λΆˆν•„μš”ν•œ 읡λͺ… 클래슀 μž‘μ„± 없이 μ½”λ“œλ₯Ό 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 가독성 ν–₯상: ν‘œν˜„μ΄ 직관적이라 μ΄ν•΄ν•˜κΈ° μ‰½μŠ΅λ‹ˆλ‹€.
  • ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° 지원: 슀트림 API와 ν•¨κ»˜ ν™œμš©ν•˜λ©΄ κ°•λ ₯ν•œ 데이터 처리 κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.

 

 

 

λžŒλ‹€μ‹ 단점

 

  • 디버깅 어렀움: λžŒλ‹€μ‹μ˜ 읡λͺ…μ„± λ•Œλ¬Έμ— 디버깅이 λ³΅μž‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ§€λ‚˜μΉ˜κ²Œ μ‚¬μš© μ‹œ λ³΅μž‘μ„± 증가: 간결성을 μœ„ν•΄ κ³Όλ„ν•˜κ²Œ μ‚¬μš©ν•˜λ©΄ 가독성이 λ–¨μ–΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

λžŒλ‹€μ‹μ„ 더 κ°„κ²°ν•˜κ²Œ ( λ©”μ„œλ“œ μ°Έμ‘° `::` μ—°μ‚°)

 

λ©”μ„œλ“œ μ°Έμ‘° `::` μ—°μ‚°

list.flatMap(innerList -> innerList.stream());

list.flatMap(List::stream);

이 λžŒλ‹€μ‹μ„ λ©”μ„œλ“œ μ°Έμ‘° 연산을 ν†΅ν•΄μ„œ 더 κ°„λž΅ν•˜κ²Œ μž‘μ„±ν•  수 μžˆλ‹€.

 

 

`클래슀λͺ…::λ©”μ„œλ“œλͺ…`

Stream.of("1", "2", "3")
      .map(Integer::parseInt)
      .forEach(System.out::println);
// .map(s -> Integer.parseInt(s)) 와 κ°™μŒ

String str = "Hello";
Supplier<Integer> lengthSupplier = str::length;
System.out.println(lengthSupplier.get()); // κ²°κ³Ό: 5
// () -> str.length() 와 κ°™μŒ


System.out::println
// x -> System.out.println(x) 
//System.out 객체의 println 객체 λ©”μ„œλ“œλ₯Ό μ°Έμ‘°ν•œλ‹€λŠ” 뜻


Stream.of(1, 2, 3, 4, 5)
      .reduce(Math::max)
      .ifPresent(System.out::println); // 좜λ ₯: 5
//Math.max μ°Έμ‘°

Supplier<List<String>> listSupplier = ArrayList::new;
List<String> list = listSupplier.get();
// () -> new ArrayList<>() 와 κ°™μŒ

 

 

 


 

예제 1 : forEach λ©”μ„œλ“œ + Stream λžŒλ‹€μ‹

 

List<String> fruits = List.of("Apple", "Banana", "Cherry");

for (int i = 0; i < fruits.size(); i++) {
    System.out.println(fruits.get(i));
}

 

List<String> fruits = List.of("Apple", "Banana", "Cherry");

fruits.forEach(fruit -> System.out.println(fruit));

 

 

 

foreach 반볡문과 ForEach λ©”μ„œλ“œ 차이점