Java 63(Lamda 람다 표현식)

Kang.__.Mingu·2024년 5월 18일
0

Java

목록 보기
65/108

람다 표현식 기본 구조

  • 람다 표현식은 (매개변수) -> {실행문} 의 형태로 작성됩니다.

  • 매개변수가 하나라면 괄호 () 를 생략할 수 있습니다.

  • 실행문이 한 줄이라면 중괄호 {} 와 return 키워드를 생략할 수 있습니다.

함수형 인터페이스 활용

  • 자바에서 제공하는 Consumer, Supplier, Function, Predicate 등의 함수형 인터페이스를 활용하면 쉽게 람다 표현식을 정의할 수 있다.

메서드 참조 사용하기

  • 메서드 참조를 사용하면 람다 표현식을 더 간단하게 작성할 수 있다.

  • ex) (x) -> System.out.print(x)는 => System.out::println으로 표현할 수 있다.


java.util.function 패키지

  • 함수형 인터페이스가 선언된 패키지 => 람다 표현식으로 작성 가능

Consumer< T > 함수형 인터페이스

  • 제네릭으로 전달된 Java 자료형의 객체를 매개변수로 제공받아 아무것도 반환하지 않는 accept() 추상메소드가 선언된 함수형 인터페이스
  • 아무것도 반환하지 않을 때!

Predicate< T > 함수형 인터페이스

  • 제네릭으로 전달된 Java 자료형의 객체를 매개변수로 제공받아 논리값(boolean)을 반환하는 test() 추상메소드가 작성된 함수형 인터페이스

Function<T, R> 함수형 인터페이스

  • 첫번째 제네릭으로 전달된 Java 자료형의 객체를 매개변수로 전달받아 처리하고 두번째 제네릭으로 전달된 Java 자료형의 객체를 반환하는 apply() 추상메소드가 작성된 함수형 인터페이스

LamdaApp

import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;

public class LamdaApp {
    public static void main(String[] args) {
        // Consumer<T> 함수형 인터페이스: 제네릭으로 전돨된 Java 자료형의 객체를 매개변수로 제공받아
        // 아무것도 반환하지 않는 accept() 추상메소드가 선언된 함수형 인터페이스
        // 아무것도 반환하지 않을때!

        // 추상메소드가 하나짜리만 있는 인터페이스만 람다표현식 이용해야됨

        int number = 100;

        // Consumer 인터페이스를 상속받은 익명클래스를 사용해 객체를 생성하여 참조변수에 저장
        /*
        Consumer<Integer> integerConsumer = new Consumer<Integer>() {
            // Cosumer인터페이스가 가지고 있는 메소드를 사용하려면 무조건 오버라이딩
            @Override
            public void accept(Integer i) {
                System.out.println(number + i);
            }
        };
        */

        // Consumer 함수형 인터페이스로 람다표현식을 사용해 객체를 생성하여 참조변수에 저장
        Consumer<Integer> integerConsumer = i -> System.out.println(number + i);
        integerConsumer.accept(200);
        System.out.println("=================================================");

        // Predicate<T> 함수형 인터페이스: 제네릭으로 전달된 Java 자료형의 객체를 매개변수로 제공받아
        // 논리값(boolean)을 반환하는 test() 추상메소드가 작성된 함수형 인터페이스
        // Predicate<Integer> isEven = new Predicate<Integer>() {
        //     @Override
        //     public boolean test(Integer i) {
        //         return i % 2 == 0;
        //     }
        // };

        Predicate<Integer> isEven = i -> i % 2 == 0;

        if(isEven.test(200)) {
            System.out.println( "입력값은 짝수입니다");
        }else {
            System.out.println( "입력값은 홀수입니다");
        }
        System.out.println("=================================================");

        // Function<T, R> 함수형 인터페이스: 첫번째 제네릭으로 전달된 Java 자료형의 객체를 매개변수로 전달받아
        // 처리하고 두번째 제네릭으로 전달된 Java 자료형의 객체를 반환하는 apply() 추상메소드가 작성된 함수형 인터페이스
        // Function<String, Integer> stringLength = new Function<String, Integer>() {
        //     @Override
        //     public Integer apply(String str) { // 문자형으로 값을 받고
        //         // Integer로 반환
        //         return str.length();
        //     }
        // };
        
        Function<String, Integer> stringLength = str -> str.length();

        System.out.println("문자 갯수 = " + stringLength.apply("Java Programming"));
    }
}
profile
최선을 다해 꾸준히 노력하는 개발자 망고입니당 :D

0개의 댓글