언어/Java
6. Java 고급 문법 (2) 람다식과 Streams
뉴비2
2024. 11. 10. 19:29
Java 람다식과 스트림 API: 현대적인 함수형 프로그래밍 기법
람다식이란 무엇인가?
람다식은 익명 함수를 간결하게 표현하는 방법입니다. 기존의 복잡한 메서드 정의 대신 더 간단하고 직관적인 방식으로 함수를 표현할 수 있게 해줍니다.
람다식의 기본 문법
(매개변수) -> { 실행 코드 }
주요 특징:
- 이름 없는 메서드
- 코드를 간결하게 만들어줌
- 함수를 변수처럼 다룰 수 있음
람다식 예제
// 기존 방식
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("Hello World");
}
};
// 람다식으로 변환
Runnable lambdaRunnable = () -> System.out.println("Hello World");
스트림 API: 데이터 처리의 혁명
스트림 API는 컬렉션을 효율적으로 처리하기 위한 Java 8의 혁신적인 기능입니다.
스트림의 주요 특징
- 내부 반복: 외부 반복 대신 내부에서 반복 처리
- 지연 연산: 필요한 시점에만 연산 수행
- 병렬 처리 지원:
parallelStream()
을 통한 쉬운 병렬 처리
스트림 API 기본 사용법
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
// 스트림을 사용한 데이터 처리
List<String> filteredNames = names.stream()
.filter(name -> name.startsWith("A"))
.map(String::toUpperCase)
.collect(Collectors.toList());
오픈소스에서의 활용 예제
Apache Commons Lang의 람다 활용
// 컬렉션 변환 예제
List<String> transformedList = ListUtils.transformingList(
originalList,
name -> name.toUpperCase()
);
Spring Framework의 스트림 활용
// 객체 필터링 및 변환
List<User> activeUsers = userRepository.findAll().stream()
.filter(User::isActive)
.map(user -> new UserDTO(user))
.collect(Collectors.toList());
주의사항 및 최적화 방법
람다식 사용 시 주의점
- 과도한 사용 자제: 가독성을 해치지 않도록 주의
- 복잡한 로직은 피하기: 간단명료하게 작성
- 디버깅의 어려움: 익명 함수는 추적이 어려울 수 있음
스트림 API 최적화 팁
- 작은 데이터셋에서는 일반 반복문 고려
- 병렬 스트림은 신중하게 사용
- 중간 연산 최소화
// 비효율적인 예
list.stream()
.filter(x -> x > 10)
.map(x -> x * 2)
.filter(x -> x % 2 == 0)
.collect(Collectors.toList());
// 최적화된 예
list.stream()
.filter(x -> x > 10 && x % 2 == 0)
.map(x -> x * 2)
.collect(Collectors.toList());
결론
람다식과 스트림 API는 Java 프로그래밍을 더욱 간결하고 표현력 있게 만들어줍니다. 하지만 무분별한 사용보다는 상황에 맞는 현명한 적용이 중요합니다.