PHpullh
학습 라이브러리/Java/SAM 변환과 함수형 프로그래밍

JAVA · 람다/메서드

SAM 변환과 함수형 프로그래밍

Single Abstract Method 인터페이스와 람다 변환 원리를 이해합니다.

람다/메서드고급SAM함수형인터페이스람다변환Runnable

핵심 설명

Single Abstract Method 인터페이스와 람다 변환 원리를 이해합니다.

Java code

import java.util.concurrent.*;

public class SAMConversion {
    // SAM 인터페이스 — 추상 메서드가 정확히 1개
    @FunctionalInterface
    interface Transformer<T> {
        T transform(T input);
    }

    // SAM 변환: 람다 -> 인터페이스 인스턴스
    static <T> T apply(T value, Transformer<T> t) {
        return t.transform(value);
    }

    public static void main(String[] args) {
        // 람다로 SAM 변환
        String result = apply("hello", String::toUpperCase);
        System.out.println(result); // HELLO

        // Runnable — SAM 인터페이스
        Runnable task = () -> System.out.println("실행");
        new Thread(task).start();

        // Callable — SAM 인터페이스
        Callable<Integer> calc = () -> 42;

        // Comparator — SAM 인터페이스 (equals 제외)
        java.util.List<String> list = new java.util.ArrayList<>(
            java.util.List.of("banana", "apple", "cherry"));
        list.sort(String::compareTo);
        System.out.println(list);

        // 기존 익명 클래스 -> 람다 변환
        // 기존: new Runnable() { public void run() { ... } }
        // 변환: () -> { ... }
    }
}

학습 팁

SAM 변환은 @FunctionalInterface 어노테이션 없이도 동작합니다. 다만 어노테이션을 붙이면 컴파일러가 검증해줍니다.

주의할 점

추상 메서드가 2개 이상인 인터페이스에는 람다를 사용할 수 없습니다. 익명 클래스를 사용해야 합니다.

자주 묻는 질문

SAM 변환과 함수형 프로그래밍란 무엇인가요?

Single Abstract Method 인터페이스와 람다 변환 원리를 이해합니다.

SAM 변환과 함수형 프로그래밍 학습 시 주의할 점은 무엇인가요?

추상 메서드가 2개 이상인 인터페이스에는 람다를 사용할 수 없습니다. 익명 클래스를 사용해야 합니다.