[ 학습목표 ]
- 람다식의 기본 문법과 사용 이유를 이해한다.
- 함수형 인터페이스를 알아본다.
- 스트림(Stream)을 이용한 컬렉션 처리 방법을 학습한다.
- 기존의 for문/if문을 더 간결한 코드로 대체할 수 있다.
[ 이론 ]
1. 람디식이란?
메서드를 하나의 식(Expression)으로 표현한 것.
불필요한 코드를 줄이고 나결하게 로직을 전달할 수 있다.
2. 람다식 기본 문법
(매개변수) -> { 실행문 }
3. 람다식 예제
// 기본 형태
Runnable r = () -> System.out.println("Hello Lambda!");
r.run(); // Hello Lambda! 출력
// 매개변수 있는 경우
Consumer<String> c = (s) -> System.out.println("입력값: " + s);
c.accept("테스트");
// Comparator 예시 (기존 익명 클래스 대체)
Comparator<String> comp = (s1, s2) -> s1.length() - s2.length();
4. 함수형 인터페이스란?
단 하나의 추상 메서드만 가지는 인터페이스.
-> 자바에서 람다식을 쓸 수 있게 해주는 전제 조건
5. 함수형 인터페이스 예시
@FunctionalInterface
interface MyFunction {
void run();
}
6. 자주 사용하는 함수형 인터페이스 (java.util.function 패키지)
인터페이스 | 설명 |
Consumer<T> | 입력 받고 반한 없음 (void) |
Supplier<T> | 입력 없고 반환만 있음 |
Function<T, R> | T를 받아서 R로 변환 |
Predicate<T> | T를 받아 boolean 반환 |
7. Stream이란?
컬렉션(List, Set 등)을 반복, 필터, 정렬, 집계 등
선언형 방식으로 처리하는 도구
8. Stream 예시
List<String> list = List.of("Java", "Spring", "Lambda", "Stream");
list.stream()
.filter(s -> s.length() > 5)
.sorted()
.forEach(System.out::println);
.// of() 메서드
불변(immutable) 리스트를 생성.
한 번 생성된 리스트는 요소 추가/삭제/변경이 불가하다.
Java 9 이후 사용 가능.
Java 8까지는 Arrays.asList() 사용
// System.out::print
메서드 참조 방식
x -> Stream.out.println(x) 이런 람다식을 더 간단하게 표현한 것.
9. 보충 학습 키워드
- map(), collect(Collectors.toList()), reduce(), Optional -> 스트림 고급
- 실무에서는 스트림이 SQL처럼 데이터를 다루는 데 강력하게 사용됨
[ 실습 ]
✅ 실습 예제 1: 문자열 길이순 정렬
import java.util.*;
public class Main {
public static void main(String[] args) {
List<String> words = Arrays.asList("Java", "Stream", "Lambda", "API", "Function");
// 문자열 길이 기준 오름차순 정렬
words.sort( (a,b) -> a.length() - b.length() );
for (String word : words) {
System.out.println(word);
}
}
}
✅ 실습 예제 2: 숫자 필터링 + 출력
import java.util.*;
import java.util.stream.*;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = List.of(1, 5, 10, 15, 20, 25);
// 10 이상인 수만 필터링해서 출력
numbers.stream()
.filter(n -> n >= 10)
.forEach(System.out::println);
}
}
[ 과제 ]
✅ 과제 1: 문자열 리스트를 스트림으로 필터링
이 중에서 5글자 이상인 동물 이름만 출력해보세요 (람다 & Stream 사용)
List<String> animals = List.of("cat", "tiger", "lion", "elephant", "dog");
✅ 과제 2: Book 리스트 정렬
기존에 만들었던 Book 객체를 다시 활용해서:
- 출판 연도 기준 정렬 (람다식 사용)
- 제목 기준 정렬 (람다식 사용)
[ 메모 ]
- 람디식은 (매개변수) -> { 실행문 } 이 기본문법
- .stream()을 사용해서 Comporator 할 수 있고, 조건을 주어 필터링도 할 수 있다.
- .of() 메서드는 Java9 이후부터 사용가능. 그리고 값이 불변함. (값 수정x)
Java8 까지는 Arrays.asList() 로 사용. - System.out::println 이건 메서드 참조 방식. 람다식을 더 간단하게 표현한 것.
- 함수여 인터페이스는 단 하나의 추상 메서드만 가질 수 있다. @FunctionalInterface 붙여야함.
'공부 기록 > Java with ChatGPT' 카테고리의 다른 글
[Java/ChatGPT] Day 19: 예외 처리와 파일 연동 실전 연습 (0) | 2025.07.16 |
---|---|
[Java/ChatGPT] Day 18: 파일 입출력 (File I/O) (0) | 2025.07.14 |
[Java/ChatGPT] Day 16.5: 키워드 몇 가지 정리 (0) | 2025.06.25 |
[Java/ChatGPT] Day 16: static, final, 상수, 유틸리티 클래스 (0) | 2025.06.25 |
[Java/ChatGPT] Day 15: 컬렉션 정렬 (Comparable & Comparator) (0) | 2025.06.23 |