JAVA

[JAVA] 람다 표현식

shb 2022. 2. 18. 17:58

람다 표현식: lambda-expression
  Java8 부터 도입:
(매개변수 리스트) -> 리턴값
(매개변수 리스트) -> {...}  수행코드

추상메소드가 하나인 인터페이스 구현, 즉 익명클래스 사용 더 간략화한 표현식

package com.lec.java.lambda01;

/* 람다 표현식: lambda-expression
 	Java8 부터 도입:
		(매개변수 리스트) -> 리턴값
		(매개변수 리스트) -> {...}  수행코드

	추상메소드가 하나인 인터페이스 구현, 즉 익명클래스사용 더 간략화한 표현식
 */
public class Lambda01Main {

	public static void main(String[] args) {
		System.out.println("인터페이스, 익명 클래스, 람다 표현식");
		
		System.out.println();
		System.out.println("[1] 인터페이스를 구현하는 클래스");
		
		Addable myAdder = new AdderImple();
		double result = myAdder.add(1.11, 2.22);
		System.out.println("result = " + result);
				
		System.out.println();
		System.out.println("[2] 익명 클래스 사용");
		Addable myAdder2 = new Addable() {
			
			@Override
			public double add(double x, double y) {
				return x + y;
			}
		};
		result = myAdder2.add(1.11, 2.22);
		System.out.println("result = " + result);
		
		System.out.println();
		System.out.println("[3] 람다 표현식(lambda expression) 사용");
		
		Addable myAdder3 = (a, b) -> a + b;
		result = myAdder3.add(1.11, 2.22);
		System.out.println("result = " + result);
		
		System.out.println("\n프로그램 종료");
	} // end main()
	
} // end class

//인터페이스 정의
interface Addable {
	public abstract double add(double x, double y);
}

//인터페이스를 구현하는 클래스를 정의
class AdderImple implements Addable {

	@Override
	public double add(double x, double y) {
		return x + y;
	}
	
}

람다 표현식 (lambda - expression): 
  () -> 수행코드
  () -> 리턴값
  (매개변수..) -> 수행코드
  (매개변수..) -> 리턴값
 
 매개변수의 타입은 생략해서 표현이 가능
 매개변수가 여러개 있을 경우,
 모든 매개변수의 타입을 생략해서 표현하거나,
 모든 매개변수의 타입을 모두 다 표현해야 함.

 

public class Lambda02Main {

	public static void main(String[] args) {
		System.out.println("익명 클래스, 람다 표현식 연습");
		
		// 매개변수 없고, 리턴값도 없는 경우
		Test01 lambda01 = () -> System.out.println("안녕하세요");
		lambda01.testPrint();
		
		// 매개변수 한개, 리턴값은 없는 경우
		Test02 lambda02 = (x) -> System.out.println("num = " + x);
		lambda02.testPrint(55);
		
		// 매개변수 여러개, 리턴값이 있슴.
		Test03 lambda03 = (x, y) -> (x > y) ? x : y;
		System.out.println("result = " + lambda03.max(10, 20));
		
		// 매개변수 한개, 내부 수행코드 여러줄.., 리턴값.
		Test04 lambda04 = (x) -> {
			System.out.println(x); 
			return x.length();
		};
		int result = lambda04.myStrLen("Java");
		System.out.println("result = " + result);
		
		// Test05 인터페이스 만들기
		// void printMax(double x, double y)
		Test05 lambda05 = (x, y) -> {
			System.out.println("x = " + x);
			System.out.println("y = " + y);
			if(x > y) {
				System.out.println(x + " > " + y);
			} else {
				System.out.println(x + " <= " + y);
			}
		};
		
		
		// [실행]
		// .printMax(3.14, 1.2) 
		lambda05.printMax(3.14, 1.2);
		
		// [출력양식 예제]
		// x = 3.14
		// y = 1.2
	    // 3.14 > 1.2
		// TODO

		
		System.out.println("\n프로그램 종료");
	} // end main()

} // end class

 

'JAVA' 카테고리의 다른 글

[JAVA] 파일 입출력  (0) 2022.02.22
[JAVA] 쓰레드  (0) 2022.02.18
[JAVA] 내부 클래스  (0) 2022.02.17
[JAVA] Collection  (0) 2022.02.17
[JAVA] Wrapper 클래스  (0) 2022.02.17