✅ 1. 람다식이란?
// 함수형 인터페이스
@FunctionalInterface
interface Printer {
void print(String message);
}
// Main
public class Main {
public static void main(String[] args) {
Printer printer = (message) -> System.out.println("출력:" + message); // 익명함수정의
printer.print("print, message") // 정의 된 함수 호출
}
}
- 함수형 인터페이스의 추상 메서드를 간결하게 표현하는 문법을 의미한다.
- 람다식은 오직 추상 메서드가 하나인 인터페이스 에서만 사용이 가능하며, 이를 함수형 인터페이스라고 한다.
- 익명 구현 클래스의 객체 생성 부분만 람다식으로 표현함.
- 메서드가 하나만 있기 때문에 메서드 이름을 생략 할 수 있으며, 이때문에 람다식은 익명 함수로도 불린다.
✅ 2. 람다식과 익명클래스
// 람다식
Printer printer = msg -> System.out.println("받은 메시지: " + msg);
// 익명클래스
Printer printer = new Printer() {
@Override
public void print(String msg) {
System.out.println("받은 메시지: " + msg);
}
};
- 람다식은 익명 클래스의 단점을 보완하고자 자바 8에서 도입된 기능이다.
- 즉, 람다식은 익명클래스를 기반으로 만들었기 때문에, 기능적으로는 완전 동일하게 동작을 한다.
- 인터페이스의 구현체 클래스를 만들지 않고, 익명클래스로 구현을 하기 때문에 익명클래스인것이다.
- 즉, 람다식은 내부적으로 익명 구현객체가 넘어가지만, 볼 때는 식이 넘어가는 것처럼 보일 수 있다.
✅ 3. 람다식 표현 종류
(1) 매개변수 자료형 생략 가능 - 인터페이스에서 매개변수 타입을 알 수 있으면 자료형 생략이 가능하다.
@FunctionalInterface
interface Calculator {
int operate(int a, int b);
}
Calculator add = (a, b) -> a + b; // 자료형 생략
System.out.println(add.operate(3, 5)); // 출력: 8
(2) 매개변수가 1개면 괄호 생략이 가능하다.
@FunctionalInterface
interface Printer {
void print(String message);
}
Printer printer = message -> System.out.println("출력: " + message); // 괄호 생략
printer.print("Hello");
(3) 매개변수가 0개면 괄호만 남긴다.
@FunctionalInterface
interface Greeter {
void greet();
}
Greeter greeter = () -> System.out.println("안녕하세요!"); // 괄호만 남음
greeter.greet();
(4) 실행문이 1개면 중괄호 생략이 가능하다.
@FunctionalInterface
interface Squarer {
int square(int x);
}
Squarer s = x -> x * x; // 실행문 1개, 중괄호 생략
System.out.println(s.square(4)); // 출력: 16
(5) 실행문이 return 하나면 return + 세미콜론 + 중괄호 생략이 가능하다.
@FunctionalInterface
interface Adder {
int add(int a, int b);
}
// 이건 생략 전
Adder a1 = (a, b) -> { return a + b; };
// 이건 생략 후
Adder a2 = (a, b) -> a + b; // return, 중괄호, 세미콜론 모두 생략
System.out.println(a2.add(2, 3)); // 출력: 5
✅ 4. 정리
- 람다식은 인터페이스를 익명클래스로 구현한 클래스이며, 내부적으로 메서드를 구현하는 식을 가지고 있다.
- 해당 익명클래스의 재정의 된 메서드를 호출함으로써, 구현 된 메서드를 이용하는 방식이 람다식이다.
- 한마디로, 메서드를 재정의 해서 해당 메서드를 호출해서 이용하는 개념임.
'공부 > ☕Java' 카테고리의 다른 글
| [Java] java.io 패키지 입출력 스트림 쉽게 이해하기 (2) | 2025.05.28 |
|---|---|
| [Java] java.lang 패키지 정리: Object, String, Math 클래스 총정리 (0) | 2025.05.26 |
| [Java] 제네릭(Generic) 문법 정리: 클래스, 메서드, 제한까지 (0) | 2025.05.23 |
| [Java] 익명 클래스(Anonymous Class) (1) | 2025.05.22 |
| [Java] 다형성(polymorphism) (1) | 2025.05.22 |