PHpullh
학습 라이브러리/Java/UnaryOperator와 특화 함수형 인터페이스

JAVA · 람다/메서드

UnaryOperator와 특화 함수형 인터페이스

UnaryOperator, IntFunction 등 특화 인터페이스로 오토박싱을 피합니다.

람다/메서드중급UnaryOperatorIntFunction특화인터페이스오토박싱

핵심 설명

UnaryOperator, IntFunction 등 특화 인터페이스로 오토박싱을 피합니다.

Java code

import java.util.*;
import java.util.function.*;

public class SpecializedFunctions {
    public static void main(String[] args) {
        // UnaryOperator<T> — 같은 타입 변환
        UnaryOperator<String> exclaim = s -> s + "!";
        System.out.println(exclaim.apply("Hello")); // Hello!

        // List.replaceAll에서 활용
        List<String> words = new ArrayList<>(
            List.of("hello", "world"));
        words.replaceAll(String::toUpperCase);
        System.out.println(words); // [HELLO, WORLD]

        // 원시 타입 특화 — 오토박싱 방지
        IntUnaryOperator doubleIt = n -> n * 2;
        IntPredicate isEven = n -> n % 2 == 0;
        IntConsumer printInt = System.out::println;
        IntSupplier randomInt = () -> (int)(Math.random() * 100);

        // IntStream과 함께
        java.util.stream.IntStream.range(1, 6)
            .map(doubleIt)
            .filter(isEven)
            .forEach(printInt);

        // ToIntFunction — 객체를 int로 변환
        ToIntFunction<String> strLen = String::length;
        System.out.println(strLen.applyAsInt("Java")); // 4
    }
}

학습 팁

원시 타입 스트림(IntStream 등)에서는 반드시 원시 타입 특화 함수형 인터페이스를 사용하세요. 오토박싱 비용을 제거합니다.

주의할 점

Function<Integer, Integer> 대신 IntUnaryOperator를 써야 오토박싱이 발생하지 않습니다.

자주 묻는 질문

UnaryOperator와 특화 함수형 인터페이스란 무엇인가요?

UnaryOperator , IntFunction 등 특화 인터페이스로 오토박싱을 피합니다.

UnaryOperator와 특화 함수형 인터페이스 학습 시 주의할 점은 무엇인가요?

Function&lt;Integer, Integer&gt; 대신 IntUnaryOperator 를 써야 오토박싱이 발생하지 않습니다.