Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바(Java)에서 람다식을 메서드 인수로 전달하는 방법

이 글에서는 자바(Java)에서 람다식(lambda expression)을 메서드 인수로 전달하는 방법을 알아봅니다. 람다식은 매개변수를 받아 결과값을 반환하는 짧은 코드 블록으로, 익명 함수처럼 동작하기 때문에 별도의 클래스나 메서드 선언 없이 간결하게 기능을 표현할 수 있습니다.

특히 컬렉션 프레임워크의 forEach() 메서드는 람다식을 인수로 받는 대표적인 예입니다. 아래에서 실제 동작 과정을 단계별로 살펴보겠습니다.

문제 정의

람다식을 메서드 인수로 전달하여 리스트에 저장된 각 문자열을 거꾸로 뒤집어 출력하는 프로그램을 작성해 보겠습니다.

입력

입력으로 다음과 같은 문자열 리스트가 주어진다고 가정합니다.

("Apple", "Orange", "Grapes")

출력

원하는 출력 결과는 다음과 같습니다.

elppA, egnarO, separG

알고리즘

  1. 프로그램을 시작합니다.
  2. 필요한 패키지(java.util.ArrayList, java.util.Arrays)를 임포트합니다.
  3. main 메서드 안에서 문자열 데이터를 담은 ArrayList를 정의합니다.
  4. 정의된 ArrayList를 콘솔에 출력합니다.
  5. forEach() 메서드에 람다식을 인수로 전달하여 리스트의 각 요소를 순회합니다.
  6. 람다식 내부에서 각 문자열의 마지막 문자부터 첫 번째 문자까지 역순으로 접근하여 새로운 문자열을 만듭니다.
  7. 뒤집힌 문자열들을 콤마로 구분해 출력하면, 모든 요소가 반대 순서로 표시됩니다.

예제 1

아래 예제에서는 과일 이름으로 구성된 리스트가 미리 정의되어 있으며, 람다식을 통해 각 문자열이 뒤집혀 콘솔에 출력됩니다.

import java.util.ArrayList;
import java.util.Arrays;

public class Main {
public static void main(String[] args) {
ArrayList<String> Fruits = new ArrayList<>(Arrays.asList("Apple", "Orange", "Grapes"));
System.out.println("The ArrayList is defined as : " + Fruits);
System.out.print("The Reversed ArrayList is: ");
Fruits.forEach((e) -> {
String result = "";
for (int i = e.length()-1; i >= 0 ; i--)
result += e.charAt(i);
System.out.print(result + ", ");
});
}
}

실행 결과

The ArrayList is defined as : [Apple, Orange, Grapes]
The Reversed ArrayList is: elppA, egnarO, separG,

예제 2

이번에는 스포츠 종목 이름으로 구성된 리스트를 사용하여 같은 방식을 적용해 보겠습니다. 람다식 하나만으로 여러 종류의 리스트에 동일한 로직을 재사용할 수 있다는 점을 확인할 수 있습니다.

import java.util.ArrayList;
import java.util.Arrays;

public class Main {
public static void main(String[] args) {
ArrayList<String> Games = new ArrayList<>(Arrays.asList("Football", "Cricket", "Baseball"));
System.out.println("The ArrayList is defined as : " + Games);
System.out.print("The Reversed ArrayList is: ");
Games.forEach((e) -> {
String result = "";
for (int i = e.length()-1; i >= 0 ; i--)
result += e.charAt(i);
System.out.print(result + ", ");
});
}
}

실행 결과

The ArrayList is defined as : [Football, Cricket, Baseball]
The Reversed ArrayList is: llabtooF, tekcirC, llabesaB,

핵심 정리

위 예제에서 사용된 람다식 (e) -> { ... }forEach() 메서드가 요구하는 Consumer 함수형 인터페이스의 구현체로 전달됩니다. 이처럼 람다식을 메서드 인수로 직접 전달하면 다음과 같은 장점이 있습니다.

  • 익명 내부 클래스를 작성할 필요 없이 코드가 훨씬 간결해집니다.
  • 반복 로직과 처리 로직을 한 곳에서 명확하게 표현할 수 있습니다.
  • 동일한 람다식 패턴을 다양한 컬렉션에 손쉽게 재사용할 수 있습니다.