반응형

람다
람다식은 함수형 인터페이스(추상 메서드가 하나인 인터페이스)의 인스턴스를 간결하게 표현하는 방법이다.
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
}
}

반응형
'JAVA' 카테고리의 다른 글
태태개발일지 - 김영한 고급JAVA (LAMBDA) (1) | 2025.05.26 |
---|---|
태태개발일지 - JAVA 고급편(3) 김영한 람다 (1) | 2025.05.05 |
태태개발일지 - JAVA 고급편(3) 김영한 람다 (1) | 2025.05.02 |
태태코딩 - 람다(김영한 실전자바 고급 3편) (1) | 2025.04.27 |
태태개발일지 - 고급 java (김영한) 컬랙션 동시성 (1) | 2025.03.19 |