java lambda 람다표현식

2023. 6. 8. 11:10기타

  • 람다 표현식: 선언 없이 실행 가능한 함수 → 코드 1줄에 함수를 사용해 호출하는 방식으로 사용함으로써, 간결한 코딩이 가능하다.
  • 특징 : ‘일급 객체’ → 다른 객체들에 적용 가능한 연산을 모두 지원하는 객체
  • 표현식 : (매개변수) → {실행문}
// (1) 파라미터가 없는 경우 : () 생략이 불가능하다.
() -> expression
  
// (2) 싱글 파라미터(매개변수)의 경우 : ()를 생략 가능하다.
param -> expression
(param) -> expression

// (3) 2개 이상의 파라키터(매개변수)를 받는 경우 : ()생략이 불가능하다.
(param1, param2) -> expression

// (4-1) 리턴값을 받는 경우 - code line 2줄 이상
(param1, param2) -> {   int x = 0;
												if(param1 > param2)  x = param1 - param2
												else x = param2 - param1;
												return x;
										}

// (4-2) 리턴값을 받는 경우 - code line 1줄(only return관련된 코드줄만 있는 경우)
// -> 'return'과 함께 {} 생략 가능
(param1, param2) -> { return param1 + param2; }
(param1, param2) -> param1 + param2;
  • 함수형 인터페이스( @FunctionalInterface ) : 구현해야 할 추상 메소드가 ‘딱 1개’만 정의된 인터페이스
@FuncionalInterface
interface Math{
	public int Calc(int x, int y);
}
public static void main(String[] args){
		Math plus = (first, second) -> first + second
		System.out.println("plus return : " + plus.Calc(1,2));    // 결과 | plus return : 3

		Math minus = (first, second) -> first - second
		System.out.println("minus return : " + minus.Calc(2,1));   // 결과 | minus return : 1
}
  • Java의 Functinal Interface

(1) Consumer : 1개의 param → 0개의 return

<aside> ▫️ Cosumer<T> → void accept(T t);

</aside>

(2) Supplier : 0개의 param → 1개의 return

<aside> ▫️ Supplier<T> → T get();

</aside>

(3) Function : 1개의 param → 1개의 return

<aside> ▫️ Function<T, R> → R apply(T t);

</aside>

  • 예시 코드..
public static void main(String args[]){
			
		Member member = new Member();
		member.setId(1);
		member.setName("길동");         // 원래는 Entity에 바로 set해서 사용하면 안되지만.. 예시를 위해...
		
		// (1) Consumer
		Consumer<Member> consumer1 = m -> System.out.println;
		Consumer<Member> consumer2 = m -> System.out.println("Consumer = " + m.getName() );
		consumer1.accept(member);  // 결과 | Member(id=1, name=길동)
		consumer2.accept(member);  // 결과 | Consumer = 길동

		// (2) Supplier
		Supplier<Member> supplier = () -> member;
		// -> return 생략하지 않으면, 'Supplier<Member> supplier = () -> {return member;};'와 같이 작성 가능하다.
		System.out.println("Supplier = " + supplier.get().getName());   // 결과 | Supplier = 길동

		// (3) Function
		Function<Member, String> function = m -> m.getName();
		String memberName = function.apply(member);
		System.out.println("Function : " + memberName);   // 결과 | Function = 길동

}

'기타' 카테고리의 다른 글

ajax blob 타입 받기  (0) 2023.09.26
Optional<T>  (0) 2023.06.08
intellj 단축기 정리 (windows)  (0) 2023.04.12