본문 바로가기

java

람다 정리

람다표현식 - 메서드로 전할할 수 있는 익명 함수를 단순화한 것


람다 특징

익명 : 보통의 메서드와 달리 이름이 없음으로 익명이라 표현

함수 : 특정 클래스에 종속되지 않으므로 함수라고 부름

전달 : 메서드 인수로 전달하거나 변수로 저장가능

간결성 : 익명 클래스처럼 자질구레하게 구현할 필요 없음



 Comparator<Apple> byWeghtLamda = (Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight());

 파라미터 리스트

  - 파라미터 (두 개의 사과)

  화살표

   - 람다의 파라미터 리스트와 바디를 구분

   람다의 바디

   - 두 사과의 무개를 비교, 반홤값에 해당하는 표현식

   

  자바 8에서 지원하는 람다 5가지 표현

  

 (String s) -> s.length(); // String 형식의 파라미터를 가지며 int를 반환. 람다 표현식에서는 return이 함축되어 return을 명시적으로 안 사용해도 된다

 (Apple a) -> a.getWeight() > 150; 

 (int x, int y) -> {  // int 형식 파라미터를 가지며 리턴이 없다 

System.out.println("Result:");

System.out.println(x + y);

  }


  () -> 42;

  (Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight())

  

  

  람다 예제와 사용 사례 리스트

  불린 표현식 - (List<String> list) -> list.isEmpty();

  객체 생성   - () -> new Apple(10)

  객체에서 소비 - (Apple a) -> { System.out.println(a.getWeight());

  객체에서 선택/추출 (String s) -> s.length()

  두 값을 조합 (int a, int b) -> a * b

  두 객체 비교 (Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight())

  

  

 함수형 인터페이스

  - 정확히 하나의 추상 메서드를 지정하는 인터페이스 

  

 함수 디스크립터

  - 시그니처를 서술하는 메서드

  

  

  @FunctionalInterface는?

   - 함수형 인터페이스를 가리키는 어노테이션

   - 어노테이션을 선언 했지만 실제로 함수형 인터페이스가 아니면 컴파일 에러 발생

   

   

   실행 어라운드 패턴 (execute around pattern)

   초기화/준비 코드     초기화/준비 코드

   작업A               작업B

   정리/마무리 코드     정리/마무리 코드

   

   

   Predicate

    - java.util.function.Predicate<T> 인터페이스는 test라는 추상 메서드를 정의하며 test는 제네릭 형식 T의 객체를 인수로 받아 불린을 반환

   Consumer

    - java.util.function.Consumer<T> 인터페이스는 제네링 형식 T 객체를 받아서 void를 반환하는 accept라는 추상 메서드를 저의

- T형식의 객체를 인수로 받아서 어떤 동작을 수행하고 싶을때 사용

Function

 - java.util.function.Function<T, R>인터페이스는 제네릭 형식 T를 인수로 받아서 제네릭 형식 R을 반환하는 apply 라는 추상 메서드를 정의

 - 입력을 출력으로 매핑하는 람다를 정의할 때 Function 인터페이스를 활용

 

'java' 카테고리의 다른 글

Queue는 무엇인가?  (0) 2017.11.15
배열과 리스트  (0) 2017.11.15
Java HashMap동작 원리  (0) 2017.10.16
ClassLoader  (0) 2017.10.14
GabageCollector  (0) 2017.10.14