- 이름 없는 익명 함수(Anonymous Function)로, 값처럼 취급되어 변수에 저장되거나 함수의 매개변수, 반환값으로 사용 가능.
- Lambda의 역할
- 일급 시민(First-Class Citizen)으로서의 함수: 함수 자체를 값처럼 다룸.
- 고차 함수 구현: 함수를 매개변수로 받거나 반환값으로 제공 가능.
- 순수 함수 표현: 상태를 변경하지 않고 동일한 입력에 동일한 출력을 제공.
- 스트림 API 활용: 선언적으로 데이터 필터링, 매핑, 집계 등을 수행.
- Lambda의 장점
- 코드 간결성: 익명 클래스를 대체하여 짧고 간결한 코드 작성 가능.
- 가독성 향상: 함수의 동작에 집중 가능해 이해하기 쉬운 코드 작성.
- 함수형 프로그래밍 지원: 고차 함수와 조합 가능, 선언적 프로그래밍 구현.
- 병렬 처리 용이: 스트림 API와 결합하여 병렬 데이터 처리를 간단히 구현.
함수형 프로그래밍
람다 표현식 (Lambda Expression)
- 익명 함수를 간결하게 표현.
- 문법: (매개변수) → { 함수 본문 }
Runnable r = () -> System.out.println("Hello, Lambda!");
함수형 인터페이스 (Functional Interface)
하나의 추상 메서드만 가진 인터페이스
@FunctionalInterface
interface Calculator {
int calculate(int x, int y);
}
스트림 API (Stream API)
- 컬렉션 데이터를 함수형 스타일로 처리.
- 기능: 필터링, 매핑, 정렬, 집계 등.
names.stream()
.filter(name -> name.startsWith("C"))
.map(String::toUpperCase)
.forEach(System.out::println);
메서드 참조
- 람다 표현식을 더 간결하게 표현.
- 문법: ClassName::methodName
names.forEach(System.out::println);
- 불변성과 순수 함수
- 상태 변경 없이 입력값만으로 결과 반환.
Function<Integer, Integer> square = x -> x * x;
Functional Interface
- Predicate : boolean test(T t)
- 조건을 테스트하여 true 또는 false 리턴
- Function : R apply(T t)
- 입력값을 변환하여 결과 리턴
- Consumer : void accept(T t)
- 값을 소비(사용)하며 리턴값 없음
- Supplier : T get()
- 값을 공급하며 매개변수 없이 결과 리턴
Predicate
조건을 테스트하고 true 또는 false를 반환하는 Functional Interface 입니다.
추상 메서드
boolean test(T t)
- 주요 메소드
- and(): 두 조건을 AND 연산으로 결합합니다.
- or(): 두 조건을 OR 연산으로 결합합니다.
- negate(): 조건의 결과를 반전합니다.
Predicate<Integer> isEven = n -> n % 2 == 0;
System.out.println(isEven.test(4)); // 출력: true
System.out.println(isEven.test(5)); // 출력: false
Function
입력값을 특정 변환 후 결과를 return 합니다.
- 추상 메서드
R apply(T t)
- 주요 메소드
- andThen(): 결과를 다른 Function에 전달합니다.
- compose(): 다른 Function의 결과를 입력값으로 사용합니다.
Function<Integer, String> intToString = n -> "Number: " + n;
System.out.println(intToString.apply(5)); // 출력: Number: 5
Consumer
값을 소비(사용)하며, 아무 값도 return 하지 않습니다.
추상 메서드
void accept(T t)
- 주요 메소드
- andThen() 연속적으로 다른 Consumer를 실행합니다.
Consumer<String> print = s -> System.out.println(s);
print.accept("Hello, World!"); // 출력: Hello, World!
Supplier
값을 공급하며 매개변수 없이 결과를 return 합니다.
- 추상 메서드
T get()
Supplier<Double> randomValue = () -> Math.random();
System.out.println(randomValue.get()); // 랜덤 값 출력
'🚣활동 > NHN Academy' 카테고리의 다른 글
Process (프로세스) (0) | 2025.02.03 |
---|---|
Stream (1) | 2025.01.24 |
객체 생성과 제거 (0) | 2025.01.16 |
참조 타입 (0) | 2025.01.14 |
객체지향 프로그래밍 (0) | 2025.01.13 |