일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 스프링핵심원리
- 예제로 배우는 스프링 입문
- 이펙티브자바
- 알고리즘정렬
- 스프링
- 자바
- 클린아키텍처
- Effective Java 3
- kubernetes
- 카카오 면접
- 알고리즘
- 코딩테스트
- k8s
- java
- ElasticSearch
- 이펙티브 자바
- 카카오
- Spring
- Effective Java
- 스프링 핵심원리
- 김영한
- 오블완
- 이차전지관련주
- Sort
- 엘라스틱서치
- 티스토리챌린지
- JavaScript
- 스프링부트
- effectivejava
- 자바스크립트
- Today
- Total
Kim-Baek 개발자 이야기
함수형 인터페이스(Functional Interface) 완벽 가이드 본문
✅ 함수형 인터페이스란?
함수형 인터페이스(Functional Interface)란 "단 하나의 추상 메서드만 가지는 인터페이스" 를 의미합니다.
✔ 자바에서 람다 표현식(->)과 함께 사용하기 위해 만들어진 인터페이스
✔ 메서드가 1개만 있으므로, 람다식으로 쉽게 구현 가능
✔ @FunctionalInterface 어노테이션을 사용하면 컴파일러가 함수형 인터페이스인지 확인해줌
📌 대표적인 함수형 인터페이스 8가지
🚀 1️⃣ Function<T, R> (입력값을 변환하여 반환)
✔ 입력값 T를 받아서 R로 변환하는 함수
✔ 어떤 값을 입력받아서 변환하는 기능이 필요할 때 사용
✔ 예제: Integer → String 변환
Function<Integer, String> intToString = num -> "숫자: " + num;
System.out.println(intToString.apply(10)); // 결과: "숫자: 10"
🚀 2️⃣ UnaryOperator<T> (입력과 반환 타입이 같은 Function)
✔ 입력값과 반환값의 타입이 같은 Function<T, T>의 특수한 형태
✔ 입력값을 변형하지만 타입은 유지될 때 사용
✔ 예제: 문자열을 대문자로 변환
UnaryOperator<String> toUpperCase = str -> str.toUpperCase();
System.out.println(toUpperCase.apply("hello")); // 결과: "HELLO"
🚀 3️⃣ BinaryOperator<T> (두 개의 입력값을 받아 같은 타입으로 반환)
✔ BiFunction<T, T, T>와 동일하지만, 입력값과 반환값이 모두 같은 타입
✔ 두 개의 입력값을 조합하여 결과를 만드는 경우 사용
✔ 예제: 두 숫자의 합 계산
BinaryOperator<Integer> sum = (a, b) -> a + b;
System.out.println(sum.apply(3, 7)); // 결과: 10
🚀 4️⃣ BiFunction<T, U, R> (두 개의 입력값을 받아 변환)
✔ 서로 다른 타입의 두 개의 입력값을 받아서 새로운 결과(R)를 반환
✔ 예제: 문자열을 Integer 횟수만큼 반복
BiFunction<String, Integer, String> repeatString = (str, times) -> str.repeat(times);
System.out.println(repeatString.apply("Hello ", 3)); // 결과: "Hello Hello Hello "
🚀 5️⃣ Predicate<T> (입력값을 검사하여 true 또는 false 반환)
✔ 조건을 검사하여 true 또는 false를 반환하는 함수
✔ if 문을 줄이고 스트림에서 필터링할 때 유용
✔ 예제: 숫자가 짝수인지 확인
Predicate<Integer> isEven = num -> num % 2 == 0;
System.out.println(isEven.test(4)); // 결과: true
System.out.println(isEven.test(5)); // 결과: false
🚀 6️⃣ BiPredicate<T, U> (두 개의 입력값을 받아 true 또는 false 반환)
✔ 두 개의 입력값을 비교하여 true 또는 false를 반환하는 함수
✔ 예제: 두 개의 문자열이 같은지 비교
BiPredicate<String, String> isEqual = (s1, s2) -> s1.equals(s2);
System.out.println(isEqual.test("hello", "hello")); // 결과: true
System.out.println(isEqual.test("hello", "world")); // 결과: false
🚀 7️⃣ Supplier<T> (입력값 없이 값을 반환)
✔ 아무 입력값 없이 T 타입의 값을 반환하는 함수
✔ 예제: 랜덤 숫자 생성
Supplier<Double> randomNumber = () -> Math.random();
System.out.println(randomNumber.get()); // 결과: 랜덤 값 출력
🚀 8️⃣ Consumer<T> (입력값을 받아서 처리만 하고 반환값 없음)
✔ 입력값을 받아서 출력하거나 저장하는 등의 작업을 수행하지만, 결과를 반환하지 않음
✔ 예제: 메시지 출력
Consumer<String> printMessage = message -> System.out.println("출력: " + message);
printMessage.accept("Hello!"); // 결과: "출력: Hello!"
🚀 9️⃣ BiConsumer<T, U> (두 개의 입력값을 받아 처리, 반환값 없음)
✔ 입력값 두 개를 받아 작업을 수행하지만 반환값이 없음
✔ 예제: 두 개의 값을 받아 출력
BiConsumer<String, Integer> printUserInfo = (name, age) ->
System.out.println(name + "의 나이는 " + age + "살입니다.");
printUserInfo.accept("Alice", 25);
// 결과: "Alice의 나이는 25살입니다."
📌 함수형 인터페이스 쉽게 정리
함수형 인터페이스 역할 메서드 예제
Function<T, R> | 값을 변환하여 반환 | R apply(T t) | Integer -> String 변환 |
UnaryOperator<T> | 입력값을 변환 (타입 동일) | T apply(T t) | 문자열 대문자로 변환 |
BinaryOperator<T> | 두 개의 입력값을 받아 변환 (타입 동일) | T apply(T t1, T t2) | 숫자 덧셈 |
BiFunction<T, U, R> | 두 개의 입력값을 받아 변환 | R apply(T t, U u) | 문자열 반복 |
Predicate<T> | 조건 검사 후 true / false 반환 | boolean test(T t) | 짝수 여부 검사 |
BiPredicate<T, U> | 두 개의 값 비교 후 true / false 반환 | boolean test(T t, U u) | 문자열 비교 |
Supplier<T> | 입력 없이 값 반환 | T get() | 랜덤 숫자 생성 |
Consumer<T> | 값을 받아서 처리 (출력, 저장) | void accept(T t) | 메시지 출력 |
BiConsumer<T, U> | 두 개의 값을 받아서 처리 | void accept(T t, U u) | 사용자 정보 출력 |
📌 결론
✅ 함수형 인터페이스는 "하나의 메서드만 가진 인터페이스"로, 람다 표현식과 함께 사용하기 편리함!
✅ Function, Predicate, Supplier, Consumer가 가장 많이 쓰이는 대표적인 함수형 인터페이스
✅ 복잡한 for 문이나 if 문을 줄이고, stream()과 함께 사용하면 가독성이 좋아짐! 🚀
'개발 > java basic' 카테고리의 다른 글
CompletableFuture 란 무엇일까 (0) | 2024.11.26 |
---|---|
자바 리플렉션이란 (0) | 2024.11.24 |
리액티브 프로그래밍이란 (0) | 2024.11.17 |
제네릭 타입 소거 (컴파일/런타임) (0) | 2024.11.16 |
일급 컬렉션이란? (0) | 2024.11.13 |