-
[Java] #10 Java 8에서 추가된 기능 소개 - 현대적인 개발 경험을 위한 힘든 시간에서 효율적인 코드 작성으로!Software engineer/Java 2023. 6. 28. 10:51

이번 블로그 글에서는 Java 8에서 추가된 기능에 대해 소개하려고 합니다. Java 8은 기존 Java 프로그래밍의 패러다임을 크게 바꾸어주는 중요한 업데이트였습니다. Java 8은 강력한 기능과 문법적 개선을 통해 개발자들에게 현대적이고 효율적인 개발 경험을 제공합니다.
Java8 추가된 기능
- 람다 표현식
- 함수형 인터페이스
- 스트림
- 날짜와 시간 API
- 기본 메서드
- Optional 클래스
1. 람다 표현식 (Lambda Expressions)
람다 표현식은 익명 함수를 생성하기 위한 간단한 문법을 제공합니다. 함수형 인터페이스를 구현하는 객체를 생성하지 않고도 코드 블록을 전달할 수 있습니다.
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); // 람다 표현식을 사용하여 리스트의 각 요소를 출력 numbers.forEach(n -> System.out.println(n)); // 람다 표현식을 사용하여 짝수만 출력 numbers.stream() .filter(n -> n % 2 == 0) .forEach(System.out::println);2. 함수형 인터페이스 (Functional Interfaces)
함수형 인터페이스는 람다 표현식과 함께 사용하기 위해 설계된 인터페이스입니다. 이를 통해 람다 표현식을 통해 전달된 코드 블록을 특정 인터페이스의 메서드로 쉽게 구현할 수 있습니다.
@FunctionalInterface interface Calculator { int calculate(int a, int b); } public class Main { public static void main(String[] args) { Calculator addition = (a, b) -> a + b; System.out.println(addition.calculate(5, 3)); // 출력: 8 Calculator subtraction = (a, b) -> a - b; System.out.println(subtraction.calculate(5, 3)); // 출력: 2 } }3. 스트림 (Streams)
스트림은 데이터 처리를 위한 새로운 추상화 계층입니다. 컬렉션, 배열 등의 데이터 소스를 처리하고 다양한 연산을 수행할 수 있습니다.
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); // 스트림을 사용하여 각 요소를 제곱한 후 필터링하여 출력 numbers.stream() .map(n -> n * n) .filter(n -> n % 2 == 0) .forEach(System.out::println);4. 날짜와 시간 API (Date and Time API)
Java 8에서는 java.time 패키지를 통해 날짜와 시간을 다루기 위한 새로운 API를 제공합니다.
// 현재 날짜와 시간 가져오기 LocalDateTime now = LocalDateTime.now(); System.out.println(now); // 출력: 2023-06-19T15:30:45.123 // 날짜 포맷 지정하여 출력 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String formattedDateTime = now.format(formatter); System.out.println(formattedDateTime); // 출력: 2023-06-19 15:30:455. 기본 메서드 (Default Methods)
인터페이스에 기본적으로 구현된 메서드를 추가할 수 있게 되었습니다. 이를 통해 인터페이스를 구현하는 클래스들이 새로운 메서드를 구현하지 않아도 됩니다.
interface Vehicle { default void start() { System.out.println("Vehicle started."); } } class Car implements Vehicle { // 기본 메서드를 오버라이드하지 않아도 됨 } public class Main { public static void main(String[] args) { Car car = new Car(); car.start(); // 출력: Vehicle started. } }6. Optional 클래스
Optional 클래스는 null 값을 다루는데 유용한 기능을 제공합니다. null을 포함할 수 있는 값을 감싸고, null 체크와 관련된 코드를 간단하게 작성할 수 있습니다.
Optional<String> optionalValue = Optional.of("Hello"); // 값이 존재하는지 확인하고 출력 optionalValue.ifPresent(System.out::println); // 출력: Hello // 값이 존재하지 않을 때 기본값 출력 String value = optionalValue.orElse("Default Value"); System.out.println(value); // 출력: Hello // 값이 존재하지 않을 때 예외 발생 String result = optionalValue.orElseThrow(IllegalStateException::new);
Java 8은 개발자들에게 현대적이고 효율적인 개발 경험을 제공하는 많은 기능을 도입했습니다. 람다 표현식, 스트림, 날짜와 시간 API, Optional, Default Methods, 그리고 함수형 인터페이스 등 다양한 기능을 통해 Java 개발자들은 더욱 강력하고 효율적인 코드를 작성할 수 있게 되었습니다. Java 8의 이러한 기능들을 활용하여 개발 프로젝트에서 생산성을 높이고 유지보수성을 향상할 수 있습니다.샘플 코드는 Github에서 공유!! LINK
GitHub - dev-jhjoo/practice-java8
Contribute to dev-jhjoo/practice-java8 development by creating an account on GitHub.
github.com
'Software engineer > Java' 카테고리의 다른 글
[Java] #9 네트워크(Network) (1) 2023.05.04 [Java] #8 입출력(Input/Output) (2) 2023.05.03 [Java] #7 스레드(Thread) (2) 2023.05.02 [Java] #6 람다(Lambda), 스트림(Stream) (1) 2023.05.02 [Java] #5 제네릭(Generics), 이넘(Enum), 어노테이션(@, Annotation) (3) 2023.05.01