1. 람다식
람다식은 하나의 식으로 메서드를 표현한 것입니다.
간단해서 익명함수라고 불립니다.
int[] arr = new int[5];
// 람다식
Arrays.setAll(arr, () -> (int)(Math.random()*5)+1);
람다식을 작성하는 방법은 우선 메소드 반환 타입과 메소드 이름을 제거해줍니다.
그리고 매개변수 (Argument arg) 와 body 부분 {}사이에 ->를 추가합니다.
즉
// 메서드
ReturnType methodName(Argument argument) {
//...
}
// 람다식 : 반환타입과 메서드명을 없애고, 매개변수와 {} 사이에 ->를 추가
(Argument argument) -> {
//...
}
int max(int a, int b){
return a>b ? a: b;
}
위 일반 메서드가 있으면 이를 람다식으로 변형해봅시다.
(int a,int b) -> {return a>b ? a:b;}
(int a,int b) -> a>b ? a:b // ;은 없애자.
(a,b) -> a>b ? a: b
//매개변수 하나일 경우 괄호 생략 가능 단 타입 생략
(int a) -> a*a
a -> a*a
int a -> a*a //에러 발생
2. 예제
int sumArr(int[] arr) {
int sum = 0;
for(int i : arr)
sum += i;
return sum;
}
(int[] arr) -> {
int sum = 0;
for(int i : arr)
sum += i;
return sum;
}
3. 함수형 인터페이스(@FunctionalInterface)
@FunctionalInterface
interface MyFunction { // 함수형 인터페이스 MyFunction을 정의
public abstract max(int a, int b);
}
인터페이스를 통해서 람다식을 이룰 수 있습니다. 이를 함수형 인터페이스라고 불립니다.
대신 오직 하나의 추상메서드만 가질 수 있씁니다.
List<String> list = Arrays.asList("abc", "aaa", "bbb", "ddd", "aaa");
Collections.sort(list, new Comparator<String>()) {
public int compare(String s1, String s2) {
return s2.compareTo(s1);
}
}
List<String> list = Arrays.asList("abc", "aaa", "bbb", "ddd", "aaa");
// 람다식으로 처리
Collections.sort(list, (s1, s2) -> s2.compareTo(s1));
위 처럼 간단하게 바꿀 수 있습니다.
위 함수형인터페이스 MyFunction이 정의되어 있으므로 이를 매개변수로 참조하는 메서드를 살펴봅시다.
@FunctionalInterface
interface MyFunction { // 함수형 인터페이스
void myMethod(); // 추상메서드
}
void aMethod(MyFunction f) { //함수형인터페이스가 매개변수
f.myMethod(); //함수형 인터페이스의 메서드를 호출
}
//참조할 Myfunction 함수형 인터페이스 정의
MyFunction f = () -> System.out.println("myMethod()");
aMethod(f);
'프로그래밍 언어 > Java' 카테고리의 다른 글
디자인 패턴- Template Method Pattern (0) | 2019.08.21 |
---|---|
자바 공부(취업 준비) (0) | 2019.07.29 |
Java- 열거형 (0) | 2019.07.26 |
Java - 제네릭 (0) | 2019.07.25 |
Java- 컬렉션 프레임워크(Collections) (0) | 2019.07.24 |