1. 핵심 정리
람다식이란?
JDK 1.8부터 자바에서 지원하는 함수형 프로그래밍을 람다식(Lambda expression)이라고 함
람다식은 함수의 이름이 없는 익명 함수(anonymous funtion)를 만들기 위한 표현식
람다식은 '익명 함수' 답게 메서드의 이름과 반환 타입을 제거하고 화살표 기호(→)를 사용해 구현
메서드를 람다식으로 표현하면 다음과 같음
| 메서드 | 람다식 |
| int sum(int a,int b) { return a+b; } |
(int a,int b) → {return a+b}; (int a,int b) → a+b; (a,b) → a+b; |
| int sum(int a,int b) { int result=a+b; return result; } |
(int a,int b) → {return a+b}; (int a,b) → {return a+b}; |
| String getName(String str); | (String str) → {return str}; (str) → str; str → str; |
- 메서드의 구문이 return만 존재하는 경우에는 중괄호와 return을 생략 가능
- 메서드의 파라미터가 1개인 경우에는 파라미터의 소괄호를 생략 가능
람다식 선언
람다식을 사용하기 위해서는 함수형 인터페이스를 선언
함수형 인터페이스는 익명 함수와 매개변수만으로 구현되기 때문에 하나의 메서드만을 가져야 함
@FunctionalInterface 애노테이션
함수형 인터페이스 선언 시 @FunctionalInterface 애노테이션을 사용하면 메서드를 두 개 이상
선언하는 개발자의 실수를 방지 가능
2. 응용 문제
Q1. 다음 중 람다식에 대한 설명으로 틀린 것은 무엇입니까?
- 람다식은 함수형 인터페이스의 익명 구현 객체를 생성합니다.
- 매개 변수가 없을 경우 () → {...} 형태로 작성합니다.
- (x,y) → {return x+y;} 는 (x,y) → x+y로 변경할 수 있습니다.
- @FunctionalInterface가 기술된 인터페이스만 람다식으로 표현할 수 있습니다.
A1. 4
Q2. 다음 중 람다식 표현으로 잘못된 것을 고르세요.
- (int a,int b) → {return a+b;};
- (s) → System.out.println(s);
- str → System.out.println(str);
- num01,num02 → Ststem.println(num01+num2);
A2. 4
Q3. 다음 코드는 컴파일 에러가 발생합니다. 그 이유는 무엇이며, 어떻게 해결해야 할까요?
package section17;
import java.math.BigDecimal;
import java.math.RoundingMode;
interface Calc {
double round(int point);
}
public class LamdaExample {
public static void main(String[] args) {
double val=34.1254886;
// BigDecimal을 이용한 소수점 자릿수 반올림
Calc cal=(point) → {
val=new BigDecimal(val).setScale(point,RoundingMode.HALF_UP).doubleValue();
return val1;
};
System.out.println("소수점 둘째 자리 반올림 : "+cal.round(2));}
}
}
A3.
package section17;
import java.math.BigDecimal;
import java.math.RoundingMode;
interface Calc {
double round(int point);
}
public class LamdaExample {
public static void main(String[] args) {
final double val=34.1254886;
// BigDecimal을 이용한 소수점 자릿수 반올림
Calc cal=(point) -> {
double val1=new BigDecimal(val).setScale(point,RoundingMode.HALF_UP).doubleValue();
return val1;
};
System.out.println("소수점 둘째 자리 반올림 : "+cal.round(2));
}
}
2024.07.29
'JAVA > JAVA복습(멘토씨리즈 자바)' 카테고리의 다른 글
| [JAVA복습] 19. 파일 입출력 (0) | 2024.07.30 |
|---|---|
| [JAVA복습] 18. 스레드 (0) | 2024.07.29 |
| [JAVA복습] 16. 컬렉션 프레임워크 (0) | 2024.07.27 |
| [JAVA복습] 15. 기본 API 클래스 (0) | 2024.07.27 |
| [JAVA복습] 14. 예외처리 (0) | 2024.07.25 |