본문 바로가기
java

람다 표현식

by 코딩하는아재냥 2022. 5. 2.

람다 표현식

// 이름없는 함수 라고 불린다.

// 함수형 인터페이스랑 연결하여 사용한다.

// 일반 메소드의 매개변수로 사용할 수 있다. // 상당한 장점

// 일반 메소드의 리턴 타입으로 사용할 수 있다.

int max(int a,int b) {
// return a > b ? a : b; // 삼항 연산자  // 1번
// }
//
// (int a,int b) -> {
// return  a > b ? a : b; // 2번 //데이터 타입 생략
//
//
//(int a , int b) -> a > b ? a : b  // 3번

 

 // 4번 // 매개변수의 타입을 생략

 

1번을 4번처럼 표현할 수 있다.

 

( a ) -> a * a == a -> a * a // 매개변수가 하나일 경우엔 괄호도 생략가능


메소드는 기본적으로 호출을 해야하는데 이름없는 함수라 호출을 못해서 사용할 수가 없다.>> 그래서 함수형 인터페이스로 작성했다.1.함수형 인터페이스 작성

>>추상 메소드 하나만 있는 인터페이스를 말한다.

>>메소드에 이름을 부여하기 위해 인터페이스를 작성하는것이다.

 

(a , b ) -> a > b ? a : b

이런 인터페이스를 만들면

 

myfuntion f = (a , b ) -> a > b ? a : b; 

>> f.max(10,20) 

>> int max = f.max(10,20) 이렇게 표기할 수 있다.


함수형 인터페이스는 추상 클래스와는 달리 단 하나의 추상 메소드만을 가져야 합니다.

또한, 다음과 같은 어노테이션(annotation)을 사용하여 함수형 인터페이스임을 명시할 수 있습니다.

@FunctionalInterface

위와 같은 어노테이션을 인터페이스의 선언 앞에 붙이면, 컴파일러는 해당 인터페이스를 함수형 인터페이스로 인식.

 

@FunctionalInterface

interface Calc { // 함수형 인터페이스의 선언

    public int min(int x, int y);

}

 

public class Lambda02 {

public static void main(String[] args){

        Calc minNum = (x, y) -> x < y ? x : y; // 추상 메소드의 구현

        System.out.println(minNum.min(3, 4));  // 함수형 인터페이스의 사용

    }

}


메소드 참조

메소드참조는 람다 표현식이 단 하나의 메소드만을 호출하는 경우에 해당 람다 표현식에서

불필요한 매개변수를 제거하고 사용할 수 있도록 해줍니다.

 

메소드 참조를 사용하면 불필요한 매개변수를 제거하고 다음과 같이'::'기호를 사용하여 표현할 수 있습니다.

(base,exponent)->Math.pow(base, exponent);

>> Math::pow;

 

MyClass obj = new MyClass;

Function<String, Boolean> func = (a) -> obj.equals(a); // 람다 표현식

Function<String, Boolean> func = obj::equals(a);       // 메소드 참조

 


람다 표현식을 사용하는 참고자료

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

댓글