Java/Java

[Java] 람다(Lambda)

기록하는_사람 2022. 10. 20. 21:37

람다(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
	}

}