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

자바(Java) 람다 표현식 완벽 가이드: 개념부터 실전 활용까지

자바에서 람다 표현식을 사용하는 방법

메서드를 단 한 줄로 작성할 수 있다면 얼마나 좋을까 하고 생각해 본 적이 있으신가요? 그런데 정작 자바의 장황한 메서드 선언 문법 때문에 포기한 경험이 있다면, 여러분만 그런 것은 아닙니다.

메서드는 프로그래밍에서 매우 유용한 기능입니다. 메서드는 프로그램 내에서 특정 작업을 수행하는 코드 블록으로, 한 번 정의해 두면 필요할 때마다 여러 번 호출할 수 있습니다. 이를 통해 코드의 중복을 줄일 수 있고, 결과적으로 코드 유지보수가 훨씬 수월해집니다.

이번 가이드에서는 자바의 람다 표현식(lambda expression)에 대해 알아보겠습니다. 람다 표현식은 함수형 인터페이스(functional interface)를 구현하는 특수한 형태의 메서드로, 동작 방식과 활용 이유까지 함께 살펴보겠습니다.

함수형 인터페이스란 무엇인가?

람다 표현식을 본격적으로 다루기 전에, 먼저 함수형 인터페이스를 이해해야 합니다. 함수형 인터페이스는 추상 메서드(abstract method)를 단 하나만 가지는 인터페이스를 말합니다. 이 하나의 추상 메서드가 해당 인터페이스의 목적을 정의합니다.

다음 예시를 살펴보겠습니다.

interface CalculateThree {
	double multiply_by_three(String day);
}

위 코드에서는 CalculateThree라는 인터페이스를 생성했습니다. 이 인터페이스에는 multiply_by_three라는 메서드 하나만 존재하므로, 함수형 인터페이스에 해당합니다.

자바 람다 표현식이란 무엇인가?

람다 표현식은 이름이 없는 메서드입니다. 함수형 인터페이스 안에 정의된 메서드를 구현할 때 사용되며, 이름이 없다는 특징 때문에 '익명 메서드(anonymous method)'라고도 불립니다.

람다 표현식은 화살표 연산자(arrow operator)를 사용하며, 이 연산자를 기준으로 두 부분으로 나뉩니다.

(매개변수 목록) -> 람다 본문

화살표 왼쪽에는 표현식에서 사용할 매개변수가 위치하고, 오른쪽에는 람다 표현식이 실행될 때 수행될 코드가 들어갑니다. 람다 함수는 매개변수를 하나만 받거나 여러 개를 받을 수도 있습니다.

람다 표현식 사용 방법

사용자가 입력한 숫자를 3배로 곱하는 프로그램을 만들어 보겠습니다. 먼저 사용자로부터 숫자를 입력받는 코드를 작성합니다.

import java.util.Scanner;

class Main {
public static void main(String args[]) {
	Scanner user_input = new Scanner(System.in);
	System.out.println("Insert a number to multiply by three: ");

	double user_number = user_input.nextDouble();
	}
}

이 코드를 실행하면 사용자에게 곱셈을 할 숫자를 입력하라는 안내가 표시되고, 프로그램은 해당 숫자를 "user_number" 변수에 저장합니다. Scanner 클래스의 동작 원리가 궁금하다면 자바 Scanner 관련 튜토리얼을 참고해 보세요.

다음으로, 숫자를 3배로 곱하는 람다 표현식을 정의하겠습니다. 아래 코드를 main 메서드 위쪽에 추가합니다.

interface CalculateThree {
	double multiply_by_three(double number); 
}

이 코드는 람다 표현식이 참조할 인터페이스를 정의합니다. 이어서 클래스의 main 메서드 맨 아래에 다음 코드를 추가합니다.

CalculateThree multiply = (number) -> number * 3;
double answer = multiply.multiply_by_three(user_number);

System.out.println(user_number + " multiplied by three is " + answer);

여기서 우리는 CalculateThree 인터페이스를 사용해 "multiply"라는 변수를 선언했습니다. 이 변수에 람다 표현식의 코드가 저장됩니다. 람다 표현식은 CalculateThree 인터페이스의 multiply_by_three와 연결되는데, 그 이유는 multiply_by_three가 해당 인터페이스의 유일한 함수이기 때문입니다.

그다음 점 표기법(dot notation)을 사용해 이 함수를 호출합니다.

multiply.multiply_by_three(user_number);

점 표기법은 참조하고자 하는 클래스나 인터페이스의 이름 뒤에 마침표를 붙이고, 그 뒤에 접근하려는 메서드의 이름을 명시하는 방식입니다. 이 예제에서는 "multiply" 인터페이스 내부의 multiply_by_three 메서드에 접근하는 것입니다.

완성된 최종 코드는 다음과 같습니다.

import java.util.Scanner;

interface CalculateThree {
	double multiply_by_three(double number);
}

class Main {
public static void main(String args[]) {
	Scanner user_input = new Scanner(System.in);
	System.out.println("Insert a number to multiply by three: ");

	double user_number = user_input.nextDouble();

	CalculateThree multiply = (number) -> number * 3;
	double answer = multiply.multiply_by_three(user_number);

	System.out.println(user_number + " multiplied by three is " + answer);

	}
}

코드를 실행하고 숫자 3을 입력해 보겠습니다.

Insert a number to multiply by three:
3
3.0 multiplied by three is 9.0

입력한 숫자가 성공적으로 3배 곱해졌습니다. 이 작업은 우리가 정의한 람다 표현식을 통해 수행된 것입니다.

블록 람다 표현식 사용 방법

람다 표현식은 두 가지 형태로 작성할 수 있습니다. 하나는 단일 표현식(single expression) 형태이고, 다른 하나는 블록(block) 형태입니다. 화살표 오른쪽의 코드가 여러 줄에 걸쳐 작성될 때는 블록 람다 문법을 사용합니다.

블록 문법이란 람다 표현식 오른쪽의 코드를 중괄호({})로 감싸는 방식을 말합니다.

다음 예시를 살펴보겠습니다.

interface GreetUser {
	String welcome_user(String name);
}

class Main {
public static void main(String args[]) {
	GreetUser send_greeting = (name) -> {
		System.out.println("Good morning!");
		System.out.println("Welcome, " + name);
	};

	System.out.println(send_greeting.welcome_user("Brad"));
	}
}

위 코드에서는 send_greeting이라는 람다 표현식을 선언했습니다. 이 표현식은 프로그램 시작 부분에서 정의한 GreetUser 인터페이스를 참조합니다. 이 람다 표현식은 두 가지 작업을 수행합니다.

  • 콘솔에 "Good morning!"을 출력
  • 콘솔에 "Welcome, "와 함께 사용자의 이름을 출력

두 줄의 코드가 필요하기 때문에 블록 문법을 사용했으며, 람다 표현식 오른쪽의 코드는 중괄호로 감싸져 있습니다.

마무리

람다 표현식은 함수형 인터페이스를 구현하는 이름 없는 메서드입니다. 이름이 없고 스스로 실행되지 않는다는 특징 때문에 익명 클래스 또는 익명 함수라고 불리기도 합니다.

도전 과제를 내드릴까요? 숫자가 짝수인지 확인하는 람다 표현식을 직접 작성해 보세요. 짝수라면 "X는 짝수입니다", 홀수라면 "X는 홀수입니다"가 콘솔에 출력되도록 구현하면 됩니다. 여기서 X는 검사 대상 숫자입니다.

이제 여러분도 전문가처럼 자바에서 람다 표현식을 활용할 준비가 되었습니다!