ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] 람다 표현식
    Programming Language/Java & Kotlin 2019. 4. 15. 18:01
    반응형

    람다 표현식(lambda expression)

    • 람다 표현식이란 메소드를 하나의 식으로 표현한 것

      int min(int x, int y) {
        return x < y ? x : y;
      }
    • 람다 표현식

      (x, y) -> x < y ? x : y;
    • 메소드를 람다 표현식으로 표현하면, 클래스를 작성하고 객체를 생성하지 않아도 메소드를 사용할 수 있음

    • 자바에서는 클래스의 선언과 동시에 객체를 생성하므로, 단 하나의 객체만을 생성할 수 있는 클래스를 익명 클래스라고 함.

    • 자바에서 람다 표현식은 익명 클래스와 같다고 할 수 있음

      (x, y) -> x < y ? x : y;
    • 익명 클래스

      new Object() {
        int min(int x, int y) {
            return x < y ? x : y;
        }
      }
    • 람다 표현식은 메소드의 매개변수로 전달될 수도 있으며, 메소드의 결과값으로 반환될 수도 있음

    • 자바 SE 8부터는 람다 표현식을 사용하여 자바에서도 함수형 프로그래밍을 할 수 있음

    람다 표현식 작성

    • 자바에서는 화살표 기호 (->)를 사용하여 람다 표현식을 작성할 수 있음
    • (매개변수 목록) -> { 함수 몸체 }
    new Thread(new Runnable() {
        public void run() {
            System.out.println("전통적인 방식의 일회용 스레드 생성");
        }
    }).start();
    new Thread()->{
        System.out.println("람다 표현식을 사용한 일회용 스레드 생성");
    }).start();

    함수형 인터페이스 (functional interface)

    • 람다 표현식을 사용할 때는 람다 표현식을 저장하기 위한 참조 변수의 타입을 결정해야함
      참조변수의타입 참조변수의이름 = 람다 표현식
    • 람다 표현식을 하나의 변수에 대입할 때 사용하는 참조 변수의 타입을 함수형 인터페이스라고 부름
    • 함수형 인터페이스는 추상 클래스와는 달리 단 하나의 추상 메소드만을 가져야 함
    • 다음과 같은 어노테이션을 사용하여 함수형 인터페이스임을 명시할 수 있음
      @FunctionalInterface
    • 위와 같은 어노테이션을 인터페이스의 선언 앞에 붙이면, 컴파일러는 해당 인터페이스를 함수형 인터페이스로 인식함
    • 자바 컴파일러는 이렇게 명시된 함수형 인터페이스에 두 개 이상의 메소드가 선언되면 오류를 발생시킴
    • 함수형 인터페이스 선언하고 사용하기
    @FunctionalInterface
    interface Calc {    // 함수형 인터페이스 선언 
        public int min(int x, int y)
    }
    
    public class Lambda02 {
        public static void main(String[] args) {
            Calc minNum = (x, y) -> x < y ? x : y;    // 추상 메소드의 구현 
            System.out.println(minNum.min(3,4);     // 함수형 인터페이스의 사용
        }
    }
    • 자바는 java.util.function 패키지를 통해 여러 상황에서 사용할 수 있는 다양한 함수형 인터페이스를 미리 정의하여 제공함.
    반응형

    'Programming Language > Java & Kotlin' 카테고리의 다른 글

    [Java] 람다식  (0) 2019.06.13
    [Java] Enum 클래스  (0) 2019.04.18
    [Java] 스트림 API  (0) 2019.04.16
    [Java] StringBuffer  (1) 2018.12.01
    [Java] Java 배열 정렬  (0) 2018.11.27
Designed by Tistory.