Java 함수형 프로그래밍 (람다식)
Section 1. 함수형 프로그래밍
1. 객제 지향 프로그래밍
기능을 수행하기 위해 객체를 만들고 내부에 멤버 변수를 선언하고 기능을 수행하는 메서드를 구현
2. 함수형 프로그래밍
매개변수만을 사용하는 순수함수(pure function)를 구현하고 호출함으로써 외부에 부수적인 영향(side effect)을 주지 않도록 하는 방식
- 자바 8부터 함수형 프로그래밍 방식을 지원하고 이를 람다식이라 함
- 외부 자료를 사용하지 않아 여려 자료가 동시에 수행되는 병렬처리가 가능
Section 2. 람다식
1. 람다식
함수형 인터페이스를 구현하여 익명 객체(클래스)를 생성하기 위한 간단한 표현식
- 익명 메서드가 생성되는 것이 아닌 익명 클래스의 인스턴스가 생성됨 (익명 내부 클래스 참조)
2. 람다식 문법
-
매개 변수와 매개변수를 이용한 실행문 (매개변수) -> {실행문;}
-
두 수를 입력 받아 더한 결과값을 반환하는 함수
int add(int x, int y){
return x+y;
}
- 람다식으로 표현
(int x, int y) -> {return x+y;} # 기본
(x,y) -> {return x+y;} # 자료형 생략 가능
str -> {return str.length();} # 매개변수가 하나일 때 소괄호 생략가능
(x,y) -> x+y; # 실행문이 한 문장의 반환문이면 중괄호와 return 생략 가능
x, y -> {System.out.println(x+y);} # 에러 (매개변수 2개면 소괄호 생략 불가능)
str-> return str.length(); # 에러 (중괄호와 return이 동시에 생략되어야 함)
3. 함수형 인터페이스
람다식을 선언하기 위한 인터페이스
- @FunctionalInterface 애노테이션 지정
- 인터페이스는 단 하나의 메서드만을 선언해야함
- 한 개 이상의 메서드를 선언하면 인터페이스의 자료형 레퍼런스 변수에 담기 때문에 어떤 메서드를 의미하는 지 모르고 매개변수 또한 생략 가능하기 때문에 모호한 상황이 발생
4. 표준 API 함수적 인터페이스
- Java 에서 제공하는 표준 함수적 인터페이스 존재
① Consumer - 매개변수는 있고 리턴값은 없음
② Supplier - 매개변수는 없고 리턴값이 있음
③ Function: 매개변수, 리턴값 모두 있음 (매개변수를 리턴값으로 변환)
④ Operator: 매개변수, 리턴값 모두 있음 (매개변수들 간 연산)
⑤ Predicate: 매개변수는 있고 리턴 타입은 boolean
5. 람다식을 이용한 함수형 프로그래밍
- 함수형 인터페이스 정의
@FunctionalInterface
public interface MyNumber {
int getMax(int num1, int num2);
}
- 람다식으로 익명 함수 객체 생성
public class TestMyNumber {
public static void main(String[] args) {
MyNumber max = (x, y)->(x>= y)? x:y; # 람다식을 인터페이스 자료형 레퍼런스 변수에 저장
System.out.println(max.getMax(10, 20)); # 인터페이스 자료형 변수로 함수 호출
}
}
Author And Source
이 문제에 관하여(Java 함수형 프로그래밍 (람다식)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@codren/Java-함수형-프로그래밍-람다식저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)