-
람다식 설명 - 정리IT 공부 독서 정리/Java의 정석 2024. 12. 1. 19:52
람다식 코드의 사용이 가능해졌다.
람다식이란 객체지향인 java언어에 함수형 프로그래밍을 지원하기 위해 추가된 개념이다.
아래는 기존 자바 코드와 람다식 코드를 비교해 본 결과이다.
정렬을 위해 Comparator 인터페이스를 사용한 코드
import java.util.Arrays; import java.util.Comparator; public class LambdaExample { public static void main(String[] args) { // 문자열 배열 생성 String[] names = {"A", "B", "C", "D"}; // Arrays.sort를 사용하여 문자열 배열을 길이로 정렬 Arrays.sort(names, new Comparator<String>() { @Override public int compare(String s1, String s2) { return Integer.compare(s1.length(), s2.length()); } }); // 정렬된 배열 출력 for (String name : names) { System.out.println(name); } } }
람다 표현식을 활용한 코드
import java.util.Arrays; public class LambdaExample { public static void main(String[] args) { // 문자열 배열 생성 String[] names = {"A", "B", "C", "D"}; // 람다 표현식을 사용하여 문자열 배열을 길이로 정렬 Arrays.sort(names, (s1, s2) -> Integer.compare(s1.length(), s2.length())); // 정렬된 배열 출력 for (String name : names) { System.out.println(name); } } }
람다식의 이해
- 장점:
- 코드 간결성 및 가독성 향상: 소스 코드를 매우 간결하게 작성할 수 있어 전체적인 가독성이 높아집니다.
- 작성 시간 단축: 코드가 간결하므로 개발 시간이 단축됩니다.
- 유지보수 용이성: 간결한 코드는 유지보수 측면에서도 유리합니다.
- 단점:
- 복잡한 코드의 가독성 저하: 간결함 때문에 복잡한 로직을 람다식으로 작성할 경우 오히려 가독성이 떨어질 수 있습니다.
결론
- 가독성 향상을 위한 선택지 추가: 람다식은 소스코드의 가독성을 높일 수 있는 새로운 방법론을 제공합니다.
- 개발자의 적절한 활용 중요: 개발자는 람다식과 기존 방식을 적절히 조합하여 가독성이 뛰어난 코드를 개발할 수 있습니다.
2. 스트림 API의 사용이 가능해졌다.
스트림 API란 컬렉션(Collection) 또는 배열과 같은 데이터를 효율적으로 처리할 수 있도록 도와주는 데이터 처리 파이프라인이다.
스트림 API의 특징은 아래와 같다.
- 데이터 흐름 중심:
- 데이터 소스(컬렉션, 배열 등)에서 한 방향으로 데이터를 처리하는 연속적인 작업 흐름을 제공
- 함수형 프로그래밍 스타일:
- 람다 표현식과 함께 사용하여 코드를 간결하게 작성할 수 있다.
- 불변성을 유지하며, 데이터를 변경하지 않고 새로운 데이터 흐름을 생성한다.
- 중간 연산과 최종 연산:
- 중간 연산(Intermediate Operation): 데이터를 변환하거나 필터링
- 최종 연산(Terminal Operation): 데이터를 집계하거나 출력
- 지연 연산(Lazy Evaluation):
- 중간 연산은 결과를 즉시 계산하지 않고, 최종 연산이 호출될 때 실행되어, 성능 최적화를 할 수 있다.
- 병렬 처리 지원:
- parallelStream()을 사용하면 데이터를 병렬로 처리하여 멀티코어 CPU의 성능을 극대화할 수 있다.
아래는 스트림 API를 사용하지 않은 코드이다.
import java.util.ArrayList; import java.util.Collections; import java.util.List; public class WithoutStream { public static void main(String[] args) { List<String> names = List.of("Alice", "Bob", "Charlie", "Anna", "Amanda"); // 필터링 결과를 저장할 리스트 생성 List<String> filteredNames = new ArrayList<>(); for (String name : names) { if (name.startsWith("A")) { filteredNames.add(name.toUpperCase()); } } // 정렬 Collections.sort(filteredNames); // 출력 for (String name : filteredNames) { System.out.println(name); } } }
위 코드를 보면 명령형 프로그램이 스타일로 작성이 되어 있으며, 반복문과 조건문들이 명시적으로 작성되어 있어, 코드의 길이가 길고 가독성이 떨어진다는 단점이 있으며, 정렬된 결과를 저장하기 위한 List변수가 필요하다는 단점이 존재한다.
import java.util.List; public class WithStream { public static void main(String[] args) { List<String> names = List.of("Alice", "Bob", "Charlie", "Anna", "Amanda"); names.stream() .filter(name -> name.startsWith("A")) // 조건 필터링 .map(String::toUpperCase) // 대문자로 변환 .sorted() // 정렬 .forEach(System.out::println); // 출력 } }
하지만, 위와 같이 Stream API를 사용하여 작성을 하게 되면, 선언형 프로그래밍 작성이 가능해져서 코드가 매우 가독성이 좋아지며, 추가적으로 중간 결과를 저장하기 위한 변수 등 없이 작성이 가능하다는 장점이 있다. 또한 데이터를 처리하는 로직이 명확하게 구분된다는 장점이 있다.
'IT 공부 독서 정리 > Java의 정석' 카테고리의 다른 글
자바의 정석 Chapter 2 - 형식화된 출력 및 입력 (8) 2025.03.16 자바의 정석 Chapter 2.2 - 변수의 타입 (Data Type) (0) 2025.01.31 자바의 정석 Chapter 2.1 - 변수 (Variable) (7) 2025.01.26 자바의 정석 Chapter 1 - 자바 개발환경 구축하기 [MAC] (8) 2024.12.01 자바의 정석 Chapter 1 - 자바를 시작하기 전에.... [자바 역사 / 구조 ] (19) 2024.11.09 - 장점: