람다 표현식 (lambda-expression)

Agnes Park·2022년 3월 13일
0

JAVA

목록 보기
31/34

1. 람다 표현식: lambda-expression

  • Java8 부터 도입:
    (매개변수 리스트) -> 리턴값
    (매개변수 리스트) -> {...} 수행코드
  • 추상메소드가 하나인 인터페이스 구현, 즉 익명클래스사용 더 간략화한 표현식
package com.lec.java.lambda01;

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):
    () -> 수행코드
    () -> 리턴값
    (매개변수..) -> 수행코드
    (매개변수..) -> 리턴값
  • 매개변수의 타입은 생략해서 표현이 가능
  • 매개변수가 여러개 있을 경우, 모든 매개변수의 타입을 생략해서 표현하거나, 모든 매개변수의 타입을 모두 다 표현해야 함.
package com.lec.java.lambda02;

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
		
		
		System.out.println("\n프로그램 종료");
	} // end main()

} // end class
package com.lec.java.lambda02;

interface Test01 {
	// 매개변수도 없고, 리턴값도 없는 추상메소드
	public abstract void testPrint();
	
} // end interface Test01


// TODO
package com.lec.java.lambda02;

interface Test02 {
	// 매개변수 있고, 리턴값 없는 추상메소드
	public abstract void testPrint(int num);
	
} // end interface Test02

// TODO
package com.lec.java.lambda02;

interface Test03 {
	// 매개변수 있고, 리턴값 있는 추상메소드
	public abstract int max(int n1, int n2);
	
} // end interface Test03


// TODO
package com.lec.java.lambda02;

interface Test04 {
	public abstract int myStrLen(String str);
	
} // end interface Test04


// TODO
package com.lec.java.lambda02;

interface Test05 {
	public abstract void PrintMax (double x, double y);
	
} // end interface Test05

// TODO

0개의 댓글