함수형 인터페이스

maketheworldwise·2022년 3월 6일
0


이 글의 목적?

Java 7과 8에서 어떤 내용이 변경되었는지 알아보았는데, Java 8에서 함수형 인터페이스가 추가되었다는 것을 확인할 수 있었다. 그리고 함수형 인터페이스에는 대표적으로 Predicate, Supplier, Consumer가 있는데 이에 대해 정리해보고자 한다.

함수형 인터페이스?

다시 한번 함수형 인터페이스가 무엇인지 알아보자. 💪🏻

함수형 인터페이스는 단 하나의 추상 메소드만을 가지는 인터페이스를 의미한다. @FunctionalInterface 어노테이션으로 명시적으로 선언한다. 어노테이션이 굳이 필요는 없으나 유지보수나 인터페이스 검증 - 즉, 하위 호환성을 보장하기 위해서이다.

(함수형 인터페이스를 이용하는 이유는 람다식을 사용하기 위해서! 람다는 불필요한 코드 감소, 가독성 증가, 함수를 만드는 과정이 없이 한번에 처리가 가능하기에 생산성 향상, 병렬 프로그래밍에 용이해서 사용!)

Predicate

@FunctionalInterface
public interface Predicate<T> {
	boolean test(T t);
}
Predicate<Apple> predicate = (Apple a) -> "green".equals(a.getColor());
cs

test() 메소드가 존재하며, "예측"이라는 의미를 담고있어서 혼동될 수 있으나, 두 개의 객체를 비교할 때 사용하고 Boolean을 반환한다. 그 외에도 and(), negate(), or()라는 기본 메소드가 구현되어있고, isEqual()이라는 static 메소드가 있다.

Supplier

@FunctionalInterface
public interface Supplier<T> {
    T accept();
}
Supplier<People> supplier = () -> {
    People ret = new People();
    ret.setName("기본 이름 지정");
    return ret;
};

get() 메소드가 있고 반환값은 제네릭으로 선언된 타입을 반환한다. 다른 인터페이스들과는 다르게 추가적인 메소드는 선언되어 있지 않다.

입력 없이 출력만 있어서 공급자라는 이름을 적용했다고 한다. 파라미터 없이 리턴 타입만 있는 메소드는 주로 지정된 정보를 확인하거나 조회할 때 유용하게 사용된다.

Consumer

@FunctionalInterface
public interface Consumer<T> {
    void accept(T t);
}
People p = obj.createObject(10, "Kevin");
 
Consumer<People> cosumer = (People people) -> System.out.println(people.toString());
cosumer.accept(p);

accept()라는 매개 변수를 하나 갖는 메소드가 있으며, 반환값이 없다. 따라서 출력을 할 때처럼 작업을 수행하고 결과를 받을 일이 없을 때 사용한다. andThen()이라는 기본 메소드가 구현되어있는데, 순차적인 작업을 할 때 유용하게 사용할 수 있다.

입력받는 파라미터를 소비만 한다고 해서 이름이 Consumer라고 한다.

이 글의 레퍼런스

profile
세상을 현명하게 이끌어갈 나의 성장 일기 📓

0개의 댓글