람다 표현식
람다식은 익명함수를 지칭하는 용어이다.
람다식을 사용하기 위해서는 함수형 인터페이스에 접근해서 사용해야한다.
람다식
즉 익명함수를 값으로 사용 할 수도 있으며 파라미터로 전달 및 변수에 대입 하기와 같은 연산들이 가능하다.
람다의 표현식
1. 람다는 매개변수의 자료형을 생략할 수 있다, 생략 안하고 적어도 된다.
2. -> 이후에는 함수의 몸체로, 어떤 동작을 하는지 적어주면 된다.
3. 함수 내부 코드가 한줄일 경우 중괄호{}를 생략 할 수있다.
(int x) -> x+1
(x) -> x+1
x -> x+1
4. 함수 내부코드가 return문으로만 구성되어있으면 중괄호{}를 생략 할 수 없다.
() -> { return 1; }
(int x) -> { return x+1; }
x -> { return x+1; }
(x, y) -> { return x+y; }
5. 매개변수중 하나는 자료형을 적고 하나는 안 적을 수 없다.
//잘못된 유형 선언된 type과 선언되지 않은 type을 같이 사용 할 수 없다.
(x, int y) -> x+y
(x, final y) -> x+y
예제
익명객체를 생성하기위해 익명클래스의 구현부를 채울때
람다를 사용하지않는경우
Arrays.sort(xy, new Comparator<int[]>() { //Array.sort로 정렬, 정렬기준인 Comparator 직접 생성
@Override
public int compare(int[] o1, int[] o2) {
if (o1[0] == o2[0]) { // x값이 같을경우
return o1[1] - o2[1]; //y값을 기준으로 오름차순
} else { //그게아닌 일반적인 경우는
return o1[0] - o2[0]; // x값을 기준으로 오름차순
}
}
});
람다를 사용하는 경우
Arrays.sort(xy,(o1,o2)->{
if (o1[1] == o2[1]) {
return o1[0] - o2[0];
}
else{
return o1[1] - o2[1];
}
});
람다는 함수형 인터페이스의 구현체 메소드 구현에 사용된다.
위의 예제중 람다를 사용하지않는 경우에서는
new Comparator를 해서 compare메소드를 오버라이드(구현)한 익명객체를 Arrays.sort()의 두번째 전달인자로 주었다.
Comparator를 구현한 익명클래스의 인스턴스인 익명객체의 결국 필요한 부분은 구현(오버라이드)된 compare 메소드였을것이다.
그래서 두번째 예시인 람다를 사용하는 경우에는
함수형 인터페이스인 Comparator의 구현체메소드인 compare를 구현(overide)하는데 람다가 사용되었다.
함수형 인터페이스란?
구현체 메소드가 한개인 인터페이스를 함수형 인터페이스라고 한다.
Comparator과 같은 인터페이스도 다른 기본 메소드가 있어도, 구현체메소드는 하나이기 때문에 함수형 인터페이스이다.
출처,참고,더자세히보기
삼항연산자 관련
'자바 > ++' 카테고리의 다른 글
[Java] BigInteger (큰 숫자 다루기) (0) | 2022.12.14 |
---|---|
[Java] compareTo() (0) | 2022.12.05 |
[Java] Comparator , Comparable , 익명객체(클래스) (0) | 2022.12.04 |
[Java] Collection (컬렉션) 정리 (0) | 2022.12.04 |
[Java] 나눗셈 (0) | 2022.12.04 |
댓글