함수형 인터페이스

지식저장공간·2023년 3월 16일
0

Java

목록 보기
16/18
post-thumbnail

함수형 인터페이스

정의

자바 8에서 도입된 함수형 인터페이스란, @FuntionalInterface를 인터페이스에 명명함으로써 생성할 수 있다.

함수형 인터페이스는 추상 메소드가 반드시 1개 작성해야하며, 추상 메소드를 0개 또는 2개이상 선언할 경우 컴파일러가 체크하여 에러를 발생시킨다.

추상메소드 외 default 메소드 또는 static 메소드는 선언 가능하다.

종류

함수형 인터페이스는 크게 5가지로 Predicate, Consumer , Supplier , Function , Comparator 존재한다.

@FunctionalInterface
interface Calculator{
    int method(int a, int b);
}

public class Main {
    public static void main(String[] args) {
    
        Calculator sum = (x,y) -> {
            return x+y;
        };

        Calculator sub = (x,y) -> {
            return x-y;
        };

        Calculator multi = (x,y) -> {
            return x*y;
        };

        System.out.println(sum.method(10,20)); //30
        System.out.println(sub.method(30,5)); //25
        System.out.println(multi.method(10, 10)); //100
    }
}

람다식을 이용하여 함수형 인터페이스를 구현할 수 있다.
구현 후 인터페이스내에 존재하는 메서드는 람다로 구현한 방법에 의해 메서드가 동작한다.

Predicate

Predicate의 test() 메서드는 인자를 받고 boolean을 리턴해준다.

@FunctionalInterface
public interface Predicate<T> {
	boolean test(T t);
    // abstract 메서드는 항상 1개여야한다.
    // abstract test()메서드 외 여러가지 default 메서드와 static메서드가 존재한다.
    // T -> boolean
}

Consumer

Consumer의 accept() 메서드는 인자를 받고 리턴값이 없다.

@FunctionalInterface
interface Consumer{

	void accept(T t);
    // T -> void
}

Supplier

Supplier의 get() 메서드는 인자를 받지 않지만, T 타입 객체를 리턴한다.

@FunctionalInterface
public interface Supplier<T> {

    /**
     * Gets a result.
     * @return a result
     */
     
    T get();
    // () -> T

Function

Function의 apply() 메서드는 T 타입 객체를 인자로 받고 R 타입 객체를 리턴한다.

@FunctionalInterface
public interface Function<T, R> {

    /**
     * Applies this function to the given argument.
     * @param t the function argument
     * @return the function result
     */
     
    R apply(T t);
    // T -> R

Comparator

Comparator compare() 메서드는 T 타입 객체를 인자로 받고, 두 인자를 비교한다.
o1<o2 : 음수, o1==o2 : 0, o1>o2 : 양수

/**
* Params:
* o1 – the first object to be compared. o2 – the second object to be compared.
* 
* Returns:
* a negative integer, zero, or a positive integer 
* as the first argument is less *than, equal to, or greater than the second.
*/

@FunctionalInterface
interface Comparator{

	int compare(T o1, T o2);
    // (T,T) -> int
}

출처 : 어라운드 허브 스튜디오

profile
발전하는 개발자가 꿈입니다. 지식을 쌓고 지식을 활용해 목표 달성을 추구합니다.

0개의 댓글