자바 인 액션_1

네코·2022년 7월 27일
0

자바인액션

목록 보기
1/3

자바8 이후

요구사항 2가지

  • 간결한 코드
  • 멀티코어 프로세서의 쉬운 활용

새롭게 지원하는 기술

  1. 스트림 API
  2. 메서드에 코드를 전달하는 기법
  3. 인터페이스의 디폴트 메서드

1. 스트림 API, 스트림 처리

데이터베이스의 질의 언어에서 표현식을 처리하는 것처럼 병렬 연산을 지원하는 API

장점

  • 멀티코어 활용의 이점을 넘는 synchronized 없이도 병렬 연산이 가능하다.
  • 동작 파라미터화를 구현할 수 있다.
    => 메서드 파라미터에 코드를 전달하는 등

스트림 처리

스트림이란 한번에 한개씩 만들어지는 연속적인 데이터 항목들의 모임.
ex) 유닉스,c의 stdin, 자바의 System.out 등

2. 동작 파라미터화

동작 파라미터화 : 코드를 다른 메서드의 인자로 넘겨주는 기능

3. 병렬성,공유 가변 데이터

스트림 메서드로 전달하는 코드는 다른 코드와 동시에 실행하더라도 안전하게 실행될 수 있어야한다
이를 위해선 공유 가변 데이터에 접근하지 않아야한다
=> 이런 함수를 stateless, side-effect-free 함수라고 한다.

자바함수

자바 8에선 함수를 새로운 값의 형식으로 추가했다.
병렬 프로그래밍을 활용할 수 있는 스트림과 연계될 수 있도록 함수를 만들었기 떄문이다.

자바의 value type

  • primitive type: byte, short, int 등등
  • non-primitive types: 객체(new 또는 팩토리 메서드 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 클래스

0개의 댓글