[F-Lab 모각코 챌린지] 10일차(3) -Fork / Join & Java 8 에서 추가된 것

F-Lab 모각코 챌린지 10일차 공부 및 정리 기록입니다 Java 7 에서 추가된 Fork/Join 에 대한 간단한 설명과 키워드, NIO2 에서 추가된 기능 및 NIO 의 단점을 설명합니다. Java 8 에서 추가된 기능들도 함께 정리하였습니다

[F-Lab 모각코 챌린지] 10일차(3) -Fork / Join & Java 8 에서 추가된 것

Java 7 추가 기능

Fork / Join 추가

  • Fork: 작업을 여러개로 나누는 것
  • Join: 나누어 작업한 결과를 모으는 것

Work stealing

  • 병렬 컴퓨팅에서 사용되는 스케줄링 기법 중 하나
  • 일반적으로 Queue 를 사용하는 환경에서 발생
  • 스레드 중 일부가 작업을 처리하는 동안 작업이 모두 소진 된 경우, 다른 스레드가 자신의 작업이 없어서 기다리는 대신 다른 스레드의 작업을 가져와서 처리하는 것

NIO2

  • 파일의 속성을 다룰 수 있음
    ex: 심볼릭 링크(Symbolic link)
  • 파일이 어떻게 변경 되었는지 확인 할 수 있는 WatchService 제공

NIO(1) 의 단점

  • 심볼릭 링크, 속성, 파일의 권한 등에 대한 기능 없음
  • 파일을 삭제하는 delete() 메소드는 실패 시 아무런 예외를 발생시키지 않고 boolean 타입의 결과만 제공해 줌
  • 파일 변경을 확인하는 방법은 lastModified() 함수를 통해 변경된 시간 비교 방법밖에 없었으며, 연계되는 클래스들의 호출 때문에 성능 문제 발생

File class

파일 클래스를 대체하기 위한 클래스들이 추가됨

  • Paths:
    static 한 get() 메소드 제공. Path(interface) 를 리턴하는데, 파일의 경로에 대한 정보를 갖고있음
  • Files:
    파일에 관련된 매우 많은 함수를 제공하며 Path 객체를 사용하여 파일을 통제하는 데 사용
  • FileSystems:
    현재 사용중인 파일 시스템에 대한 정보를 처리하는 데 필요한 메소드 제공
    static 한 getDefault() 메서드를 호출하여 파일 시스템 정보를 가지고 있는FileSystem 객체를 얻을 수 있음
  • FileStore:
    파일을 저장하는 디바이스, 파티션, 볼륨 등에 대한 정보들을 확인하는 데 필요한 메서드 제공

Java 8 추가 기능

  • 람다 표현식
  • 함수형 인터페이스
  • Stream
  • Optional
  • 인터페이스의 기본 메서드
  • 날짜 관련 클래스들 추가
    이전 날짜 클래스들의 문제점
    - Thread safe 하지 않음
    - 불변 하지 않음
    - api 구성이 복잡함. 1900 년 부터 시작
  • 병렬 배열 정렬
    - parallelSort() 메서드 제공. Java 7 에 추가된 Fork-Join 프레임워크가 내부적으로 사용됨
    - 성능 테스트 시 배열의 요소가 5,000 개 이상 부터 의미가 있음
  • StringJoiner 추가
    문자열들 사이에 특수한 구분자를 넣을 때 사용하면 좋음
    ex1:
    "apple" + "," + "banana" + "," + "cherry" == "apple,banana,cherry"
    ex2:
    String[] fruits = {"apple", "banana", "cherry"};
    StringJoiner joiner = new StringJoiner(",");
    for (String fruit: fruits) {
     joiner.add(fruit);
    }
    String.valueOf(joiner) == "apple,banana,cherry"

Stream

스트림은 다음과 같은 구조를 가짐

list.stream().filter(x-> x>10).count()
//    생성      중개 연산          종단 연산
  • 데이터를 처리하고 변환하는데 사용되며 함수형 프로그래밍의 개념을 도입하여 간결하고 효율적인 코드 작성을 유도
  • 지연 연산:
    스트림은 중간 연산이 작성된 코드에서 실제로 연산을 수행하지 않고 스트림에 대기시킴.
    종단 연산이 호출되기 전까지 데이터 처리를 지연 시킬 수 있음
  • 스트림과 컬렉션 차이:
    컬렉션: 데이터를 저장하고 관리하는 자료구조
    스트림: 데이터를 처리하고 변환하는 파이프라인
  • 원본 데이터를 변경하지 않음
    한번 사용하고 소비된 데이터를 재사용 할 수 없음.
    원본 데이터를 변경하지 않음.