Java 32(람다표현식 Lambda Expression)

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

Java

목록 보기
34/108

Lambda Expression(람다표현식)

  • 익명클래스로 객체를 보다 쉽게 생성하기 위해 만들어진 표현식 반드시 함수형 인터페이스로만 람다 표현식 사용 가능

람다표현식 사용하여 익명클래스로 객체를 생성하는 방법

형식) (자료형 변수명, 자료형 변수명, ...) -> {명령; 명령; ...};

  • 소괄호 기호안에 함수형 인터페이스에 작서된 추상메소드의 매개변수 작성
  • 매개변수의 자료형을 생략할 수 있으며 매개변수가 하나인 경우 소괄호 기호 생략
  • 블럭에 기호에 함수형 인터페이스의 추상메소드를 오버라이딩 선언하여 실행될 명령 작성
  • 블럭에 기호에 작성된 명령이 하나인 경우 블럭 생략 가능하지만 return 키워드에 의해 값을 반환하는 명령인 경우 블럭 기호 생략 불가능
  • 블럭 기호에 작성된 하나의 명령이 return 키워드에 의해 값을 반환하는 경우 return 키워드를 생략하면 블럭 기호도 생략 가능

Function Interface 함수형 인터페이스

  • 추상메소드가 하나만 작성된 인터페이스
  • 람다표현식을 사용하여 객체를 생성하기 위한 인터페이스
  • 하나의 추상 메소드 외에 또는 기본메소드 작성 가능
  • @FunctionalInterface 어노테이션을 사용하여 작성하는 것을 권장
  • @FunctionalInterface: 함수형 인터페이스의 작성규칙을 위반할 경우 에러를 발생하는 어노테이션

Calculate(Interface)

@FunctionalInterface
public interface Calculate {
    int sum(int num1, int num2);
}

CalculateApp(Class)

public class CalculateApp {
    public static void main(String[] args) {

        // Calculate calculate = new Calculate();

        /*class CalculateImpl implements Calculate {

            @Override
            public int sum(int num1, int num2) {
                return num1 + num2;
            }
        }
        Calculate calculate = new CalculateImpl();
        System.out.println("합계 = " + calculate.sum(10, 20));*/

        /*
        // 지역클래스를 선언하지 않고 익명클래스를 이용하여 객체를 생성해 참조변수에 저장
        // => 익명클래스에서는 반드시 모든 추상메소드를 오버라이딩 선언
        Calculate calculate = new Calculate() {
            @Override
            public int sum(int num1, int num2) {
                return num1 + num2;
            }
        };
        System.out.println("합계 = " + calculate.sum(10, 20));
        */

        // 람다표현식
        // Calculate calculate = (int num1, int num2) -> {return num1 + num2;};
        // Calculate calculate = (num1, num2) -> {return num1 + num2};
        Calculate calculate = (num1, num2) -> num1 + num2;
        System.out.println("합계 = " + calculate.sum(10, 20));
    }
}
profile
최선을 다해 꾸준히 노력하는 개발자 망고입니당 :D

0개의 댓글