**Lambda(람다)
1.개요
=>jdk 1.7부터 함수형 프로그래밍을 위해서 추가
=>이름없는 함수를 만들기 위해서 사용
=>익명 객체를 만들어서 사용하던 것을 조금 더 간결하게 함수를 대입하는 형태처럼 보이도록 하기 위해서 사용
=>단, 메서드가 1개만 존재하는 인터페이스에서만 사용이 가능
2.작성 방법
(매개변수 나열)->{내용을 작성}
=>매개변수를 작성할 때는 자료형과 매개변수 이름을 작성하는데 매개변수 자료형은 생략이 가능합니다.
자료형을 생략하면 호출할 때 자료형을 결정합니다.
=>매개변수가 1개인 경우는 ()를 생략하는 것이 가능
매개변수가 없거나 2개 이상인 경우는 생략하면 안됨
3.실습
=>메서드에 return type이 있다면 return을 만들면 됨.
이때 중괄호 안에 return하는 문장만 있다면 {}를 생략하는 것이 가능함
그럴 경우 return도 생략! 하나만 지우는 건 안되고 둘 다 지워야 함.
Arrays.sort(str, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o2.compareTo(o1);
}});
이 식이
Arrays.sort(str,(o1,o2)->o2.compareTo(o1));
이렇게. 간단해진다.
단, 코드의 가독성이 떨어진다는 단점이 있긴 함.
인텔리제이는 코드 최적화 기능이 있어서 람다식으로 바꿔버린다.
Lambda
package java_1028.Lambda;
import java.util.Arrays;
import java.util.Comparator;
public class LambdaMain {
public static void main(String[] args) {
//배열의 정렬
String[] str = {"아담", "이브", "카인", "골리앗", "야훼"};
//배열의 내림차순 정렬
//Arrays.sort(배열, 비교를 위한 Comparator<T> 인터페이스를 구현한 클래스의 객체)를 호출해야 함
Arrays.sort(str, new Comparator<String>() {//sort는 한번만 쓸 거니까 Anonymous 사용
@Override
public int compare(String o1, String o2) {
return o2.compareTo(o1);
}});
//Lambda
//Comparator는 메서드가 1개만 존재합니다.->이것이 람다를 위한 전제 조건. 메서드는 1개만 있어야 함
//람다를 만들 때는 인터페이스 이름과 메서드 이름은 중요하지 않음.
//중요한 건 매개변수의 개수와 리턴타입만 확인하면 됨
//매개변수는 2개이고 리턴타입은 정수
//매개변수가 1개이면 ()생략도 가능
Arrays.sort(str,(o1,o2)->{return o2.compareTo(o2);});
//{}안에 return하는 문장만 존재하면 둘 다 생략 가능
Arrays.sort(str,(o1,o2)->o2.compareTo(o1));
//메서드의 매개변수로 코드(함수)를 대입한 것처럼 보이도록 함
//메서드의 매개변수로 코드(함수)를 대입할 수 있는 방식을 "함수형 프로그래밍"이라고 함-자바는 함수형 프로그래밍을 지원하지 않음. 그렇게 보이도록 한 것일 뿐.
//배열의 요소를 빠르게 확인
System.out.println(Arrays.toString(str));
}
}
[카인, 이브, 야훼, 아담, 골리앗]
4.자바가 제공하는 람다 인터페이스
1)★Comsumer : 매개변수는 있고 리턴 값은 없는 메서드를 소유한 인터페이스-System.out.prinln();
2)Supplier : 매개변수는 없고 리턴값만 있는 메서드를 소유한 인터페이스
3)★Function : 매개변수와 리턴이 모두 있는 메서드를 소유한 인터페이스 -이런 모양은 대부분 변환 작업이 있을 때 사용
4)★Operator : 매개변수가 있고 리턴도 있는 메서드를 소유한 인터페이스 -이 인터페이스는 일반적으로 메서드 내부에서 연산 작업 수행
5)★Perdicate : 매개변수가 있고 리턴 값이 boolean인 메서드를 소유한 인터페이스 -판정. 필터링 할 때
'JAVA' 카테고리의 다른 글
221028 Thread (0) | 2022.10.28 |
---|---|
221028 Stream API (0) | 2022.10.28 |
221028 Anonymous Class (0) | 2022.10.28 |
221028 Nested Class(내포 클래스)-(Embedding) (0) | 2022.10.28 |
221027 Serializable, DTO (0) | 2022.10.27 |