Home Lambda
Post
Cancel

Lambda

lambda

  • 람다는 관심을 받지 못하다가 최근 들어 함수적 프로그래밍이 병렬 처리와 이벤트 지향 프로그래밍에 적합하여 사용되고 있다.
  • 람다식은 익명 함수를 생성하기 위한 식으로 객체 지향 언어보다는 함수지향 언어에 가깝다.
  • 람다식을 사용할 경우 자바 코드가 매우 간결해지고, 컬랙션의 요소를 필터링하거나 매핑해서 원하는 결과를 쉽게 집계할 수 있다.

함수적 인터페이스(@FunctionalInterface)

1
2
3
4
@FunctionalInterface
public interface MyFunction {
    public void method();
}

위와 같이 구현하여 사용할 수 있다. @FunctionalInterface 어노테이션을 붙일경우 메서드를 2개 이상 만들수 없다. 컴파일 전단계에서 오류가 발생한다.

1
2
3
4
5
6
7
8
9
10
public class Main {
    public static void main(String[] args) {
        MyFunction myFunction = () -> {
            System.out.println("hello");
        };
        myFunction.method();


    }
}

위와 같이 람다식으로 구현하여 사용한다.

표준 API 의 함수적 인터페이스

andThen() compose()

  • 두 개의 함수적 인터페이스를 순차적으로 연결하고, 첫 번째 처리 결과를 두 번째 매개값으로 제공해서 최종 결과값을 얻을 때 사용한다.

  • andThen() :
    • ab = a.andThen(b);
    • a를 실행이후 결과값을 b의 인자로 사용하여 최종 결과를 출력
    • Consumer , Function , Operator 만 지원
  • compose() :
    • ab = a.compose(b);
    • b를 실행이후 결과값을 a의 인자로 사용하여 최종 결과를 출력
    • Function , Operator 만 지원

and(), or(), negate(), isEqual()

  • 리턴 값이 boolean인 Predicate의 디폴트 메서드이다.

  • and() :
    • 두 메서드가 true 일때 true
  • or() :
    • 두 메서드중 하나만 true 여도 true
  • negate() :
    • 결과 값이 반대인 predicate를 생성한다.
  • isEqual() :
    • 두 메서드의 결과 같을경우 true

::

  • 단순히 메서드를 매개값으로 전달하는 역할만 하는경우 사용할 수 있다.

매개 변수의 메서드 참조

  • class Address에 getCountry 매서드가 있을때 다음과 같이 사용할 수 있다.
1
2
3
  Function<Address, String> function = Address::getCountry;
  String result = function.apply(new Address("서울", "한국"));
  System.out.println(result);

생성자 참조

  • 생성자를 참조하여 사용할 수 있다.
    1
    2
    
    BiFunction<String,String,Address> function = Address::new;//인자가 2개이기 때문에 BiFunction
    Address address = function.apply("서울", "한국");
    
This post is licensed under CC BY 4.0 by the author.