자바(Java)에서 정말 많이 사용하게 되는 인터페이스가 있다. 바로 함수형 인터페이스(Functional Interface)다.
이번 포스팅에서는 함수형 인터페이스에 대해서 알아보자.
함수형 인터페이스 Functional Interface
함수형 인터페이스는 Java 8에서 도입된 중요한 개념 중 하나이다. 함수형 인터페이스는 하나의 추상 메서드만을 가지는 인터페이스로, 자바에서 함수형 프로그래밍을 지원하는 데 사용된다. 이 개념은 람다 표현식 및 스트림 API와 같은 자바 8의 기능이 함께 사용된다.
함수형 인터페이스의 주요 특징과 목적은 다음과 같다
단 하나의 추상 메서드
함수형 인터페이스는 반드시 하나의 추상 메서드만을 가진다. 그 외 디폴트 메서드(default method)나 정적 메서드(static method)는 여러 개 가질 수 있지만, 추상 메서드는 오직 하나여야 한다.
람다 표현식
함수형 인터페이스는 람다 표현식을 통해 인스턴스화 할 수 있다. 이를 통해 함수를 변수로 저장하고 전달할 수 있으므로, 함수형 프로그래밍 스타일의 코드를 작성할 수 있다.
스트림(Stream) API와 함께 사용
자바 8의 스트림(Stream) API는 함수형 인터페이스와 함께 사용하여 데이터 컬렉션을 처리하는 데 유용하다. 예를 들어, 컬렉션의 요소를 필터링, 매핑, 정렬하는 등의 작업을 간결하게 처리할 수 있다.
함수형 인터페이스는 자바에서 더 간결하고 가독성 있는 코드를 작성하는 데 도움이 된다. 'java.util.function' 패키지에는 자주 사용되는 다양한 함수형 인터페이스가 포함되어 있으며, 이를 사용하여 함수형 스타일의 코드를 작성할 수 있다. 몇 가지 주요 함수형 인터페이스의 예는 다음과 같다.
- Consumer<T>: 인자를 받아서 어떤 동작을 수행하는 함수를 나타낸다.
- Supplier<T>: 어떤 값을 제공하는 함수를 나타낸다.
- Function<T, R>: 하나의 인자를 받아서 다른 타입과 결과를 반환하는 함수를 나타낸다.
- Predicate<T>: 인자를 받아서 조건을 검사하여 논리값을 반환하는 함수를 나타낸다.
함수형 인터페이스 예제
간단한 예제로 함수형 인터페이스를 사용하는 방법을 알아보자. 우선 함수형 인터페이스 하나를 만들어 보자.
@FunctionalInterface
public interface PrintFunction<T> {
void println(T value);
}
함수형 인터페이스임을 알리는 '@FuntionalInterface' 어노테이션을 붙여주고 추상 메서드 하나를 만들어 준다. 이 메서드는 제너릭으로 되어 있으며 'print' 메서드를 가지고 있고, 출력할 인자를 받는다.
public class FunctionalMain {
public static void main(String[] args) {
PrintFunction<String> printer = value -> System.out.println(value);
printer.println("함수형 인터페이스 출력!");
}
}
메인메서드에서 함수형 인터페이스를 선언할 때 사용 방법은 () -> () 형태로 만들어 준다. 인자 하나를 받아서 처리할 구문을 작성한다. 이 식은 람다 표현식으로도 더 간단하게 줄일 수 있다.
public class FunctionalMain {
public static void main(String[] args) {
PrintFunction<String> printer = System.out::println;
printer.println("함수형 인터페이스 출력!");
}
}
함수형 인터페이스는 특히 스트림 API를 처리하는데 자주 사용된다. 현재 자바에서는 스트림 API와 함수형 인터페이스, 그리고 람다 표현식까지 매우 자주 사용되니 필히 익숙해져야 할 필요가 있다.
'쿤즈 Dev > Java' 카테고리의 다른 글
[Java] 예외 처리 Exception (0) | 2023.09.24 |
---|---|
[Java] 람다 표현식 Lambda Expression (0) | 2023.09.23 |
[Java] 어노테이션(Annotation) 사용 방법 (0) | 2023.09.21 |
[Java] 열거형(Enum) 클래스로 활용하기 (0) | 2023.09.20 |
[Java] 열거형(Enum) 사용하기 (0) | 2023.09.19 |
댓글