[기초] 시리즈는 본강의를 수강후 정리한 글들 입니다.
💡람다식의 이해
- 불필요한 코드를 줄이고, 코드의 이해를 도움.
- 메소드로 전달할 수 있는 익명 함수를 단순화한 코드의 블록
- 특정 클래스에 종속되지 않으며 함수라는 이름으로 명명
- 함수 자체를 전달인자로 보내거나 변수에 저장하는 것이 가능
📌예제
List<String> list = new ArrayList<>();
list.add("Java");
list.add("C");
list.add("Python");
for (String str : list){ // 기존 방식
System.out.println(str);
}
System.out.println();
list.stream().forEach((String str) -> {System.out.println(str);} );
👉forEach를 사용하여 String str 을 매개변수로 꺼내서 -> {실행문}을 실행하겠다
list.stream().forEach(str -> System.out.println(str) );
👉 람다식이 한줄로 끝난다면 실행문 { ;} 생략가능
👉파라미터의 타입이 예측가능하다면 타입명 () 생략가능
👉그러나 파라미터가 하나가 아닐 경우 () 필요
list.stream().forEach(System.out::println );
👉함수 레퍼런스 식
🚩 보통 2로 사용하지만 가끔 3이 더 추천되는 경우도 있음!
💡함수형 인터페이스
- 람다표현식은 익명 구현 클래스를 생성하고 객체화 한다.
- 익명 구현 클래스로 생성된 람다 표현식은 인터페이스로 대입 가능하며 이 인터페이스를 함수형 인터페이스라고 함.
- 하나의 추상 메소드를 갖는 인터페이스는 모두 함수형 인터페이스가 될 수 있음.
- 다수의 디폴트 메소드를 갖는 인터페이스라도 추상 메소드가 하나라면 함수형 인터페이스.
- 하나의 추상 메소드를 가지면 무조건 함수형 인터페이스가 될 수 있음.
- 그러나 이미 자바가 만들어 놓은 함수형 인터페이스들이 많이 있기 때문에 직접 만들 일은 적음 -> 잘 사용하면 됨.
- 함수형 인터페이스를 정의할 때 @FumctionalInterface 어노테이션을 이용해 컴파일 검사를 진행.
- 함수형 인터페이스의 추상메소드 시그니처를 함수 디스크립터 function descriptor 하고 함.
- java.util.function 패키지를 통해 다양한 함수형 인터페이스를 제공
- 기본형 특화는 Auto-Boxing 동작을 제한한 함수형 인터페이스
- primitive 타입에 대해서 Auto-boxing, unBoxing이 진행 됐을 대 성능상의 문제가 있을 수 있으니 그럴 경우 기본형 특화 되어있는 인터페이스를 사용하여라!
- 주로 사용하는 인터페이스
함수형 인터페이스 | 메소드 | 설명 |
Predicate<T> | test() | 데이터에 대해 필터링을 하거나 조건에 맞는 지 확인 |
Comsumer<T> | accept() | 작업을 수행 , 반환 없음 |
Function<T,R> | apply() | 값을 받아서 다른 값으로 반환 |
Supplier<T> | get() | 파라미터 없이 리턴 값만 있는 경우 |
'☕JAVA > 🐣 강의 [JAVA]' 카테고리의 다른 글
[JAVA][기초] Stream 스트림 (0) | 2022.11.15 |
---|---|
[JAVA][기초] 함수형 프로그래밍 / 중첩클래스 (0) | 2022.11.12 |
[JAVA][기초] Map 인터페이스 / Iterator 인터페이스 (0) | 2022.11.10 |
[JAVA][기초] Collection 인터페이스 - List / Set 인터페이스 (0) | 2022.11.10 |
[JAVA][기초] Java Collection Framework 와 Generic 제네릭의 이해 (0) | 2022.11.10 |