Java 8은 2014년 3월에 출시되어 많은 새로운 기능을 제공했습니다.
이 새로운 기능들은 Java 프로그래밍 언어를 더욱 강력하고 표현력 있게 만들었습니다.
여기서는 Java 8의 주요 새로운 기능들을 살펴보겠습니다.
람다 표현식 (Lambda Expressions)
람다 표현식은 Java 8에서 가장 주목할 만한 기능 중 하나입니다. 익명 함수(무명 함수)를 간단한 식으로 표현할 수 있게 되었습니다. 이를 통해 코드의 가독성과 유지 보수성이 향상되었습니다.
1
2
3
4
5
6
7
8
9
10
|
// 기존 방식
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println(“JAVA 8”);
}
};
// 람다 표현식 사용
Runnable runnable = () –> System.out.println(“JAVA 8”);
|
cs |
스트림 API (Stream API)
스트림 API는 컬렉션 데이터를 함수형 스타일로 처리할 수 있게 해줍니다. 필터링, 매핑, 정렬, 그룹화 등의 작업을 간결하게 수행할 수 있습니다.
1
2
3
4
5
6
|
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
// 스트림 API 사용
List<Integer> evenNumbers = numbers.stream()
.filter(n –> n % 2 == 0)
.collect(Collectors.toList());
|
cs |
함수형 인터페이스 (Functional Interfaces)
함수형 인터페이스는 단일 추상 메서드를 가진 인터페이스입니다. 람다 표현식을 사용할 때 대상 타입으로 활용됩니다. 자바에는 Predicate
, Consumer
, Function
, Supplier
등의 표준 함수형 인터페이스가 있습니다.
1
2
3
4
5
|
// Predicate 예제
List<String> names = Arrays.asList(“John”, “Jane”, “Jack”, “Jill”);
List<String> filteredNames = names.stream()
.filter(name –> name.startsWith(“J”))
.collect(Collectors.toList());
|
cs |
새로운 날짜/시간 API (Date/Time API)
Java 8에서는 과거의 Date
클래스를 대체하는 새로운 날짜/시간 API가 도입되었습니다. LocalDate
, LocalTime
, LocalDateTime
, ZonedDateTime
등의 새로운 클래스가 추가되었으며, 더욱 직관적이고 유용한 기능을 제공합니다.
1
2
3
4
5
6
7
8
9
10
11
12
|
LocalDate today = LocalDate.now();
LocalTime time = LocalTime.of(13, 30);
LocalDateTime dateTime = LocalDateTime.of(today, time);
LocalDate today = LocalDate.now();
LocalDate tomorrow = today.plusDays(1);
Duration duration = Duration.between(LocalTime.now(), LocalTime.NOON);
System.out.println(today); // 현재 날짜
System.out.println(tomorrow); // 내일 날짜
System.out.println(duration); // 현재 시간과 정오 사이의 시간 차이
|
cs |
Optional 클래스
Optional
클래스는 null
을 더 우아하게 처리할 수 있도록 도와주며, NullPointerException
을 방지하는 데 도움을 줍니다.
1
2
3
|
Optional<String> optionalString = Optional.of(“Hello”);
optionalString.ifPresent(System.out::println); // “Hello” 출력
|
cs |
인터페이스의 기본 메소드(Default Methods)와 정적 메소드(Static Methods)
Java 8부터 인터페이스에 기본 메소드와 정적 메소드를 추가할 수 있게 되었습니다. 이를 통해 기존 인터페이스를 변경하면서도 하위 호환성을 유지할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
|
interface MyInterface {
default void printGreeting() {
System.out.println(“Hello, World!”);
}
static void printGoodbye() {
System.out.println(“Goodbye, World!”);
}
}
|
cs |
기타 새로운 기능
Optional
클래스: null 참조 예외를 방지하기 위한 유틸리티 클래스IntStream
,LongStream
,DoubleStream
: 원시 데이터 타입용 스트림 APIStringJoiner
: 문자열 연결을 위한 간편한 유틸리티 클래스Base64
인코딩/디코딩- 병렬 배열 연산
- 애노테이션 개선
- 보안 강화
- 자바 컴파일러 툴 개선
Java 8은 Oracle에서 제공하는 마지막 공개 업데이트(Public Update) 버전입니다. Java 9 이후부터는 오픈소스 및 상업적 버전으로 출시되고 있습니다.