JAVA8 람다 - asloud/dev_note01 GitHub Wiki

1. 람다

  • 식별자 없이 실행 가능한 함수 표현식 (이름 없이 구현체만 있는 인터페이스???)
  • 그동안 익명 내부 클래스로 인터페이스의 메소드를 구현하는 짓을 편하게 할 수 있다!!
  • 람다 작성방법
    • 가장 단순한 방법 : (변수 명세) -> 처리코드
    • 구현부가 여러줄인 경우 '{}'로 감싼다 : (변수 명세) -> { 여러줄의 처리코드 }
    • 파라미터를 갖지 않으면 빈 괄호 : () -> {처리코드}
    • 람다 표현식이 파라미터 타입을 추론할 수 있다면 파라미터 타입 생략 가능
    • 파라미터가 한 개인 경우 '()' 생략 가능
    • 람다 표현식의 결과 타입은 명시하지 않는다. 컴파일러가 결과 타입을 추론.
    • (String first, String second) -> first.length() - second.length()
    • Runnable task = () -> { for(int i=0; i<1000; i++) doWork(); }
  • 람다는 Runnable이나 Comparator 처럼 액션을 표현하는 인터페이스와 호환
  • 예)
    String[] words = {"111", "22", "3", "44444"};
    Arrays.sort(words, (String first, String second) -> first.length() - second.length());
    

2. 람다 표현식 처리

  • 지연실행 : 람다를 사용하는 핵심 목적
    • 별도의 스레드에서 코드 실행
    • 코드를 여러 번 실행
    • 알고리즘의 올바른 지점에서 코드 실행
    • 어느 이벤트 시점에서 코드 실행
    • 필요할 때만 코드 실행
  • 표준 함수형 인터페이스 중에서 알맞을 것을 사용하는게 좋다고 함
  • 필요할 경우 함수형 인터페이스 생성하여 사용
  • @FunctionalInterface 어노테이션 붙여서 컴파일러가 추상 메소드가 하나만 있는지 확인하도록 한다.
  • 작성 중
  • 람다, stream, 메소드 참조을 잘 알아야...