데이터베이스의 질의 언어에서 표현식을 처리하는 것처럼 병렬 연산을 지원하는 API
장점
스트림이란 한번에 한개씩 만들어지는 연속적인 데이터 항목들의 모임.
ex) 유닉스,c의 stdin, 자바의 System.out 등
동작 파라미터화 : 코드를 다른 메서드의 인자로 넘겨주는 기능
스트림 메서드로 전달하는 코드는 다른 코드와 동시에 실행하더라도 안전하게 실행될 수 있어야한다
이를 위해선 공유 가변 데이터에 접근하지 않아야한다
=> 이런 함수를 stateless, side-effect-free 함수라고 한다.
자바 8에선 함수를 새로운 값의 형식으로 추가했다.
병렬 프로그래밍을 활용할 수 있는 스트림과 연계될 수 있도록 함수를 만들었기 떄문이다.
위의 값들은 모두 일급 시민이지만 메서드나, 클래스는 이급 시민에 해당한다.
이러한 이급 클래스는 런타임에서 자유롭게 전달할 수 없다.
일급 시민의 조건
- 변수 or 데이터에 할당할 수 있어야한다.
- 객체의 인자로 넘길 수 있어야한다.
- 객체의 리턴값으로 반환할 수 있어야한다.
추가_향로님의 일급 컬렉션 설명
자바 8설계자들은 메서드를 값으로 취급할 수 있도록 하여이급 시민를 일급 시민으로 바꿀 수 있는
기능을 추가했다.
FIle[] hiddenFiles = new File(".").listFiles(new FileFilter(){ public boolean accept(File file){ return file.isHidden(); } } // 메서드 참조를 이용한 표현 // File[] hiddenFiles = new File(".").listFiles(File::isHidden);
이미 isHidden 함수가 정의 되어있으므로 메서드 참조 :: 기호를 통해 listFiles()에 직접 전달한 것이다.
기존 컬렉션에선 데이터 처리의 반복되는 패턴이 많았다
eX) 조건에 따라 데이터 필터링, 추출, 그룹화 등
병렬 스트림에 대해 얘기하고 ,,
기존의 구현 클래스를 고치지 않고도 이미 공개된 인터페이스를 변경하는 방법에 대해 고민했다.
자바 8에서는 구현 클래스에서 구현하지 않아도 되는 디폴트 메서드를 인터페이스에 추가할 수 있도록 했다.
Optional 클래스