자바

자바 람다식 java Consumer , Supplier, Function 함수적 인터페이스

알통몬_ 2017. 3. 19. 18:59
반응형


안녕하세요 알통몬입니다.

공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^

 

표준 API에서 한 개의 추상 메소드를 가진 인터페이스들은 모두 다 람다식을 이용해

익명 구현 객체로 표현 가능합니다.

스레드 작업을 정의하는 Runnable 인터페이스는 매개 변수와 리턴값이 없는

run()메소드만 존재하기 때문에 람다식을 이용할 수 있습니다.

ex)

public class Example {

    public static void main(String[] args) {

        Runnable r = () -> {

            System.out.print("a");

        };

    Thread t = new Thread(r);

    t.start();

    // 또는 아래처럼도 사용가능

    /*

    Thread t = new Thread( () -> {

        System.out.print("a");

    });

    t.start();

    */

}


자바 8부터 빈번하게 사용되는 함수적 인터페이스는 java.util.function 표준 API패키지로 제공합니다. 

이 패키지에서 제공하는 함수적 인터페이스의 목적은  

메서드 또는 생성자의 매개 타입으로 사용되어 람다식을 대입할 수 있도록 하기 위함 입니다. 

자바 8부터 추가되었거나 변경된 API에서 이 함수적 인터페이스들을 매개 타입으로 많이 사용합니다. 

물론 자체적으로 개발하는 메서드에도 이 함수적 인터페이스들을 매객 타입으로 사용할 수 있습니다.

 java.util.function 패키지의 함수적 인터페이스는 

크게 Consumer, Supplier, Function, Operator, Predicate로 구분됩니다. 

구분 기준은 인터페이스에 선언된 추상 메서드의 매개값과 리턴값의 유무입니다.


그럼 이제 5가지 표준 API 함수적 인터페이스에 대해 하나씩 알아보겠습니다.


1. Consumer

리턴값이 없는 accept()를 가지고 있음.

accept()는 매개값을 사용하는 역할을 함.

매개변수 타입, 수에 따라 아래와 같은 Consumer들이 있음.


예제)


2. Supplier

매개 변수는 없고 리턴값이 있는 getXXX()를 가지고 있고

이 메소드들은 실행 후 호촐한 곳으로 데이터를 공급(리턴)하는 역할을 함.


예제)


3. Function

매개값과 리턴값이 있는 applyXXX()를 가지고 있음.

위 메서드들은 매개값을 리턴값으로 타입변환(매핑)하는 역할을 함


Function<T,R>인터페이스를 타겟 타입으로하는 람다식은 아래처럼 작성가능.

 apply()는 매개값으로 T객체 하나를 가지기 때문에 람다식도 한개의 매개 변수를 사용. 

apply() 의 리턴타입이 R이므로 람다식 중괄호 {} 리턴값은 R 객체가 됨.

 T 가 Student이고 R이 Strung 타입이므로 t 매개 변수 타입은 Student가 되고, 

람다식의 중괄호 {} 는 String으 리턴해야 합니다.

Function<Student, String> function = t -> {return t.getName(); }

or

Function<Student, String> function = t -> return t.getName();

 

사용 예제1) 

List에 저장된 학생 객체를 하나씩 꺼내서 이름과 점수를 출력합니다.

printString()는 Function<Student, String> 매개 변수를 가지고, printInt()는

ToIntFunction<student> 매개변수를 가지므로 이 메소드들을 호출할 때 람다식을 사용할 수 있음.

이상입니다.

다음 포스팅에서 이어서 공부하겠습니다.

반응형