Java 8에는 Java 코드의 표현성, 가독성 및 유연성을 향상시키기 위한 몇 가지 중요한 기능과 향상된 기능이 도입되었습니다. Java 8에 도입된 두 가지 주요 기능은 람다 표현식과 Stream API입니다.
람다 식
람다 표현식은 단일 메서드 인터페이스(기능 인터페이스)의 인스턴스를 표현하는 간결한 방법을 소개합니다. 익명 함수 생성을 허용하여 코드의 가독성과 유연성을 향상시킵니다.
Syntax
(parameters) -> expression
예
// Traditional anonymous class
Runnable runnable1 = new Runnable() {
@Override
public void run() {
System.out.println("Hello, world!");
}
};
// Lambda expression
Runnable runnable2 = () -> System.out.println("Hello, world!");
사용 사례
기능적 인터페이스: 람다 표현식은 Runnable 인터페이스, Comparator 인터페이스 등과 같은 기능적 인터페이스에 대한 구현을 제공하는 데 일반적으로 사용됩니다.
Stream API
Stream API는 기능적 스타일로 데이터를 처리할 수 있는 스트림이라는 새로운 추상화를 제공합니다. 스트림을 사용하면 간결하고 표현력이 풍부한 코드를 사용하여 복잡한 데이터 조작을 더 쉽게 수행할 수 있습니다.
예
List<String> names = Arrays.asList("John", "Alice", "Bob", "Charlie");
// Using Stream API to filter and print names starting with 'A'
names.stream()
.filter(name -> name.startsWith("A"))
.forEach(System.out::println);
주요 개념
- 스트림: 순차 및 병렬 집계 작업을 지원하는 일련의 요소입니다.
- 중간 작업: 스트림을 다른 스트림으로 변환하는 작업(예: filter, map).
- 터미널 작업: 결과나 부작용을 생성하는 작업(예: forEach, collect).
사용 사례
- 데이터 처리: Stream API는 유창하고 기능적인 접근 방식을 제공하여 컬렉션 및 배열 처리를 단순화합니다.
- 병렬 실행: 스트림은 멀티코어 시스템의 성능 향상을 위해 병렬 처리를 활용할 수 있습니다.
기타 Java 8 기능
기본 메소드
이제 인터페이스에 메소드 구현이 있을 수 있습니다. 이 기능은 기존 구현을 중단하지 않고 API를 발전시키는 데 유용합니다.
interface MyInterface {
default void myMethod() {
System.out.println("Default implementation");
}
}
메서드 참조
메소드 참조는 람다 표현식에 대한 약식 구문을 제공하여 코드를 더 읽기 쉽게 만듭니다.
// Lambda expression
list.forEach(item -> System.out.println(item));
// Method reference
list.forEach(System.out::println);
Optional
Optional 클래스는 null을 명시적으로 확인하지 않고 선택적 값을 표현하는 방법을 제공합니다.
Optional<String> optionalName = Optional.ofNullable(getName());
String name = optionalName.orElse("Default Name");
마무리
이러한 기능은 전체적으로 Java 코드를 더욱 간결하고 표현력이 풍부하며 유지 관리하기 쉽게 만드는 데 기여합니다.
특히 Lambda 표현식과 Stream API는 개발자가 Java에서 데이터 조작 및 처리에 접근하는 방식에 큰 영향을 미쳤습니다.
이를 통해 보다 기능적이고 선언적인 프로그래밍 스타일이 가능해지며 상용구 코드가 줄어들고 Java 프로그램의 가독성이 향상됩니다.
'Programming > Java' 카테고리의 다른 글
Java의 객체 직렬화 : 외부화와 차이점 (0) | 2024.01.14 |
---|---|
JAVA의 개발 디자인 패턴들 : 싱글턴, 팩토리 메소드 (0) | 2024.01.10 |
JVM의 주요기능 (1) | 2023.12.30 |
JMM(Java Memory Model)이 개발자에게 미치는 영향 (1) | 2023.12.29 |
synchronized 키워드와 java.util.concurrent 사용 간의 차이점 (0) | 2023.12.28 |