추상 메소드를 딱 하나만 가지고 있는 인터페이스SAM(Single Abstract Method) 인터페이스@FunctionalInterface 애노테이션을 가지고 있는 인터페이스함수형 인터페이스의 인스턴스를 만드는 방법으로 쓰일 수 있다.코드를 줄 일 수 있다.메소드
T 타입을 받아서 R 타입을 리턴하는 함수 인터페이스R apply(T t)함수 조합용 메소드andThen -> andThen 내부가 나중에 실행compose -> compose 내부가 먼저 실행
java.util.function 패키지자바에서 미리 정의해둔 자주 사용할만한 함수 인터페이스Function< T, R >BiFunction< T, R >Consumer< T >Supplier< T >Predicate< T >UnaryOper
두개의 값(T,U)를 받아서 R 타입을 리턴하는 함수 인터페이스R apply(T t, U u)
T 타입을 받아서 아무값도 리턴하지 않는 함수 인터페이스 \-void Accept(T t)함수 조합용 메소드 \-andThen
T 타입의 값을 제공하는 함수 인터페이스T get()
T 타입을 받아서 boolean을 리턴하는 함수 인터페이스boolean test(T t)함수 조합용 메소드AndOrNegate
Function<T, R>의 특수한 형태로, 입력값 하나를 받아서 동일한 타입을 리턴하는 함수 인터페이스 -> 더 깔끔하게 작성 가능
BiFunction<T, U, R>의 특수한 형태로, 동일한 타입의 입력값 두개를 받아 리턴하는 함수 인터페이스
(인자 리스트) -> { 바디 }인자가 없을 때: ()인자가 한 개일 떄: (one) 또는 one인자가 여러개 일 때: (one, two)인자의 타입은 생략 가능, 컴파일러가 추론하지만 명시할 수도 있다. -> 타입이 변수 선언부에 이미 정의되어 있기 때문에 examp
기본 메소드(Default Methods)인터페이스에 메소드 선언이 아니라 구현체를 제공하는 방법해당 인터페이스를 구현한 클래스를 깨트리지 않고 새 기능을 추가할 수 있다기본 메소드는 구현체가 모르게 추가된 기능으로 그만큼 리스크가 있다컴파일 에러는 아니지만 구현체에
Streamsequence of elements supporting sequential and parallel aggreagate operations데이터를 담고 있는 저장소(컬렉션)이 아니다.Funtional in nature. 스트림이 처리하는 데이터 소스를 변경하
자바 프로그래밍에서 NullPointerException을 종종 보게되는 이유null을 리턴 && null 체크를 잊는 경우메소드에서 작업 중 특별한 상황에서 값을 제대로 리턴할 수없는 경우 선택할 수 있는 방법예외를 던진다.(비싸다, 스택트레이스를 찍어두기 때문)nu
자바 8에 새로운 날짜와 시간 API가 생긴 이유그전까지 사용하던 java.util.Date 클래스는 mutable 하기 때문에 thread safe 하지 않다.클래스 이름이 명확하지 않다. Date인데 시간까지 다룬다.버그 발생할 여지가 많다. (타입 안정성이 없고,
Concurrent 소프트웨어동시에 여러 작업을 할 수 있는 소프트웨어예) 웹 브라우저로 유튜브로 보면서 키보드로 문서에 타이핑을 할 수 있다.자바에서 지원하는 Concurrent 프로그래밍멀티프로세싱 (ProcessBuilder)멀티쓰레드자바 멀티쓰터드 프로그래밍Th
고수준(High-Level) Concurrency 프로그래밍쓰레드를 만들고 관리하는 작업을 애플리케이션에서 분리그런 기능을 Executors에게 위임.작업을 하고 다음 작업이 들어오기를 계속 대기하기 때문에 shutdown()을 해줘야한다. -> graceful Shu
CallableRunable과 유사하지만 작업의 결과를 받을 수 있다.Future비동기적인 작업의 현재 상태를 조회하거나 결과를 가져올 수 있다.결과 가져오기 get()블로킹 콜이다타임아웃(최대한으로 기다릴 시간)을 설정할 수 있다.작업 상태 확인하기 isDone()완
자바에서 비동기(Asynchronous) 프로그래밍을 가능케하는 인터페이스Future를 사용해서도 어느정도 가능했지만 하기 힘들 일들이 많았다.Futrue로는 하기 어렵던 작업들Future를 외부에서 완료 시킬 수 없다. 취소하거나, get()에 타임아웃을 설정할 수는