Java 함수형 인터페이스(2) - 람다식

강서진·2023년 11월 17일
0

Java

목록 보기
24/35
post-custom-banner

강좌 Course 2. Part 2. ch3 3, 4강 요약

람다식 Lambda expression

고양이가 자꾸 야식달라고 울어서 밥을 주고 왔다. 람다식은 익명 함수의 한 형태로서, 메서드를 간결하게 표현하는 방법이다.
기존의 함수는 이름과 파라미터를 받는 부분, 그리고 구현부가 있는데, 익명함수는 이름을 만들어줄 필요가 없어 파라미터와 구현부만 가지고 있다. 람다식은 함수형 인터페이스와 함께 사용된다.

(parameters) -> { expression }

두 개의 정수를 더하는 메서드를 람다식으로 구현하면 다음과 같다.

(int x, int y) -> {return x+y;}
(x, y) -> x+y;

자료형이나 중괄호는 생략할 수 있다. 중괄호를 생략할 경우 return도 생략 가능하다. 여러 줄에 걸쳐 구현부를 적어야 하면 중괄호는 필요하고, 중괄호와 return이 필요하다.

지난번에 만들었던 MathOperation 인터페이스를 그대로 사용하여 람다식을 사용해본다. 라고 적고 생략하려고 했는데 다시 생각해보니까 몇 줄 안되는 거 그냥 넣는 게 내가 나중에 볼 때 더 편하겠다.

// 예시: MathOperation
@FunctionalInterface
public interface MathOperation {
    public int operation(int x, int y);
    }

// 예시: LambdaExample
public class LambdaExample {
    public static void main(String[] args) {
//        MathOperation add = (int x, int y) -> { return x+y; };
        MathOperation add = (x,y) -> x+y;

        int result = add.operation(10,20);
        System.out.println("result = " + result);
    }
}

간단하게 구현되었고, 코드도 아주 간결해졌다. 람다식은 또한 확장성이 뛰어나 당장 add뿐만 아니라 다른 사칙연산 함수도 만들어서 실행시킬 수 있다.

람다 표현식은 메서드 내에서 사용하거나 메서드의 인자로 전달할 수도 있어 유연성이 높다.
StringOperation이라는 Functional Interface를 새로 만들어 확인해본다.

// 예시: StringOperation 인터페이스
@FunctionalInterface
public interface StringOperation {
    public String apply(String s);
}

// 예시: Lambda 적용
public class LambdaApply {
    public static void main(String[] args) {
        // 람다식으로 구현한 대문자/소문자 변환 메서드
        StringOperation toUpperCase = s -> s.toUpperCase();
        StringOperation toLowerCase = s -> s.toLowerCase();

        String input = "Lambda Expressions";

        System.out.println(processString(input,toUpperCase)); // LAMBDA EXPRESSIONS
        System.out.println(processString(input,toLowerCase)); // lambda expressions
    }

    public static String processString(String input,StringOperation operation){
        return operation.apply(input);
    }
}

* toUpperCase, toLowerCase 객체의 apply()를 사용하여 processString을 거치지 않고 결과를 반환할 수도 있다.

post-custom-banner

0개의 댓글