람다함수란?
익명 함수를 지칭하는 용어
함수를 단순하게 표현하는 방법
람다의 장단점
장점
- 코드의 간결성
- 지연연산 수행
- 병렬처리 가능
단점
- 람다식의 호출이 까다로움
- 람다 스트림 사용 시 반복문 사용 시 성능이 떨어짐
- 가독성이 떨어질 수 있음
람다식 표현
1. 메서드의 이름과 반환 타입을 제거하고 ‘→’ 를 블록 {} 앞에 추가
2. 반환값이 있는 경우 식이나 값만 적고 return문 생략 가능( ; 생략)
3. 매개변수의 타입이 추론이 가능하면 생략 가능
주의사항
- 매개변수가 하나인 경우 괄호() 생략 가능(타입이 없는 경우)
- 블록 안의 문장이 하나뿐일 때 괄호{} 생략 가능(끝에 ; 생략)
- 하나뿐인 문장이 return문이면 괄호{} 생략 불가
- return문과 중괄호를 같이 생략 가능
@Functionallnterface
구현해야 할 추상 메소드가 하나만 정의된 인터페이스를 가리킴
- 인자 x, y를 받아들여 x + y를 리턴하는 람다식 만들기
//인자 x, y를 받아들여 x+y를 리턴하는 람다식 만들기 //함수형 인터페이스 @FunctionalInterface interface MyFunction { int calc(int x, int y); } public class LambdaEx { public LambdaEx() { // MyFunction f = new MyFunction() { // // @Override // public int calc(int x, int y) { // return x+y; // } // // }; MyFunction f1 = (x, y) -> {return x+y;}; System.out.println("f1의 결과: " + f1.calc(22, 100)); MyFunction f2 = (x, y) -> {return x-y;}; System.out.println("f2의 결과: " + f2.calc(99, 9)); } public static void main(String[] args) { new LambdaEx(); } } // 출력 결과 // f1의 결과 : 122 // f2의 결과 : 90
- 인자 x를 받아들여 제곱을 리턴하는 람다식 만들기
//인자 x를 받아들여 제곱을 리턴하는 람다식 만들기 //함수형 인터페이스 @FunctionalInterface interface Myfunction2 { int calc(int x); } public class LambdaEx2 { public LambdaEx2() { //Myfunction2 fsquare = (x) -> {return x*x;}; Myfunction2 fsquare = (x) -> {return x*x;}; System.out.println("fsquare의 결과: "+fsquare.calc(5)); } public static void main(String[] args) { new LambdaEx2(); } } // 출력 결과 // fsquare의 결과 : 25
- 매개변수가 없는 람다식 만들기
//매개변수가 없는 람다식 만들기 //함수형 인터페이스 @FunctionalInterface interface MyFunction3 { void print(); } public class LambdaEx3 { public LambdaEx3() { MyFunction3 fprint = () -> {System.out.println("Yoon's Dev");}; fprint.print(); } public static void main(String[] args) { new LambdaEx3(); } }
- 메서드의 인자로 람다식 전달
//메소드의 인자로 람다식 전달 //함수형 인터페이스 @FunctionalInterface interface MyFunction4 { int calc(int x, int y); } public class LambdaEx4 { //메소드 정의 (메소드의 인자로 람다식 전달) static void printMultiply(int x, int y, MyFunction4 f) { System.out.println("실행 결과: " + f.calc(x, y)); } public LambdaEx4() { printMultiply(100, 100, (x, y) -> {return x * y;}); } public static void main(String[] args) { new LambdaEx4(); } }
더블콜론(::)
- 메소드 레퍼런스라고도 불림
- 람다식과 같은 기능을 함
- 인스턴스를 활용하여 메소드를 전달함
List<String> list = List.of("Peter", "Thomas", "Edvard", "Gerhard");
// 람다식
list.forEach(item -> System.out.println(item));
// 더블콜론
list.forEach(System.out::println);
'Programming Language > JAVA' 카테고리의 다른 글
[JAVA] 지역 변수 & 전역 변수 & static(정적) 변수 (0) | 2023.08.15 |
---|---|
[JAVA] 인터페이스(interface) (0) | 2023.08.12 |
[JAVA] 가비지 컬렉션(Garbage Collection) (0) | 2023.08.01 |
[JAVA] JVM (0) | 2023.08.01 |
[JAVA] Stream(스트림) (0) | 2023.07.19 |