[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 에서 추가된 것](/content/images/size/w1200/2023/06/-------_--------_-------5.png)
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()
// 생성 중개 연산 종단 연산
- 데이터를 처리하고 변환하는데 사용되며 함수형 프로그래밍의 개념을 도입하여 간결하고 효율적인 코드 작성을 유도
- 지연 연산:
스트림은 중간 연산이 작성된 코드에서 실제로 연산을 수행하지 않고 스트림에 대기시킴.
종단 연산이 호출되기 전까지 데이터 처리를 지연 시킬 수 있음 - 스트림과 컬렉션 차이:
컬렉션: 데이터를 저장하고 관리하는 자료구조
스트림: 데이터를 처리하고 변환하는 파이프라인 - 원본 데이터를 변경하지 않음
한번 사용하고 소비된 데이터를 재사용 할 수 없음.
원본 데이터를 변경하지 않음.