질문거리
- 함수형 인터페이스란? -> 하나의 추상메서드만을 가지는 것.
-> 그렇다면 왜 하나만 가지는 것이 중요한가?- process(()-> System.out.println("hello world3"));이건 람다에서 객체에서의 소비일까, 아니면 객체 생성의 예시일까?
- 실행어라운드 패턴 4단계가 이해가 잘 안된다...
익명함수를 단수화한 것, 함수형 인터페이스라는 문맥에서 람다를 사용할 수 있음.
-> 람다 표현식을 함수형 인터페이스의 인스턴스로 취급 할 수 있다.
(apple a1, Apple a2) -> a1.getweigth().compareTo(a2.getweight());
람다 파라미터 + 화살표 + 람다 바디
(List<String> list) -> list.isEmpty()
(Apple a) -> a.getweight() > 150
"객체의 생성"이란, 람다 표현식을 통해 새로운 값을 생성하거나 객체를 생성하는 작업을 의미합니다.
()-> new Apple(10)
() -> 42
Consumer 인터페이스는 주어진 입력을 받아 소비하는 작업을 수행하는 함수형 인터페이스입니다. 객체에서 소비는 주로 데이터의 변경, 출력, 로깅 등의 동작을 의미합니다.
코드 (String s) -> s.length()은 입력으로 문자열을 받아 문자열의 길이를 반환하므로, 실제로 데이터의 변경 또는 소비가 아닙니다. 따라서 Consumer와는 다른 개념입니다.
(Apple a)->{
System.out.println(a.getWeight());
}
(int x, int y) ->
{
System.out.println("Result:");
System.out.println(x+y);
}
선택 추출은 람다 표현식을 사용하여 원하는 작업을 추출하고 해당 작업을 필요한 곳에서 호출하는 것을 의미합니다.
따라서, (String s) -> s.length() 코드는 소비하는 개념보다는 주어진 문자열의 길이를 선택적으로 추출하는 개념에 더 가깝습니다.
(String s)-> s.length()
(int a, int b) -> a+b
(Apple a1, Apple a2)->
a1.getWeight().compareTo(a2.getWeight())
(parameter) -> expression
(parameter) -> {statement;}
정확히 하나의 추상 메서드를 지정하는 인터페이스, 디폴트 메서드는 여러개라도 상관없음.
public interface Comparator< T >{
int compare(T o1, T o2)
}
public interface Runnable{
void run();
}
public interface ActionListner extends EventListener{
void actionPerformed(ActionEvent e);
}
public interface Callable< V >{
V call() throws Exception;
}
public interface PrivilegedAction< T >{
T run();
}
-> 람다 표현식을 함수형 인스턴스의 인스턴스로 취급 할 수 있다.
public static void process(Runnable r){
r.run();
}
Runnable r1 = () -> System.out.println("hello world1")
process(r1);
process(()-> System.out.println("hello world2"));
추상 메서드의 시그니처란 메서드의 이름, 매개변수 목록, 그리고 반환 타입으로 구성된 메서드의 선언 형태를 말합니다
람다 표현식의 시그니처를 표현하는 메서드를 함수 디스크립터라고 한다.
실행 어라운드 패턴
Predicate< T >
Consumer < T >
Function< T, R >
기본형 특화
predicate
consumer
function
매서드 참조
생성자 참조