[인프런 워밍업 클럽]BE 세번째 과제 - 람다식

hyungjunn·2024년 2월 21일
0
post-thumbnail

자바의 람다식은 왜 등장했을까?

람다 표현식은 더 많은 기능적 프로그래밍 기능을 수용하기 위한 언어 발전의 일부로 Java 8에 도입되었다. 역사적으로 Java는 주로 객체 지향 프로그래밍 언어였으며 동작이나 작업을 인수로 전달하는 것과 같은 특정 작업은 매우 복잡했다. 람다 표현식의 도입으로 다음과 같은 몇 가지 문제가 해결됐다.

  1. 코드 단순화: 람다 식 이전에는 유사한 기능을 하려면 익명 클래스가 필요했다. 람다 표현식을 사용하면 더 간결하고 읽기 쉬운 코드 작성이 가능해진다.

  2. 향상된 컬렉션 처리: 특히 컬렉션 작업에 혁신을 가져왔다. 필터링, 매핑 또는 컬렉션 축소와 같은 작업이 더욱 간소화되었다.

  3. 병렬 처리: Java 8의 람다와 함께 Streams API가 도입되면서 병렬화할 수 있는 코드를 작성하는 것이 더 쉬워졌으며 특히 멀티 코어 환경에서 성능이 향상되었다.

람다식과 익명 클래스는 어떤 관계가 있을까?

람다 표현식과 익명 클래스는 공통 목적을 가지고 있다. 이를 통해 전체 클래스를 생성하지 않고도 기능 인터페이스의 구현을 인라인으로 정의할 수 있다. 그러나 다음과 같은 주요 차이점이 있다.

  • 간결성: 람다 표현식은 익명 클래스보다 훨씬 간결하다.

  • 사용법: 익명 클래스는 여러 추상 메서드가 있는 인터페이스를 구현할 수 있지만 람다 식은 기능적 인터페이스(단일 추상 메서드가 있는 인터페이스)에만 사용된다.

  • 범위: 람다 표현식은 바깥쪽 블록과 동일한 범위를 갖는 반면, 익명 클래스는 자체 범위를 갖는다.

  • this 키워드: 람다 식에서 this는 바깥쪽 클래스를 참조하는 반면, 익명 클래스에서 this는 익명 클래스 자체를 참조한다.

각각의 사용 시기

  • 짧고 기능적인 인터페이스 구현에는 람다 표현식을 사용

  • 더 복잡한 구현을 원하거나 여러 메서드가 포함된 인터페이스를 구현해야 하는 경우 익명 클래스를 사용

람다식의 문법은 어떻게 될까?

Java의 람다 표현식은 다음 구문을 사용하여 작성된다.

(parameters) -> { body }
  1. 매개변수: 메소드와 마찬가지로 0개, 1개 또는 여러 개의 매개변수를 사용할 수 있다.

  2. 화살표 토큰(->): 매개변수를 본문과 분리한다.

  3. 본문: 실행할 표현식이나 문을 포함한다.

forEach와 함께 Lambda expression 사용

List<String> names = Arrays.asList("Alice", "Bobo", "Charlie");
names.forEach(name -> System.out.println(name));

비교

List<Integer> numbers = Arrays.asList(3, 1, 4, 1, 5, 9);
numbers.sort((n1, n2) -> n1.compareTo(n2));

Runnable 사용

Runnable runnable = () -> System.out.println("쓰레드가 실행 중입니다.");
new Thread(runnable).start();

컬렉션 필터링

List<String> words = Arrays.asList("Java", "Lambda", "Stream", "API");
words.stream()
     .filter(word -> word.startsWith("L"))
     .forEach(System.out::println);

map과 함께

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.stream()
       .map(number -> number * number) // 각 숫자를 제곱
       .forEach(System.out::println); // 출력

Optional과 함께

Optional<String> optionalString = Optional.of("Java");
optionalString.ifPresent(str -> System.out.println("Value: " + str));

참고

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]의 세번째 과제

0개의 댓글