[Java] 람다식(Lambda Expression) 실습

람다식

  • 함수적 프로그래밍. 즉, y = f(x) 형태의 함수로 구성된 프로그래밍 기법
  • 함수, 메서드를 하나의 식으로 표현하는 것이다
  • 이름과 반환 값이 없기 때문에 익명함수(Anonymous Function)이라 한다.
  • 람다식은 JDK 1.8에 추가 되었다.

자바에서 람다식을 수용한 이유

  • 코드가 매우 간결해진다.
  • 컬렉션 요소(대용량 데이터)를 필터링 또는 매핑해서 쉽게 집계할 수 있다.

 

1. 기본예제 (매개변수가 없을 경우)

public interface MyFunctionalInterface {
    public void method();
}
package com.kyhslam.lamda;

public class MyFunctionalMain {

    //매개변수가 없을 경우
    public static void main(String[] args) {

        MyFunctionalInterface func1 = new MyFunctionalInterface() {
            @Override
            public void method() {
                String str = "직접 익명구현객체 생성함";
                System.out.println(str);
            }
        };
        func1.method();

        func1 = () -> {
            String str = "람다식으로 익명구현객체 생성함";
            System.out.println(str);
        };
        func1.method();

        func1 = () -> System.out.println("약식 람다식으로 익명구현객체 생성함");
        func1.method();
    }
}

 

2. 매개변수가 1개인 경우

public interface FuncInterface {
    public void method(int x);
}
package com.kyhslam.lamda;

public class FuncInterfaceMain {

    //매개변수가 1개 일 경우
    public static void main(String[] args) {

        FuncInterface func = null;

        func = (x) -> {
            int result = x * 5;
            System.out.println("result의 값 : " + result);
        };
        func.method(10);

        func = x -> System.out.println("result의 값 : " + (x * 5));
        func.method(20);
    }
}

 

3. 매개변수가 2개인 경우

public interface FuncInterface {
    public int method(int x, int y);
}
package com.kyhslam.lamda.exam3;

public class FuncInterfaceMain {

    //매개변수가 2개일 경우
    public static void main(String[] args) {

        FuncInterface func = null;

        func = (x,y) -> {
            int result = x + y;
            return result;
        };
        System.out.println("매개변수 2개의 결과1 : " + func.method(10, 100));

        //약식 표현
        func = (x, y) -> { return x + y; };
        System.out.println("매개변수 2개의 결과3 : " + func.method(50, 100));


        func = (x, y) -> x + y;
        System.out.println("매개변수 2개의 결과3 : " + func.method(150, 100));


        func = (x, y) -> sum(x, y);
        System.out.println("매개변수 2개의 결과4 : " + func.method(250, 100));
    }


    public static int sum(int x, int y) {
        return x + y;
    }
}

심화 예제 코드

package org.kyhslam.lambda;

import java.util.Arrays;

public class lambda_0728 {

    public static void main(String[] args) {

        int[] arr = new int[5];


        /*for(int i=0; i < arr.length; i++){
            arr[i] = getRandomNumber(i);
        }*/

        //위의 내용을 아래의 한줄로 간단하게 표현할 수 있다.
        Arrays.setAll(arr, i -> (int)(Math.random()*5) + 1);


        for(int i=0; i < arr.length; i++){
            System.out.println(arr[i]);
        }
    }


    public static int getRandomNumber(int i){
        return (int) (Math.random()*5) + 1;
    }

}

예제 2

public int sumArr (int[] arr){
        int sum = 0;
        for (int i: arr){
            sum += i;
        }
        return sum;
}

내용을 람다식으로 변경해보면 아래와 같다.

int[] arr -> { int sum =0; for ( int i : arr ) sum += i; return sum; }

댓글

Designed by JB FACTORY