4-1. (2) Lambda (람다식)

zhyun·2020년 9월 21일
0

HighJava

목록 보기
21/67

☆ 함수적 인터페이스 => 추상메서드가 1개만 선언된 인터페이스

(1) 함수적 인터페이스1 => 반환값이 없고 매개변수도 없는 추상메서드 선언

// @ Func- 안붙으면 메서드가 여러개 가능하지만, 
//붙은 경우는 함수적 메서드면 추상메서드 1개
@FunctionalInterface 
public interface LambdaTestInterface1 {
	public void test();

}

(2) 함수적 인터페이스2 => 반환값이 없고 매개변수는 있는 추상메서드 선언

@FunctionalInterface
interface LambdaTestInterface2{
	public void test(int a);
	
}

(3) 함수적 인터페이스3 => 반환값도 있고 매개변수도 있는 추상메서드 선언

@FunctionalInterface
interface LambdaTestInterface3{
	public int test(int a, int b);
	
}

☆위 인터페이스 3개 활용한 메인메서드
☆람다식을 사용하지 않았을 경우 인터페이스로도 객체 생성 가능
☆단점: 클래스가 아니기때문에 interface로 객체를 만들어서 오버라이드 계속 해줘야댐

public class T02_LambdaTest {
	public static void main(String[] args) {
		LambdaTestInterface1 lam1 = new LambdaTestInterface1() { // 
			
			@Override
			public void test() {
				System.out.println("안녕하세요");
				System.out.println("익명구현 객체 방식입니다.");
			}
		};
		
		lam1.test(); //메서드 호출

☆람다식으로 처리하는 방법

		LambdaTestInterface1 lam2 = ()-> 
			System.out.println("반가워요\n람다식으로 처리하는 방식입니다.");
		
		lam2.test(); //메서드 호출
		
		System.out.println("----------------------------------------------");

☆람다식 작성 방법
☆기본형식) (자료형 이름 매개변수명, ...) -> {실행문들;...}

  1. 매개변수의 '자료형이름'은 생략할 수 있다.
    예) (int a) -> {System.out.println(a);}
    (a) -> {System.out.println(a);}
  1. 매개변수가 1개일 경우에는 괄호'()'를 생략할 수 있다.
    (단, '자료형 이름'을 지정할 경우에는 괄호를 생략할 수 없다.)
    예) a -> {System.out.println(a);}
  1. '실행문'이 1개일 경우에는 '{ }'를 생략할 수 있다.
    (이 때 문장의 끝을 나타내는 세미콜론(;)도 생략한다.)
    예) a-> System.out.println(a)
  1. 매개변수가 하나도 없으면 괄호 '( )'를 생략할 수 없다.
    예) () -> System.out.println(a)
  1. 반환값이 있을 경우에는 return명령을 사용한다.
    예) (a,b) -> {return a+b;}
    (a,b) -> return a+b;

  2. 실행문 return문만 있을 경우 return명령과 '{ }'를 생략할 수 있다.
    예) (a,b) -> a+b

		LambdaTestInterface2 lam3 =
				(int z) ->{ // 파라미터 1개
					int result = z+100;
					System.out.println("result = "+result); //130
				};
		lam3.test(30);
		---------------------------------------------------------------------
        
		LambdaTestInterface2 lam4 =
				 z -> { // z가 60 (int z) -> 매개변수 1개일때 생략 가능
					int result = z+300;
					System.out.println("result = "+result);//360
				};
		lam4.test(60);		
		---------------------------------------------------------------------
        
		LambdaTestInterface2 lam5 =
				z -> System.out.println("result ="+ (z+500));//590
		lam5.test(90);//z가 90		

		--------------------------------------------------------------------
		
		LambdaTestInterface3 lam6 =
				(int x, int y)->{ //(x,y)로 생략 가능
					int r = x+y;
					return r;
				};
		int k = lam6.test(20, 50);
		System.out.println("k = "+ k); //70
	        ------------------------------------------------------------------
		
		LambdaTestInterface3 lam7 =
				(x,y) -> {//(int x, int y)로 생략가능
					return x+y;	
				};
		k = lam7.test(80, 50);
		System.out.println("k = "+ k); //130
	        ------------------------------------------------------------------
		
		LambdaTestInterface3 lam8 =
				(x,y) -> x + y; // return 생략
		k= lam8.test(100, 200);
		System.out.println("k = "+ k);//300
		---------------------------------------------------------------------
        
		LambdaTestInterface3 lam9 =
				(x,y) -> {return x >y ? x:y;}; // 삼항 연산자 x >y ? x:y; 요러캐 생략가능
		k = lam9.test(100, 200);
		System.out.println("k = "+ k);//200
	}
}
profile
HI :)

0개의 댓글