반응형
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Array
- vscode
- Eclipse
- string
- junit5
- javascript
- 단위테스트
- Visual Studio Code
- Java
- IntelliJ
- 배열
- list
- 테스트자동화
- 인텔리제이
- json
- 자바
- 문자열
- java테스트
- HashMap
- 자바문법
- 자바스크립트
- js
- 정규식
- junit
- math
- CSS
- input
- ArrayList
- 이클립스
- html
Archives
- Today
- Total
어제 오늘 내일
[Java] Lambda(람다식) 쉽게 이해하기 본문
Java의 Lambda(람다식)은 메서드를 하나의 표현식(식)으로 간단하게 작성할 수 있게 하는 기능입니다.
코드를 짧고 간결하게 만들어 주며, 특히 Stream API, 익명 클래스, 함수형 인터페이스와 함께 사용할 때 매우 유용합니다.
람다식은 Java 8에서 도입되었으며, “함수를 간단하게 표현하는 문법”이라고 이해하면 쉽습니다.
1. 람다식이란?
람다식은 메서드를 단순한 식(Expression) 형태로 표현한 것입니다.
형식:
(매개변수) -> { 실행문 }
예:
(int x, int y) -> { return x + y; }
더 간단히:
(x, y) -> x + y
2. 왜 람다식을 사용할까?
✔ 코드가 짧아짐
익명 클래스를 일일이 작성할 필요 없음.
✔ 가독성 향상
의도만 남기고 불필요한 코드 제거.
✔ 함수형 프로그래밍 스타일 지원
Stream API와 함께 매우 강력함.
3. 람다식 사용 조건: 함수형 인터페이스
람다식은 반드시 추상 메서드가 하나만 있는 인터페이스와 함께 사용됩니다.
이런 인터페이스를 **함수형 인터페이스(Functional Interface)**라고 합니다.
대표 예
- Runnable
- Callable
- Comparator
- Consumer, Supplier, Function 등 (java.util.function 패키지)
직접 정의할 수도 있습니다:
@FunctionalInterface
interface MyFunction {
int apply(int x, int y);
}
4. 익명 클래스 vs 람다식 비교
익명 클래스
Runnable r1 = new Runnable() {
@Override
public void run() {
System.out.println("Run!");
}
};
람다식
Runnable r2 = () -> System.out.println("Run!");
→ 코드 길이가 크게 줄어듦.
5. 람다식 기본 형태 예제
5-1. 매개변수 1개
x -> x * 2
5-2. 매개변수 2개
(x, y) -> x + y
5-3. 매개변수 없음
() -> System.out.println("Hello")
5-4. 실행문 여러 줄
(x, y) -> {
int sum = x + y;
return sum;
}
6. Stream에서 람다식 활용 예
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
list.stream()
.filter(n -> n % 2 == 0)
.map(n -> n * 10)
.forEach(n -> System.out.println(n));
출력:
20
40
설명
- filter: 짝수만
- map: 각 값을 10배
- forEach: 출력
7. java.util.function 패키지 예시
람다식은 아래 함수형 인터페이스들과 함께 자주 사용됩니다.
7-1. Predicate (조건 검사)
Predicate<Integer> isEven = n -> n % 2 == 0;
7-2. Function<T, R> (값 변환)
Function<String, Integer> toLength = str -> str.length();
7-3. Consumer (값 소비)
Consumer<String> print = s -> System.out.println(s);
7-4. Supplier (값 제공)
Supplier<Double> random = () -> Math.random();
8. Comparator에서 람다식 사용
기존 방식:
Collections.sort(list, new Comparator<Integer>() {
@Override
public int compare(Integer a, Integer b) {
return b - a;
}
});
람다식:
Collections.sort(list, (a, b) -> b - a);
9. 전체 예제
@FunctionalInterface
interface Calculator {
int calc(int x, int y);
}
public class Main {
public static void main(String[] args) {
Calculator add = (x, y) -> x + y;
Calculator mul = (x, y) -> x * y;
System.out.println(add.calc(3, 5)); // 8
System.out.println(mul.calc(3, 5)); // 15
}
}
설명
- 함수형 인터페이스 사용
- 람다식으로 메서드 구현을 간결하게 표현
10. 정리
- 람다식은 메서드를 간단한 표현식으로 표현하는 문법
- 함수형 인터페이스(추상 메서드 1개)와 함께 사용
- 코드 간결성, 가독성, 생산성 증가
- Stream API와의 조합에서 가장 큰 효과
- 익명 클래스보다 간단한 대체 문법
반응형
'IT > Java' 카테고리의 다른 글
| [Java] Immutable 객체란? (0) | 2026.01.04 |
|---|---|
| [Java] Stream API 기초와 예제 (0) | 2026.01.03 |
| [Java] Optional 사용법 (NullPointerException 방지) (0) | 2026.01.02 |
| [Java] 사용자 정의 예외(Custom Exception) 만들기 (0) | 2026.01.02 |
| [Java] throw vs throws 차이 (0) | 2026.01.01 |
Comments
