ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 람다식 설명 - 정리
    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를 사용하여 작성을 하게 되면, 선언형 프로그래밍 작성이 가능해져서 코드가 매우 가독성이 좋아지며, 추가적으로 중간 결과를 저장하기 위한 변수 등 없이 작성이 가능하다는 장점이 있다. 또한 데이터를 처리하는 로직이 명확하게 구분된다는 장점이 있다. 

Designed by Tistory.