✨ 람다식

 

익명 객체를 람다식으로 대체 가능한 이유 →

람다식도 실제로는 익명 객체이고 익명 객체의 메서드와 람다식의 매개변수 타입과 개수, 그리고 반환값이 일치하기 때문.

 

람다식은 객체이기 때문에 참조변수가 필요, 그래서 필요한 게 함수형 인터페이스

함수형 인터페이스 타입을 통해 참조변수로 람다식을 참조할 수 있다.

단, 함수형 인터페이스의 메서드와 람다식의 매개변수 개수와 반환타입이 일치해야한다.

람다식을 다루기 위한 인터페이스 : 함수형 인터페이스 (functional interface)

@FunctionalInterface

interface MyFunction { // 함수형 인처페이스 myFunction을 정의
	public abstract int max(int a, int b);
}

@FunctionalInterface 를 붙이지 않아도 오류가 나진 않지만 붙이면 올바르게 코드를 짜고 있는지 확인해준다.

 

함수형 인터페이스는 오직 하나의 추상 메서드만 정의되어야 한다.

그래야 람다식과 인터페이스가 1 : 1로 연결될 수 있기 때문.

 

함수와 메서드의 차이

→ 근본적으로 동일, 함수는 일반적 용어, 메서드는 객체지향개념 용어

→ 함수는 클래스에 독립적, 메서드는 클래스에 종속적

 

java.util.function 패키지

→ 자주 사용되는 다양한 함수형 인터페이스를 제공

함수형 인터페이스 메서드 설명
java.lang.Runnable void run() 매개변수도 없고, 반환값도 없음.
Supplier<T> T get() 매개변수는 없고, 반환값만 있음.
Consumer<T> void accept (T t) Supplier와 반대로 매개변수만 있고, 반환값이 없음
Function<T, R> R apply (T t) 일반적인 함수, 하나의 매개변수를 받아서 결과를 반환
Predicate<T> boolean test (T t) 조건식을 표현하는데 사용됨. 매개변수는 하나, 반환타입은 boolean

 

매개변수가 2개인 함수형 인터페이스

함수형 인터페이스 메서드 설명
BiConsumer<T, U> void accept (T t, U u) 두 개의 매개변수만 있고, 반환값이 없음
BiPredicate<T,U> boolean test(T t, U u) 조건식을 표현하는데 사용됨. 매개변수는 둘, 반환값은 boolean
BiFunction<T, U, R> R apply (T t, U u) 두 개의 매개변수를 받아서 하나의 결과를 반환

(Bi 는 두개라는 뜻. )

3개의 매개변수가 필요하면 만들면 된다.

 

UnaryOperator와 BinaryOperator

함수형 인터페이스 메서드 설명
UnaryOperator T apply (T t) Function의 자손, Function과 달리 매개변수와 결과 타입이 같다.
BinaryOperator T apply (T t, T t) BiFunction의 자손, BiFunction과 달리 매개변수와 결과 타입이 같다.

매개변수 타입과 반환타입이 모두 일치,

UnaryOperator의 조상은 Function, BinaryOperator의 조상은 BiFunction

 

 

+ Recent posts