자바 람다(Lambda)란? - 3부 실무에서 어떻게 사용할까?

청록비
1 read

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

스레드 작업 정의

처음에는 문법보다도 "어떤 상황에서 람다가 사용되는지"를 익히는 것이 더 중요합니다.

실제 프로젝트에서도 위와 같은 형태를 가장 자주 접하게 될 것입니다.


출처 및 참고 자료

#Cloud#Infrastructure#Serverless#Tech2024