람다(Lambda)
📌 람다(Lambda)의 장점
① 코드 줄일 수 있음.
② 가독성이 뛰어남.
📌 람다식(Lambda Expression)
: 대입 연산자 오른편에 위치한 것.
Printable prn = (s) -> { System.out.println(s); };
📌 람다 연산자 : ->
📌 람다식은 함수형 인터페이스를 기반으로만 작성할 수 있음.
💡 함수형 인터페이스(Functional Interfaces)
: 추상 메소드 하나만 가지는 인터페이스.
💡 람다와 익명 클래스는 내부적인 동작 원리가 다름 .
📄 LambdaAnonymousClassTest.java
package lambda;
interface Printable {
void print(String s);
}
public class LambdaAnonymousClassTest {
public static void main(String[] args) {
Printable prn = new Printable() { // 익명 클래스.
public void print(String s) {
System.out.println(s);
}
};
prn.print("Hello"); // Hello
}
}
📄 LambdaTest.java
package lambda;
interface Printable {
void print(String s);
}
public class LambdaTest {
public static void main(String[] args) {
Printable prn = (s) -> { System.out.println(s); };
prn.print("hello"); // hello
}
}
+ 추가 설명
더보기
- LambdaAnonymousClassTest.java와 LambdaTest.java은 같은 작업을 하는 코드.
: LambdaAnonymousClassTest.java는 익명 클래스를,
LambdaTest.java는 람다를 사용한 것.
람다(Lambda) - 매개변수가 있고 반환하지 않는 람다식
📄 ParamNoReturnLambdaTest.java
package lambda;
interface Printable {
void print(String s);
}
public class ParamNoReturnLambdaTest {
public static void main(String[] args) {
Printable p;
p = (String s) -> { System.out.println(s); }; // 줄임 없음.
p.print("1"); // 1
p = (String s) -> System.out.println(s); // 중괄호 생략.
p.print("2"); // 2
p = (s) -> System.out.println(s); // 매개변수 형 생략.
p.print("3"); // 3
p = s -> System.out.println(s); // 매개변수 소괄호 생략.
p.print("4"); // 4
}
}
람다(Lambda) - 매개변수가 있고 반환하는 람다식
📄 ParamReturnLambdaTest.java
package lambda;
interface Calculate {
int cal(int a, int b);
}
public class ParamReturnLambdaTest {
public static void main(String[] args) {
Calculate c;
c = (a, b) -> { return a + b; };
System.out.println(c.cal(5, 2)); // 7
c = (a, b) -> a + b;
System.out.println(c.cal(5, 2)); // 7
}
}
람다(Lambda) - 매개변수가 없는 람다식
📄 NoParamLambdaTest.java
package lambda;
import java.util.Random;
interface Generator {
int rand();
}
public class NoParamLambdaTest {
public static void main(String[] args) {
Generator gen = () -> {
Random rand = new Random();
return rand.nextInt(10);
};
System.out.println(gen.rand()); // 1
}
}
'Java > Java' 카테고리의 다른 글
[Java] 스트림 (0) | 2022.10.21 |
---|---|
[Java] 함수형 인터페이스(Functional Interfaces) (0) | 2022.10.20 |
[Java] 네스티드 클래스(Nested Class)와 이너 클래스(Inner Class) (0) | 2022.10.20 |
[Java] 컬렉션 프레임워크 - Map<K, V> 인터페이스 (0) | 2022.10.18 |
[Java] 컬렉션 프레임워크 - Queue<E> 인터페이스 (0) | 2022.10.18 |
댓글