| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 이것이 자바다
- 이스케이프 문자
- Selection Sorting
- list 컬렉션
- s
- Stack
- coding test
- 메모리구조
- 알기쉬운 알고리즘
- buffer
- 혼자 공부하는 C언어
- C 언어 코딩 도장
- JSON
- 윤성우 열혈자료구조
- insertion sort
- stream
- datastructure
- Algorithm
- R
- Serialization
- C programming
- 윤성우의 열혈 자료구조
- Graph
- Today
- Total
Engineering Note
[Java] Lambda expression 본문
1. 람다식이란?
Lambda expression(람다 표현식, 람다식)
- 메서드를 하나의 식(expression)으로 표현한 것.
- 메서드를 람다식으로 표현하면 메서드의 이름과 반환값이 없어지므로, 람다식을 '익명함수(anonymous fuction)'라고도 한다.
예시
//메서드
int method() {
return (int) (Math.random()*5) + 1;
}
//람다식
int[] arr = new int[5];
Arrays.setAll(arr, (i) -> (int)(Math.random()*5) + 1;
람다식의 장점
- 모든 메서드가 클래스에 포함되어야 한것과 달리, 람다식은 오직 람다식 자체만으로 메서드의 역할을 대신할 수 있다.
2.람다식 작성하기
람다식은 '익명 함수'답게 메서드에서 메서드이름과 반환타입을 제거하고 매개변수 선언부와 몸통{} 사이에 '->'를 추가한다. 반환 값이 있는경우 return문 대신 '식(expression)'으로 대신할 수 있다. 이때는 '문장(statement)'이 아닌 '식'이므로 끝에 ';'을 붙이지 않는다.
3. 람다 메서드 참조
메서드 참조
- 람다식이 하나의 메서드만 호출하는 경우 람다식을 간략히 표현하는 방법
메서드 참조 방식으로 람다식을 작성하며, 매개변수를 생략할 수 있다.
Function<String, Integer> f = (String s) -> Integer.parseInt(s);
Function<String, Integer> f= Integer::parseInt;
첫 벗째 라인에 람다식을 메서드 참조 방식으로 작성하면서 파라미터 값과 타입을 생략해주었다. 이는 좌변의 f의 반환 타입만 봐도 컴파일러가 String 타입을 반환한다는걸 알 수 때문에 생략할 수 있다.
또 다른 예시로, 아래와 같은 상황도 생각해 볼 수 있다. 매개변수 s1과 s2를 생략하고 같단하게 메서드 참조 방식으로 표현할 수 있는데, 두 개의 String을 받아서 Boolean을 반환하는 경우다. 그런데 이러한 equals라는 이름의 메서드는 다른 클래스에도 존재할 수 있기 때문에 equals앞에 클래스 이름은 생략할 수 없다.
BiFunction<String, String, Boolean> f = (s1, s2) -> s1.equals(s2);
BiFunction<String, String, Boolean> f = String::equals;
만약 사용하는 메서드가 이미 생성된 객체라면 클래스 이름 대신 그 객체의 참조변수를 적어주면 된다.
MyClass obj = new MyClass();
Function<String, Boolean> f = (x) -> obj.equls(x);
Function<String, Boolean> f2 = obj::equlas;
참고 자료 : 자바의 정석(남궁성)
'Programming Language > Java' 카테고리의 다른 글
| [Java] Stream API 실전 예제(Entity/DTO 변환 과정: forEach -> map 리팩토링) (0) | 2025.10.04 |
|---|---|
| [Java] Stream, map() (0) | 2025.08.27 |
| [Java] Thread 구현과 실행 (1) | 2025.08.02 |
| [Java] main thread 실행 흐름과 call stack, stack frame, main thread 개념 (1) | 2025.08.02 |
| [Java] Interface와 DI(Dependency Injection)를 통해 객체간 결합 낮추기, Interface를 사용하는 이유 (4) | 2025.08.01 |
