자바는 객체 지향 프로그래밍 언어이지만 함수적 프로그래밍을 위해 자바8부터 람다식을 지원.
람다식의 형태는 매개변수를 가진 코드 블록이지만 런타임 시에는 익명 구현 객체를 생성함.
1. 람다식은 "(매개변수) -> {실행코드}" 형태로 작성됨.
Runable runable = new Runable() { public void run() { ... } }; // 람다식 Runable runable = () -> { ... };
2. 람다식 기본 문법
(매개변수, ...) -> { 실행코드; };
(int a) -> { System.out.println(a); }
매개변수의 타입은 런타임시 대입되는 값에 따라 알 수 있기 때문에 매개변수의 타입을 명시하지 않아도 됨.
(a) -> { System.out.println(a); }
하나의 매개변수만 있다면 괄호() 생략이 가능함. 매개변수가 없는 경우는 괄호()를 반드시 사용해야 됨.
a -> { System.out.println(a); }
() -> { System.out.println(a); } // 매개변수가 없는 경우 괄호 필수임
return문만 있는 경우 return문 생략이 가능함.
(x, y) -> { return x + y; } // 아래처럼 return 생략 가능
(x, y) -> x + y
3. @FunctionalInterface 어노테이션
하나의 추상 메소드가 선언된 인터페이스만 람다식의 타겟 타입이 될 수 있음.
인터페이스 선언시 @FunctionalInterface 어노테이션을 붙여주면 두개 이상의 추상 메소드가 선언되면 컴파일 오류를 발생시켜줌.
4. 표준 API의 함수적 인터페이스
자바8부터 빈번하게 사용되는 함수적 인터페이스는 java.util.function 표준 API 패키지로 제공됨.
Consumer, Function, Operator, Predicate, Supplier가 대표적임.
Consumer<T>
Represents an operation that accepts a single input argument and returns no result.
Function<T,R>
Represents a function that accepts one argument and produces a result.
Predicate<T>
Represents a predicate (boolean-valued function) of one argument.
Supplier<T>
Represents a supplier of results.
https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html
'프로그래밍 > Java' 카테고리의 다른 글
이클립스 SVN LOCK 해제하기 (0) | 2023.01.18 |
---|---|
이클립스, STS 메모리 설정 (0) | 2023.01.18 |
스트림(Stream) (0) | 2021.12.10 |