익명함수(Anonymous Function)은 이름이 없는 함수로 일반적으로 일회성으로 사용되며, 코드 내에서 재사용할 필요가 없는 간단한 작업을 처리하기 위해 사용.
public class Main {
public static void main(String[] args) {
// 익명 클래스를 사용한 Runnable 구현
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("익명 클래스에서 실행");
}
};
// 쓰레드 실행
Thread thread = new Thread(runnable);
thread.start();
}
}
람다 표현식(Lambda Expression)은 함수형 프로그래밍 스타일을 Java에 도입한 기능으로, 익명 함수의 간결한 표현 방식.
함수형 인터페이스를 구현할 때 사용. 함수형 인터페이스란 하나의 추상 메서드만 가지는 인터페이스.
(매개변수) -> { 메서드 본문 }
public class Main {
public static void main(String[] args) {
// 람다 표현식으로 Runnable 구현
Runnable runnable = () -> System.out.println("람다에서 실행");
// 쓰레드 실행
Thread thread = new Thread(runnable);
thread.start();
}
}
ex)
함수형 인터페이스
import java.util.*;
public class Main {
public static void main(String[] args) {
List<String> list = Arrays.asList("apple", "banana", "cherry");
// 익명 클래스를 사용한 정렬
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.compareTo(s2);
}
});
System.out.println(list); // 출력: [apple, banana, cherry]
}
}
람다 표현식
import java.util.*;
public class Main {
public static void main(String[] args) {
List<String> list = Arrays.asList("apple", "banana", "cherry");
// 람다 표현식을 사용한 정렬
Collections.sort(list, (s1, s2) -> s1.compareTo(s2));
System.out.println(list); // 출력: [apple, banana, cherry]
}
}
람다 표현식의 Stream API 활용
import java.util.*;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
// 람다를 사용한 Stream 처리
numbers.stream()
.filter(n -> n % 2 == 0) // 짝수만 필터링
.forEach(n -> System.out.println(n)); // 출력: 2, 4
}
}
목표: GET /tasks 요청 시 완료된 Task만 반환.
Task 클래스:
public class Task {
private String name;
private boolean completed;
// 생성자, Getter/Setter
}
서비스 클래스:
@Service
public class TaskService {
public List<Task> getAllTasks() {
return List.of(
new Task("Study Java", true),
new Task("Learn Spring", false),
new Task("Practice Coding", true)
);
}
}
컨트롤러 클래스:
@RestController
@RequestMapping("/tasks")
public class TaskController {
@Autowired
private TaskService taskService;
@GetMapping
public List<Task> getCompletedTasks() {
return taskService.getAllTasks()
.stream()
.filter(Task::isCompleted) // 완료된 Task만 필터링
.collect(Collectors.toList());
}
}
궁금한 점이나 추가로 필요한 예제가 있으면 말씀해주세요! 😊