
안녕하세요.
오늘은 람다식 (Lamnda Expression)에 대해 알아볼게요.
람다식
람다(표현)식은 자바 8부터 도입이 저작된 함수형 인터페이스예요.
함수를 하나의 식으로 간결하게 표현하고,
익명 클래스를 대쳐 해 코드의 가독성을 향상하는 특징을 가지고 있어요.
?!) 함수형 인터페이스란?
추상메서드가 단 하나만 존재하는 인터페이스로
인터페이스에 @FunctionalInterface 어노테이션으로 선언이 가능해요.
디폴트 메서드, static 메서드는 여러 개 존재가 가능합니다.
1. 람다식 기본 형태
cf) 메서드 기본 형태
[접근제어자] 반환타입 메서드명(매개변수...) { 구현부 }
== 람다식 ==
: 추상 메서드를 간결하게 구현하는 것이 목표
+) 인터페이스의 추상 메서드 public abstract 생략
(매개변수) -> { 구현부(실행문) };
>> 매개변수: 인터페이스의 메서드 매개변수와 동일
>> -> (연산자): 화살표 매개변수와 실행문을 구분
>> 실행문: 메서드 몸체, {} 코드 블록
다음은 람다식의 사용 예제를 볼까요?
람다식의 사용 예제
1) 기본 표현: 여러 개의 매개변수, 하나의 실행문
@FunctionalInterface
interface Calculator { int add(int a, int b); }
public class D_Lambda {
public static void main(String[] args) {
System.out.println("=== 익명 플래스를 사용하는 추상 메서드 구현 ===");
Calculator calculator1 = new Calculator() {
@Override
public int add(int a, int b) {
return a + b;
}
};
System.out.println("익명 클래스 결과: " + calculator1.add(3,5)); // 익명 클래스 결과: 8
System.out.println("=== 람다식을 사용한 추상 메서드 구현 ===");
Calculator calculator2 = (a,b) -> {
int result = a + b;
return result; // 여러 줄 구현은 {} 생략 불가 , (반환값도 반드시 return 사용)
};
System.out.println("람다식 결과 1: " + calculator2.add(4,9)); // 람다식 결과 1: 13
// cf) 람다식의 경우 구현부가 한 줄 일 때 중괄호 생략 가능
// >> return 키워드까지 생략! (값은 곧바로 반환)
Calculator calculator3 = (a, b) -> a + b;
System.out.println("람다식 결과 2: " + calculator3.add(7,8)); // 람다식 결과 2: 15
2) 매개변수가 없는 경우
@FunctionalInterface
interface NoParams { void sayHello(); }
public class D_Lambda {
public static void main(String[] args) {
System.out.println("=== 매개변수가 없는 추상 메서드 표현 (람다식) ===");
NoParams noParams = () -> {
String a = "Hi";
String b = "Hello";
System.out.println(a + b);
};
noParams.sayHello(); // HiHello
}
}
3) 매개변수가 한 개인 경우
@FunctionalInterface
interface OneParams { void print(String massage); }
public class D_Lambda {
public static void main(String[] args) {
System.out.println("=== 매개변수가 하나인 추상 메서드 표현 (람다식) ===");
OneParams oneParams = massage -> System.out.println("출력: " + massage); // 출력: 안녕
oneParams.print("안녕");
}
}
4) 실행문이 여러 줄인 경우
@FunctionalInterface
interface Operation { void operate(int a, int b); }
public class D_Lambda {
public static void main(String[] args) {
System.out.println("=== 실행문이 여러 줄인 추상 메서드 표현 (람다식) ===");
Operation operation = (a,b) -> {
System.out.println("합: " + (a + b)); // 8
System.out.println("차: " + (a - b)); // 4
};
operation.operate(6,2);
}
}
5) 반환값이 있는 경우
@FunctionalInterface
interface StringLength { int getLength(String str); }
public class D_Lambda {
public static void main(String[] args) {
System.out.println("=== 반환값이 있는 추상 메서드 표현 (람다식) ===");
StringLength stringLength = str -> str.length(); // 실행문이 한 줄: return + {} 생략 가능
// cf) 여러 줄일 경우: return + {} 둘다 생략 불가
System.out.println("문자열의 길이: " + stringLength.getLength("Lambda"));
// 문자열의 길이: 6
// cf) 여러 줄의 코드가 실행문에 작성될 경우
// : 리스트 순회
List<Integer> numbers = new ArrayList<>();
numbers.add(10);
numbers.add(20);
numbers.add(30);
System.out.println(numbers); // [ 10, 20, 30 ]
}
}

여기까지 람다식에 대해 알아봤는데요.
람다식은 자바의 함수형 프로그램의 강력한 도구로 사용할 수 있지만
너무 남용한다면 복잡해질 수 있으니
간단하고 명확하게 사용해 보는 것이 어떨까요?
'Backend > Java' 카테고리의 다른 글
| Java - JDBC (3) | 2025.08.13 |
|---|---|
| 스트림(Stream) API (5) | 2025.07.29 |
| 내부 클래스 (Inner Class) (4) | 2025.07.27 |
| 프레임워크(Framework) (6) | 2025.07.26 |
| 빌더(Builder) (2) | 2025.07.25 |