자바 람다(Lambda)란? - 3부 실무에서 어떻게 사용할까?
8. 람다, 실무에서는 이렇게 사용합니다.
지금까지는 람다의 개념과 문법을 살펴봤습니다.
이번에는 실제 개발에서 자주 사용하는 예제를 몇 가지 살펴보겠습니다.
① 리스트 정렬 (sort)
람다를 가장 많이 접하는 곳 중 하나가 바로 sort()입니다.
기존에는 Comparator를 구현해야 했지만, 람다를 사용하면 비교 로직만 간단하게 작성할 수 있습니다.
기존 방식
List<Integer> list =
new ArrayList<>(List.of(5, 10, 3, 6, 1, 4, 9, 8, 7, 2));
list.sort(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1.compareTo(o2);
}
});람다 사용
list.sort((o1, o2) -> o1.compareTo(o2));비교해야 하는 핵심 로직만 남아 코드가 훨씬 간결해졌습니다.
② 리스트의 모든 요소 출력하기 (forEach)
리스트의 모든 요소를 하나씩 출력하는 경우에도 람다가 자주 사용됩니다.
기존 방식
List<String> fruits =
Arrays.asList("사과", "바나나", "포도");
for (String fruit : fruits) {
System.out.println(fruit);
}람다 사용
fruits.forEach(fruit ->
System.out.println(fruit));조금 더 익숙해지면 메서드 참조를 이용해 아래처럼 작성하기도 합니다.
fruits.forEach(System.out::println);③ 조건에 맞는 데이터만 조회하기 (filter)
Stream API와 람다는 함께 사용하는 경우가 많습니다.
예를 들어 "김"으로 시작하는 이름만 출력하고 싶다면 다음과 같이 작성할 수 있습니다.
List<String> names =
Arrays.asList("김철수", "이영희", "김민수", "박지성");
names.stream()
.filter(name -> name.startsWith("김"))
.forEach(System.out::println);filter()는 조건에 맞는 데이터만 통과시키는 역할을 합니다.
④ 데이터를 다른 형태로 변환하기 (map)
map()은 데이터를 다른 값으로 변환할 때 자주 사용됩니다.
예를 들어 문자열을 모두 대문자로 변환하려면 다음과 같이 작성할 수 있습니다.
List<String> upperNames =
names.stream()
.map(String::toUpperCase)
.toList();기존 데이터를 변경하는 것이 아니라, 새로운 데이터를 만들어 반환합니다.
⑤ 조건에 맞는 요소 제거하기 (removeIf)
조건에 맞는 데이터를 삭제할 때도 람다가 사용됩니다.
List<Integer> numbers =
new ArrayList<>(List.of(1,2,3,4,5,6));
numbers.removeIf(number -> number % 2 == 0);
System.out.println(numbers);실행 결과
[1, 3, 5]짝수만 제거되고 홀수만 남게 됩니다.
⑥ 새로운 스레드(Thread) 만들기
람다는 Runnable을 구현할 때도 자주 사용됩니다.
기존 방식
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("작업 시작");
}
});
thread.start();람다 사용
Thread thread =
new Thread(() -> System.out.println("작업 시작"));
thread.start();익명 클래스를 작성하지 않아도 되므로 코드가 훨씬 간결해집니다.
정리
람다는 다양한 곳에서 활용되지만, 실제로 가장 자주 만나게 되는 메서드는 아래 정도입니다.
메서드 | 주요 용도 |
|---|---|
sort() | 리스트 정렬 |
forEach() | 반복 처리 |
filter() | 조건에 맞는 데이터 조회 |
map() | 데이터 변환 |
removeIf() | 조건에 맞는 데이터 삭제 |
Runnable | 스레드 작업 정의 |
처음에는 문법보다도 "어떤 상황에서 람다가 사용되는지"를 익히는 것이 더 중요합니다.
실제 프로젝트에서도 위와 같은 형태를 가장 자주 접하게 될 것입니다.