Spring(2023-05-04)

권단비·2023년 5월 4일
0

IT

목록 보기
131/139

[Lambda 람다]

import java.util.Random;

@FunctionalInterface
interface Printable {
	public abstract void print(String s);
}

/*
 * class Printer implements Printable{
 * 
 * @Override public void print(String s) -> { System.out.println(s); } }
 */
//람다 :  ->  파라미터 와 함수 본체 사이
//자바에서의 람다는 기본적으로 인터레이스 구현
//람다 구현을 위한 인터페이스는 기본적으로 반시 추상함수가 한개이여야함.
//람다를 위한 인터페이스란 의미의 @FunctionalInterface 을 제공

// 1)매개변수가 있고 반환하지 않는 람다식
// 2)매개변수가 두개인 람다식
@FunctionalInterface
interface Calculate {
	void cal(int a, int b); // 매개변수 둘, 반환형 void
}

///매개변수가 있고 반환하는 람다식1
@FunctionalInterface
interface Calculate2 {
	int cal(int a, int b); // 매개변수 둘, 반환형 void
}

@FunctionalInterface
interface HowLong {
	int len(String s); // 값을 반환하는 메소드 | 매개변수가 있고 반환하는 람다식2
}

@FunctionalInterface
interface Generator {
	int rand(); // 매개변수가 없는 메소드
}

//함수에 람다함수 전달
//@FunctionalInterface
//interface HowLong {
//	int len(String s); // 값을 반환하는 메소드 | 매개변수가 있고 반환하는 람다식2
//}

//람다식과 제네릭
interface Calculate3<T> {
	T cal(T a, T b); // 제네릭 기반의 함수형 인터페이스
}

public class LambdaExample {
	public static void getHowLong(HowLong howLong, String s) {
		System.out.println(howLong.len(s));
	}

	public static void main(String args[]) {
		Calculate3<Integer> ci = (a, b) -> a + b;// <T> 제네릭에 Integer가 들어감
		System.out.println(ci.cal(10, 20)); // 30 출력

		ci = (a, b) -> a * b;
		System.out.println(ci.cal(10, 20)); // 200 출력

		getHowLong(s -> s.length(), "안녕하세요.안녕하세요"); // 함수에 람다함수 전달 | 문자길이 출력

		Generator gen = () -> {
			Random rand = new Random();
			return rand.nextInt(50); // 0~49까지 랜덤 숫자 출력
		};
		System.out.println(gen.rand());

		HowLong how = s -> s.length();

		System.out.println(how.len("안녕하세요ㄴㅇㅀ")); // 8 출력

		Calculate2 cal2;

		cal2 = (a, b) -> {
			return a + b;
		}; // return문의 중괄호는 생략 불가!
		System.out.println(cal2.cal(3, 4)); // 7 출력

		cal2 = (a, b) -> a + b; //
		System.out.println(cal2.cal(3, 4)); // 7 출력

		Calculate cal;

		cal = (a, b) -> System.out.println(a + b);
		cal.cal(4, 3); // 7 출력

		cal = (a, b) -> System.out.println(a - b);
		cal.cal(4, 3); // 1 출력

		cal = (a, b) -> System.out.println(a * b);
		cal.cal(4, 3); // 12 출력

		Printable prn = (String s) -> {
			System.out.println(s);
		};
		prn.print("메롱 ~~~");

		prn = (s) -> {
			System.out.println(s);
		};
		prn.print("메롱 ~~~");

		prn = s -> {
			System.out.println(s);
		};
		prn.print("메롱 ~~~");

		prn = s -> System.out.println(s);
		prn.print("메롱 ~~~");

		System.out.println("난 기억나지롷 메롱...");
	}
}

0개의 댓글