JAVA Programming

Growing_HJ·2024년 6월 5일

일기장

목록 보기
19/51

2024.06.05. WED <D + 16> , Lambda
A. Lambda , 람다
A-1. 람다의 장점
1. 간결하고 이해가 쉬움
2. 람다식 자체로 메소드의 역할을 대신함.
3. 메소드의 매개변수로 람다식을 사용할 수 있음.
A-2. 코드상의 람다.
기존 코드)

int method() {
	return (int)(Math.random() * 5) + 1 + i;
}

람다를 사용한 코드)

(int i)  - (int)(Math.random() * 5) + 1 + i;
  • 기존 함수의 반환타입, 메소드 명을 제거.
  • 매개변수와 몸통의 실행코드 사이에 '->' 를 삽입.

A-3. 다양한 람다식의 형태

  • 반환값이 있는 메소드의 경우, return문 대신에 "식"으로 대신할 수 있음.
    따라서 식의 연산결과가 자동적으로 반환된다고 생각하면 됨.
    그래서, 식이므로 끝에 ";" 를 붙이지 않음.
  • 람다식에서 매개변수의 타입이 없다면, 생략된 것이라고 생각하면 됨.
    추론이 가능하므로 대부분 생략이 됨.
 - 1. 기존 메소드 형태 
   int max(int a, int b) {
   	return a > b ? a : b; // 기존 형
   }
 - 람다식 형태
   (int a, int b) -> {return a > b? a : b;} //return  
   (int a, int b) -> a > b ? a : b // 3항식으로 식임. ; <- 제거
   (a, b) -> a > b ? a : b;
   
 - 2. 기존 메소드 형태 
   void printVar(String name, int i) {
   	System.out.println(name + "=" + i);
   }
 - 람다식 형태 
   ( String name, int i) -> {System.out.println(name + "=" + i);}
   (name, i) -> System.out.println(name + "=" + i)
  
 - 3. 기존 메소드 형태 
   int square(int x) {
   	return x * x;
  } 
  - 람다식 형태 
  (int x) -> {return x * x;}
    x -> x * x
    
- 4. 기존 메소드 형태 
   int roll() {
   	return (int)(Math.random)*6);
   }
- 람다식 형태 
   () -> {return (int)(Math.random() * 6);}
   () -> (int)(Math.random() * 6)
     
 - 5. 기존 메소드 형태
  int sumArr (int[] arr) {
  	int sum = 0;
 	for(int i : arr){
 		sum += i;
 		}	
  	 return sum;
  }    
 - 람다식 형태 
  (int[] arr) -> {int sum = 0;
  					for(int i : arr)
  						sum +=i ;
 					return sum;}
@FunctionalInterface
interface MyFunc {
	public abstract void run();
}

public class LambdaEx1 {
	// 메인에서 사용해야 하니 static으로 작성, 
	// 함수형 인터페이스를 매개변수로 활용하는 메소드 생성하기.
	static void execute(MyFunc f) {
		f.run();
	}
	// 함수형 인터페이스를 반환형으로 하는 메소드 생성하기
	static MyFunc getMyFunc() {
		MyFunc f = () -> System.out.println("f3.run()");
		return f;
	}
	public static void main(String[] args) {
		// case 1. 함수형 인터페이스로 람다식 선언하기.
		MyFunc f1 = () -> System.out.println("f3.run()");
		
		//case2. 익명클래스 형태의 함수형 인터페이스 구현하기
		MyFunc f2 = new MyFunc() {
			
			@Override
			public void run() {
				// TODO Auto-generated method stub
				System.out.println("f2.run");
			}
		};
		// case3. getMyFunc() 사용하기
		MyFunc f3 = getMyFunc();
		
		// case4. 매개변수 execute() 사용하기.
		// case4.1 . 함수형 인터페이스를 매개변수로 전달하는 방법
		execute(f1);
		
		// case4.2 . 함수형 인터페이스 없이 직접 람다식으로 전달하는 방법
		execute(() -> System.out.println("run"));
		
		f1.run();
		f2.run();
		f3.run();
	}
}

0개의 댓글