Java -16

김정현·2024년 5월 1일
0

JAVA

목록 보기
18/25

람다식

람다식이란?

- 메서드(함수)를 하나의 식으로 표현

- 함수형 프로그래밍(일등 함수)
함수 == 변수 / 함수가 값으로 사용

	- 함수란?
		- 하나의 기능(단일기능)
		
	- 함수는 값으로 사용
		- 매개변수 : 사용자 정의 가능
		- 반환값 : 참고) 자바스크립트 - 클로저, 새로운 함수를 만드는 함수인 팩토리 함수
		
자바는 함수는 값으로 사용 불가
	- 인터페이스의 객체가 되는 조건을 이용
	- 형식을 단순화 
names.forEach(new Consumer<String>() {
   @Override
   public void accept(String s) {
       		 System.out.println(s);
           }
      });
      
      ==
      
names.forEach(s -> System.out.println(s));
  • 람다식 문법 살펴보기

    메서드를 하나의 식으로 짧게 표현한 문법
    용도가 제한적이므로 굳이 길게 작성 X
1) 접근 제어자, 반환값 타입, 함수명을 생략 
2) 매개변수 정의 부분과 함수 구현 부분({ }) 사이에 -> 추가 
3) 매개변수의 자료형 생략 가능 
4) 구현코드가 한줄일때는 { ... } 생략 가능, return 예약어도 생략 해야 된다.
5) 최대한 짧게 쓰는 방향(변수명도 한 글자로 하는 것이 권장)
  1. 람다식 사용하기
public interface Calculator {
    int add(int num1, int num2);
}

위 인터페이스를 객체화 할때,

public class Ex02 {
    public static void main(String[] args) {
        Calculator cal = new Calculator() {
            @Override
            public int add(int num1, int num2) {
                return num1 + num2;
            }
        };
    }
}

이렇게 생성하지만 람다식을 사용하면

public class Ex02 {
    public static void main(String[] args) {
        Calculator cal = (a, b) -> a + b;
    }
}

간단하게 표현이 가능하다.

  1. 함수형 인터페이스(Functional Interface)
    : 단일 기능, 단일 역할, 형식상 제한 조건

  2. 함수형 인터페이스 타입의 매개변수와 반환 타입
    ->명확한 형식 제어를 위한 애노테이션
    @FuntionalInterface

  3. java.util.function패키지
    :자주 사용하는 함수 유형의 인터페이스 정의

1) 매개변수가 X, 반환값 1개
Supplier<T>
: T get()

2) 매개변수가 1개, 반환값 0개
Consumer<T>
: void accept(T t)

3) 매개변수가 1개 반환값도 1개
Function<T,R>
: R apply(T t)

4) 매개변수가 1개, 반환값은 boolean(논리값)
Predicate<T>
: boolean test(T t)

매개변수 2개

1) 매개변수가 2개, 반환값 X
BiConsumer<T, U>
: void accept(T t, U u)

2) 매개변수가 2개, 반환값 1개
BiFunction<T,U,R>
: R apply(T t, U u)

3) 매개변수가 2개, 반환값 boolean
BiPredicate<T, U>
: boolean test(T t, U u)

  • 매개변수가1, 반환값1 -> 자료형이 모두 동일
    UnaryOperator<T> ---> Function<T, T>
    T apply(T t)
  • 매개변수가 2개, 반환값1 -> 자료형이 모두 동일
    BinaryOperator<T> ---> BiFunction<T, T, T>
    T apply(T t1, T t2)

기본형 타입의 함수형 인터페이스

ex) DoubleToLongFunction
-double : 매개변수 타입
-long : 반환값 타입

ToIntFunction<T>
-int : 반환값 타입
-T : 매개변수 타입

IntFunction<R>
int : 매개변수 타입
R : 반환값 타입

  1. Function의 합성과 Predicate의 결합

    함수 결합

    Function
    andThen(Function ... )
    f.andThen(g) -> f -> g

    compose(..)
    g.compose(f) -> f -> g

    Predicate : 조건식, 논리 연산과 관련
    and
    or
    negate

  2. 메서드 참조

    • 람다식을 더욱 간결하게 표현
    • 클래스명::메서드명
    • 참조변수::메서드명

0개의 댓글