[JAVA] JAVA8에서 추가된 내용

JHJeong·2024년 4월 28일
0

JAVA 8에서의 중요한 업데이트와 기능들을 정리하였다.

  1. 람다 표현식(Lambda Expressions)
  • JAVA8에서 가장 주목 받는 기능 중 하나가 바로 람다 표현식.
  • 간결한 코드 작성을 가능하게 하며, 함수형 프로그래밍을 지원함.
  • 람다 표현식을 사용하면 간단한 클래스들 작성하지 않고도 코드 블록을 쉽고 간결하게 표현할 수 있음
// 람다 표현식을 사용하여 리스트의 각 요소 출력
List<String> items = Arrays.asList("Apple", "Banana", "Cherry", "Date");
items.forEach(item -> System.out.println(item));

// 람다 표현식을 사용하여 두 수의 합을 계산하고 출력
BiFunction<Integer, Integer, Integer> add = (a, b) -> a + b;
System.out.println("Sum: " + add.apply(10, 20));
  1. 스트림 API(Stream API)
  • 스트림 API는 데이터 컬렉션을 함수형 접근 방식으로 처리할 수 있게 해줌
  • 이 API를 사용하면 필터링, 매핑, 정렬, 그룹화 등의 연산을 선언적으로 처리할 수 있으며, 멀티스레드 환경에서도 쉽게 병렬 처리를 구현할 수 있음
// Stream API를 사용하여 짝수만 필터링하고, 각 숫자의 제곱을 계산한 후 결과를 리스트로 수집
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
System.out.println("Squares of even numbers: " + squaresOfEvenNumbers);
  1. 인터페이스의 디폴트 메서드(Default Methods)
  • 인터페이스에서 메서드 구현을 포함할 수 있게 되었음
  • default 키워드를 사용하여 인터페이스 내에 메서드를 구현할 수 있으며, 이 기능은 기존 JAVA 코드를 유지하면서 새 기능을 추가하는데 유용함
  1. 날짜와 시간 API(Date and Time API)
  • 기존의 복잡하고 비효율적인 날짜 및 시간 관리 방식을 대체하기 위해 새로운 날짜와 시간 API가 도입되었음(java.time 패키지)
  • 이 API는 불변성(immutable)을 기반으로 설계되었으며, 다양한 시간대를 처리할 수 있는 강력한 기능을 제공함
// 현재 날짜와 시간 가져오기
LocalDate date = LocalDate.now();
LocalTime time = LocalTime.now();
LocalDateTime dateTime = LocalDateTime.now();

System.out.println("Current Date: " + date);
System.out.println("Current Time: " + time);
System.out.println("Current Date and Time: " + dateTime);
  1. Optional 클래스
  • Optional클래스는 null을 다루는 새로운 방법을 제공함
  • 이 클래스를 사용하면, NullPointerException을 보다 쉽게 예방할 수 있음. Optional 객체는 값을 포함하거나 포함하지 않을 수 있으며, 값의 존재 여부에 따라 코드를 실행할 수 있음
import java.util.Optional;

public class OptionalExample {
    public static void main(String[] args) {
        // 사용자 이름을 Optional 객체로 받기
        Optional<String> optionalName = getUsername();

        // Optional 객체가 값이 있는지 확인하고 값을 사용하거나, 값이 없는 경우 기본 값을 제공하기
        String username = optionalName.orElse("Guest");

        System.out.println("Username: " + username);
    }

    // 사용자 이름을 반환할 수도 있고, 반환하지 않을 수도 있는 메소드
    public static Optional<String> getUsername() {
        String name = null; // 여기서 사용자 이름을 데이터베이스나 API에서 가져오는 것으로 가정

        // name이 null이면 Optional.empty()를 반환하고, 그렇지 않으면 Optional.of()로 값을 감싸서 반환
        return (name != null) ? Optional.of(name) : Optional.empty();
    }
}
  1. 나선형 병렬 배열 정렬(Parallel Arrays Sorting)
  • JAVA8에서는 배열을 병렬로 정렬하는 기능을 포함하여 성능을 향상시킴
    ( 여러부분으로 나누어 각각의 부분을 동시에(병렬)처리함으로써 정렬 작업을 더 빠르게 완료할 수 있게 함, JAVA7에서 소개된 Fork-Join프레임워크를 내부적으로 사용함 )
  • Arrays.parallelSort() 메서드를 사용하면 멀티스레드 환경에서 배열의 정렬이 효율적으로 이루어짐
  • sort()는 단일스레드로 수행되며, parallelSort()는 필요에 따라 멀티스레드로 수행됨. 대략적으로 5000개 정도부터 parallelSort()의 성능이 더 빨라짐.
int[] array = {9, 3, 1, 5, 13, 12, 7, 4, 11, 6};
// 배열을 병렬로 정렬
Arrays.parallelSort(array);
  1. StringJoiner
  • 순차적으로 나열되는 문자열을 처리할 때 사용됨
  • 아래의 배열을 그 밑줄 처럼 변환하기 위해서 사용됨

    String[] stringArray=new String[]{”StudyHard","GodOf3ava","Book"};
    => (StudyHard,GodOfJ ava,Book)

public void joinString(String[] stringArray) {
	StringJoiner joiner = new StringJoiner(",","(",")");
    for( String string:stringArray ) {
    	joiner.add(string);
    }
    System.out.println(joiner);
}
profile
이것저것하고 싶은 개발자

0개의 댓글