람다식

프로그래밍/Java 2019. 12. 25. 17:54

람다식이란?

람다식은 자바8부터 추가된 기능으로, 자바안에서 함수형 프로그래밍을 가능하게 하기위해 추가된 기능이다.

람다식을 사용하면 보다 간결하게 코딩을할 수 있다.


람다식 인터페이스

package lamda;

@FunctionalInterface
public interface MyNumber {
    int getMax(int num1, int num2);
}
  • 람다식을 사용하기 위해서는 반드시 이름이 있는 메서드가 있는 추상메서드가 선언되어 있어야한다.
  • @FunctionalInterface 어노테이션은 없어도 되지만, 람다인터페이스에는 하나의 메서드만 존재해야하므로 어노테이션을 선언하면 오류방지를 줄여준다.

람다식 구현

package lamda;

public class TestMyNumber {

    public static void main(String[] args) {
        MyNumber max = (x, y) -> (x >= y) ? x : y;
        System.out.println(max.getMax(30, 20));
    }
}
  • 원래 자바에서 메소드를 사용하려면 객체생성 없이는 불가능하다.
  • 람다식(함수명이 없음) 으로 getMax 의 구현부를 만들었다.
  • 하지만 람다식을 활용하면 객체생성없이도 바로 메서드 사용이 가능하다.
    • 사실 내부적으로 익명 내부 클래스가 선언되어 가능한 것.


기존방식과 람다식 비교

문자열 2개를 인자로 받아 첫번째, 두번째 를 연결시켜주는 함수를 만들어 기존 방식과 람다식의 차이점을 알아보자.


함수정의 인터페이스

package lamda;

@FunctionalInterface
public interface StringConcat {
    public void makeString(String s1, String s2);
}

인터페이스 구현

package lamda;

public class StringConCatImpl implements StringConcat {

    @Override
    public void makeString(String s1, String s2) {
        System.out.println(s1 + ", " + s2);
    }

}

테스트

package lamda;

public class TestStringConcat {

    public static void main(String[] args) {        
        String s1 = "Hello";
        String s2 = "World";

        // 인터페이스를 따로 클래스에서 구현해서 사용하는 일반적인 방법.
        StringConCatImpl concat1 = new StringConCatImpl();
        concat1.makeString(s1, s2);

        // 람다식으로 바로 구현해서 사용하는 방법. -> 간결함.
        StringConcat scc = (x, y) -> System.out.println(x + ", " + y);
        scc.makeString(s1, s2);

    }

}

  • 결과는 같다. 하지만 구현방식이 람다식을 활용하는 것이 훨씬간결하다.

매개변수로 람다식 / 람다식 리턴하기.

package lamda;

interface PrintString {
    void showString(String str);
}

public class TestLamda {

    public static void main(String[] args) {
        PrintString lamdaStr = s -> System.out.println(s);
        lamdaStr.showString("hello lamda_1");
        showMyString(lamdaStr);
        PrintString reStr = returnString();
        reStr.showString("헬로 ");
    }


    // 매개변수 전달
    public static void showMyString(PrintString p) {
        p.showString("hello lamda_2");
    }

    // 함수리턴
    public static PrintString returnString() {
        PrintString str = s -> System.out.println(s + "world");
        return str;
    }

}

  • 매개변수로 함수를 전달하여 사용할 수 있다.
  • 함수 자체를 리턴할 수 있다.

출처: do it 자바프로그래밍

'프로그래밍 > Java' 카테고리의 다른 글

예외처리  (0) 2019.12.29
스트림  (0) 2019.12.27
내부 클래스  (0) 2019.12.25
Map  (0) 2019.12.20
싱글톤  (0) 2019.12.18
블로그 이미지

파니동

,