Java - 람다 표현식

c.Hano·2024년 12월 4일

자바

목록 보기
12/17

람다 표현식이란?

메서드를 하나의 식으로 표현한 것.
메서드 이름과 반환값이 없기 때문에 익명 함수(Anonymous Function)라고 하기도 한다.

기본 문법

(매개변수) -> { 실행할 코드 }

() -> {}
() -> 1
() -> { return 1; }

(int x) -> x+1
(x) -> x+1
x -> x+1
(int x) -> { return x+1; }
x -> { return x+1; }

(int x, int y) -> x+y
(x, y) -> x+y
(x, y) -> { return x+y; }

(String lam) -> lam.length()
lam -> lam.length()
(Thread lamT) -> { lamT.start(); }
lamT -> { lamT.start(); }


//잘못된 유형 선언된 type과 선언되지 않은 type을 같이 사용 할 수 없다.
(x, int y) -> x+y
(x, final y) -> x+y  
};
예제
///람다식 표현 전
public class LambdaExample {
    public static void main(String[] args) {
        // 1. 익명 클래스를 사용해 Runnable 구현
        Runnable task = new Runnable() {
            @Override
            public void run() {
                System.out.println("Task is running!");
            }
        };

        // 2. 스레드 실행
        new Thread(task).start();
        // Thread 클래스의 생성자에 Runnable을 전달해 스레드를 실행합니다.
    }
}
//람다식 표현 후
public class LambdaExample {
    public static void main(String[] args) {
        // 1. 람다 표현식을 사용해 Runnable 구현
        Runnable task = () -> System.out.println("Task is running!");
        // () -> System.out.println("Task is running!"): 매개변수가 없고 단일 문장을 실행하는 람다 표현식.

        // 2. 스레드 실행
        new Thread(task).start();
    }
}
//람다식 표현 전
import java.util.*;

public class LambdaExample {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie");

        // 1. 기본 for-each 루프를 사용해 요소 출력
        for (String name : names) {
            System.out.println(name);
        }
    }
}
//람다식 표현 후
import java.util.*;

public class LambdaExample {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie");

        // 1. 람다 표현식을 사용해 요소 출력
        names.forEach(name -> System.out.println(name));
        // name -> System.out.println(name): 리스트의 각 요소를 출력하는 람다 표현식.
    }
}
//람다식 표현 전
import java.util.*;

public class LambdaExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
        List<Integer> evens = new ArrayList<>();

        // 1. 기본 for-each 루프를 사용해 조건에 맞는 요소 필터링
        for (int number : numbers) {
            if (number % 2 == 0) { // 조건: 짝수인지 확인
                evens.add(number);
            }
        }

        // 2. 결과 출력
        System.out.println(evens); // 출력: [2, 4]
    }
}
//람다 식 표현 후
import java.util.*;
import java.util.stream.Collectors;

public class LambdaExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

        // 1. 스트림과 람다 표현식을 사용해 조건에 맞는 요소 필터링
        List<Integer> evens = numbers.stream()          // 스트림 생성
                                     .filter(n -> n % 2 == 0) // 조건: 짝수인지 확인
                                     .collect(Collectors.toList()); // 결과를 리스트로 수집

        // 2. 결과 출력
        System.out.println(evens); // 출력: [2, 4]
    }
}
람다 표현식의 장점
  • 간결성 : 코드 길이가 짧아지고 가독성이 향상된다.
  • 익명성 : 불필요한 메서드 이름 선언을 피할 수 있다.
  • 유연성 : 함수형 인터페이스와 결합해 재사용성이 높아진다.
profile
꼬질이

0개의 댓글