java Lambda, Functional Interface, Stream

labbiel·2025년 5월 13일

자바

목록 보기
9/9
post-thumbnail

Java Lambda, 함수형 인터페이스, Stream

목차
1. 람다식
2. 함수형 인터페이스
3. Stream

람다식 (Lambda Expression)

자바 8에서 새롭게 도입된 익명 함수입니다.

특징

  1. 함수 이름이 없는 익명 함수입니다.
  2. 코드가 간결하고 가독성 증가합니다.
  3. 컬렉션(List, Map, Set) 처리에 유용합니다.
  4. Stream API와 함께 자주 사용됩니다.
  5. 병렬 처리가 가능합니다. (parallelStream)
  6. 주로 함수형 인터페이스에서 사용됩니다.

📌 예제 (기존 방식 vs 람다식)

interface MyFunction {
    public int max(int a, int b);
}

public class Test {
    public static void main(String[] args) {
        // 1. 익명 클래스 사용
        MyFunction mf1 = new MyFunction() {
            public int max(int a, int b) {
                return a > b ? a : b;
            }
        };

        // 2. 람다식 사용
        MyFunction mf2 = (a, b) -> a > b ? a : b;

        System.out.println(mf2.max(5, 10));  // 출력: 10
    }
}

함수형 인터페이스 (Functional Interface)

함수형 인터페이스는 단 하나의 추상 메서드만 가지는 인터페이스입니다.

Java에서 제공하는 대표 인터페이스

인터페이스매개변수반환값메서드설명
Runnable없음없음run()쓰레드 작업 등
Consumer있음없음accept(T t)소비용 (출력 등)
Supplier없음있음get()공급용 (값 제공)
Function<T, R>있음있음apply(T t)입력 → 출력 변환
Predicate있음booleantest(T t)조건 판단 (true/false)

함수형 인터페이스는 @FunctionalInterface 애너테이션을 붙여 명시적으로 선언할 수 있습니다.


Collection Stream

자바에서 컬렉션을 처리하는 현대적인 방식입니다.

특징

  1. Stream은 일회용입니다.
  2. 재사용하려면 다시 생성 필요합니다.
  3. 병렬 처리가 쉽습니다. (parallelStream())
  4. 내부 반복으로 코드 간결화가 가능합니다. (forEach 등)

📌 예제 1 – 배열 스트림 처리

int[] numbers = {1, 2, 3, 4, 5};

Arrays.stream(numbers).forEach(number -> System.out.println(number));

📌 예제 2 – List 컬렉션 처리

List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
names.add("Charlie");

names.forEach(name -> System.out.println(name));

0개의 댓글