B.1 람다가 도입된 이유
람다를 지원하기 위한 인터페이스를 함수형 인터페이스라고 한다.
B.2 람다란 무엇인가?
람다란 한 마디로 코드 블록이다. 코드 블록인 람다를 메서드의 인자나 반환값으로 사용할 수 있게 된다.
코드 블록을 변수처럼 사용할 수 있다는 것
public class B003 {
public static void main(String[] args) {
Runnable r = () -> {
System.out.println("Hello Lambda 3!!!");
};
r.run();
}
}
람다의 구조
(인자 목록) -> { 로직 }
B.3 함수형 인터페이스
추상 메서드를 하나만 가지는 인터페이스를 함수형 인터페이스라고 한다.
B.4 메서드 호출 인자로 람다 사용
public class B007 {
public static void main(String[] args) {
MyFunctionalInterface mfi = a -> a * a;
dolt(mfi);
}
public static void dolt(MyFunctionalInterface mfi) {
int b = mfi.runSomething();
System.out.println(b);
}
}
자바 8 API에서 제공하는 함수형 인터페이스
B.7 컬렉션 스트림에서 람다 사용
Arrays.stream(ages)
.filter(age -> age < 20)
.forEach(age -> System.out.format(age));
stream(ages) : 기존 배열을 이용해 스트림을 얻는다.
filter : Predicate 함수형 인터페이스를 filter 메서드의 인자로 제공
forEach: 스트림 내부 반복을 실행(소비 인터페이스 Cousumer 요구)
메서드 레퍼런스와 생성자 레퍼런스
메서드 레퍼런스 예시
Arrays.stream(ages).sorted().forEach(System.out::println);
Arrays.stream(nums)
.map(num -> Math.sqrt(num))
.forEach(sqrtNum -> System.out.println(sqrtNum));
Arrays.stream(nums)
.map(Math::sqrt)
.forEach(System.out::println);
배열 각각의 인자를 루트를 씌우고, 각각을 출력하는 메서드 레퍼런스
람다식이 map 클래스::정적메서드로 바뀐 것을 볼 수 있음.
람다식이 println은 인스턴스::인스턴스메서드로 바뀐 것을 볼 수 있음.
생성자 레퍼런스
클래스::new
'📗 BOOK > 스프링 입문을 위한 자바 객체 지향의 원리와 이해' 카테고리의 다른 글
부록 A - 스프링 MVC를 이용한 게시판 구축 (0) | 2022.04.22 |
---|---|
07 스프링 삼각형과 설정 정보 (0) | 2022.04.15 |
06 스프링이 사랑한 디자인 패턴 (0) | 2022.04.08 |
05 객체 지향 설계 원칙 - SOLID (0) | 2022.04.08 |
04 자바가 확장한 객체 지향 (0) | 2022.03.25 |