JAVA

태태개발일지 - 김영한 자바 고급

태태코 2025. 5. 20. 17:32
반응형

람다

 

람다식은 함수형 인터페이스(추상 메서드가 하나인 인터페이스)의 인스턴스를 간결하게 표현하는 방법이다.
Java 8부터 도입된 기능으로, 코드의 길이를 줄이고 가독성을 높여줍니다.

람다는 메서드만 전달하며, 익명클래스보다 더 간단하게 함수 객체를 만들 수 있습니다. 단, 람다는 함수형 인터페이스에만 사용할 수 있고, this 키워드는 외부 클래스의 인스턴스를 참조합니다

 

익명클래스

 

익명클래스는 이름이 없는 클래스로, 주로 일회성으로 인터페이스나 추상클래스를 구현할 때 사용한다. 예를 들어, Comparator나 Runnable 같은 인터페이스를 구현할 때 별도의 클래스를 만들지 않고 코드 내에서 바로 정의할 수 있다.

익명클래스는 여러 메서드를 구현할 수 있고, 내부에 필드나 초기화 블록도 선언할 수 있다. 하지만 코드가 장황해지고 가독성이 떨어지는 단점이 있다.

선언 이름 없는 클래스 이름 없는 메서드
사용 가능 여러 추상 메서드, 필드 선언 가능 함수형 인터페이스(추상 메서드 1개)만 가능
코드 길이 상대적으로 길고 복잡 간결하고 읽기 쉬움
this 참조 익명클래스 인스턴스 외부 클래스 인스턴스
성능 런타임에 별도 클래스 생성, 성능 저하 가능 컴파일 타임에 처리, 성능 우수

 

 

람다인 Predicate<>와 Function<> 을 통해서  Map과 Filter를 Stream을 구현할 수 있다.

 

Stream은 체인형태를 통해서 람다의 간결함을 연속적으로 사용할 수 있다.

 

람다를 통하여 스트림 내부 원리 사용한 코드

import java.util.Arrays;
import java.util.List;

public class StreamExample {
    public static void main(String[] args) {
        List<String> fruits = Arrays.asList("apple", "banana", "cherry", "durian");

        // filter: 길이가 5 초과인 과일만 출력
        fruits.stream()
              .filter(fruit -> fruit.length() > 5)
              .forEach(System.out::println);
        // 출력: banana, cherry, durian

        // map: 모든 과일 이름을 대문자로 변환
        fruits.stream()
              .map(String::toUpperCase)
              .forEach(System.out::println);
        // 출력: APPLE, BANANA, CHERRY, DURIAN

        // sorted: 알파벳 순으로 정렬
        fruits.stream()
              .sorted()
              .forEach(System.out::println);
        // 출력: apple, banana, cherry, durian
    }
}

 

반응형