소개
이 랩에서는 Java 8 의 가장 중요한 두 가지 기능인 람다 표현식 (Lambda expressions) 과 스트림 API(Stream API) 를 사용하는 방법을 배우게 됩니다. 람다 표현식은 다른 메서드에 인수로 전달될 수 있는 익명 함수를 생성하는 데 사용되며, 스트림 API 는 컬렉션에 일련의 연산을 수행하는 데 사용됩니다.
이 랩에서는 Java 8 의 가장 중요한 두 가지 기능인 람다 표현식 (Lambda expressions) 과 스트림 API(Stream API) 를 사용하는 방법을 배우게 됩니다. 람다 표현식은 다른 메서드에 인수로 전달될 수 있는 익명 함수를 생성하는 데 사용되며, 스트림 API 는 컬렉션에 일련의 연산을 수행하는 데 사용됩니다.
먼저, 시스템에 최신 버전의 Java 를 설치하여 Java 환경을 설정합니다. 공식 웹사이트에서 Java 를 다운로드하여 설치할 수 있습니다. 설치 후 터미널을 열고 Java 버전을 확인합니다.
java -version
다음으로, ~/project 디렉토리에 LambdaExpressions.java라는 이름의 새로운 Java 파일을 생성합니다.
touch ~/project/LambdaExpressions.java
이 파일에서 람다 표현식과 스트림 API 를 구현하는 코드를 작성할 것입니다.
람다 표현식은 익명 함수를 쉽게 생성할 수 있는 방법을 제공합니다. 두 개의 숫자를 입력으로 받아 합계를 반환하는 함수를 나타내는 FunctionalInterface를 생성합니다.
interface Calculator {
int sum(int a, int b);
}
다음으로, 람다 표현식을 사용하여 이 인터페이스의 객체를 생성한 다음, 해당 객체를 사용하여 sum() 함수를 호출할 수 있습니다.
Calculator adder = (a, b) -> a + b;
int result = adder.sum(10, 20);
System.out.println("Result: " + result);
이제 다음 명령을 사용하여 이 코드를 컴파일하고 실행합니다.
javac ~/project/LambdaExpressions.java && java LambdaExpressions
출력 결과는 다음과 같아야 합니다.
Result: 30
Stream API 는 컬렉션에 일련의 작업을 수행하는 데 사용됩니다. 이 단계에서는 문자열 컬렉션을 반복하고 "A"로 시작하는 문자열을 필터링하는 방법을 배웁니다.
작업할 몇 개의 이름을 포함하는 문자열 목록을 생성합니다.
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "Dave", "Andy");
다음으로, Stream API 를 사용하여 이 컬렉션을 반복하고, "A"로 시작하는 문자열을 필터링하고, 나머지 문자열을 콘솔에 출력합니다.
names.stream().filter(s -> s.startsWith("A")).forEach(System.out::println);
이제 다음 명령을 사용하여 이 코드를 컴파일하고 실행합니다.
javac ~/project/LambdaExpressions.java && java LambdaExpressions
출력 결과는 다음과 같아야 합니다.
Alice
Andy
Stream API 는 컬렉션에 일련의 작업을 수행하는 방법을 제공합니다. 이 단계에서는 Stream API 를 사용하여 정수 목록에서 최대 및 최소 요소를 찾는 방법을 배웁니다.
정수 목록을 생성합니다.
List<Integer> numbers = Arrays.asList(10, 2, 30, 5, 4, 20);
Stream API 를 사용하여 목록의 최대 요소를 찾습니다.
Optional<Integer> maxNum = numbers.stream().max(Integer::compareTo);
System.out.println("Maximum number: " + maxNum.get());
Stream API 를 사용하여 목록의 최소 요소를 찾습니다.
Optional<Integer> minNum = numbers.stream().min(Integer::compareTo);
System.out.println("Minimum number: " + minNum.get());
이제 다음 명령을 사용하여 이 코드를 컴파일하고 실행합니다.
javac ~/project/LambdaExpressions.java && java LambdaExpressions
출력 결과는 다음과 같아야 합니다.
Maximum number: 30
Minimum number: 2
Stream API 의 forEach() 메서드를 사용하여 목록을 반복하고 각 요소에 대해 작업을 수행할 수 있습니다.
작업할 몇 개의 이름을 포함하는 문자열 목록을 생성합니다.
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "Dave");
forEach() 메서드를 사용하여 목록의 모든 요소를 출력합니다.
names.stream().forEach(System.out::println);
이제 다음 명령을 사용하여 이 코드를 컴파일하고 실행합니다.
javac ~/project/LambdaExpressions.java && java LambdaExpressions
출력 결과는 다음과 같아야 합니다.
Alice
Bob
Charlie
Dave
Stream API 는 컬렉션을 정렬하는 데 사용할 수 있습니다. 이 단계에서는 정수 목록을 오름차순으로 정렬하는 방법을 배웁니다.
작업할 정수 목록을 생성합니다.
List<Integer> numbers = Arrays.asList(1, 3, 2, 4, 5);
Stream API 의 sorted() 메서드를 사용하여 목록을 오름차순으로 정렬합니다.
numbers.stream().sorted().forEach(System.out::println);
이제 다음 명령을 사용하여 이 코드를 컴파일하고 실행합니다.
javac ~/project/LambdaExpressions.java && java LambdaExpressions
출력 결과는 다음과 같아야 합니다.
1
2
3
4
5
이 단계에서는 Stream API 를 사용하여 정수 컬렉션을 필터링하고 정렬합니다.
작업할 정수 목록을 생성합니다.
List<Integer> numbers = Arrays.asList(10, 2, 30, 5, 4, 20);
짝수만 필터링하고 sorted() 메서드를 사용하여 내림차순으로 정렬합니다.
numbers.stream().filter(n -> n % 2 == 0).sorted(Comparator.reverseOrder()).forEach(System.out::println);
이제 다음 명령을 사용하여 이 코드를 컴파일하고 실행합니다.
javac ~/project/LambdaExpressions.java && java LambdaExpressions
출력 결과는 다음과 같아야 합니다.
30
20
10
4
2
이 단계에서는 Stream API 를 사용하여 정수 컬렉션의 평균을 구하는 방법을 배웁니다.
작업할 정수 목록을 생성합니다.
List<Integer> numbers = Arrays.asList(10, 2, 30, 5, 4, 20);
Stream API 의 average() 메서드를 사용하여 목록의 평균을 구합니다.
OptionalDouble avg = numbers.stream().mapToInt(Integer::intValue).average();
System.out.println("Average: " + avg.getAsDouble());
이제 다음 명령을 사용하여 이 코드를 컴파일하고 실행합니다.
javac ~/project/LambdaExpressions.java && java LambdaExpressions
출력 결과는 다음과 같아야 합니다.
Average: 12.0
이 단계에서는 Optional 이 무엇인지, 그리고 Optional 객체를 생성하는 방법을 배웁니다.
빈 문자열의 Optional 객체를 생성합니다.
Optional<String> emptyString = Optional.empty();
isPresent() 메서드를 사용하여 이 객체가 비어 있는지 확인합니다.
if(emptyString.isPresent()) {
System.out.println(emptyString.get());
}
else {
System.out.println("No value");
}
이제 다음 명령을 사용하여 이 코드를 컴파일하고 실행합니다.
javac ~/project/LambdaExpressions.java && java LambdaExpressions
출력 결과는 다음과 같아야 합니다.
No value
이 랩에서는 Java 8 의 가장 중요한 두 가지 기능인 람다 표현식 (Lambda expressions) 과 Stream API 를 사용하는 방법을 배웠습니다. 람다 표현식을 사용하여 익명 함수를 생성하는 방법, Stream API 를 사용하여 컬렉션에 일련의 연산을 수행하는 방법, 그리고 Optional 객체를 생성하고 비어 있는지 확인하는 방법을 배웠습니다. 또한 Stream API 를 사용하여 컬렉션을 정렬, 필터링하고 평균을 구하는 방법도 살펴보았습니다. 이러한 기능을 숙달함으로써 Java 8 을 사용하여 효율적이고 깔끔한 코드를 작성할 수 있습니다.