[JAVA8] Stream

기록/JAVA 2021. 1. 10. 18:09

Stream 소개 데이터를 담고 있는 저장소(컬렉션)가 아니다. Functional in nature , 스트림이 처리하는 데이터 소스를 변경하지 않는다. 스트림으로 처리하는 데이터는 오직 한 번만 처리한다. (실시간으로 들어오는 데이터)무제한일 수도 있다. (무제한 이지만 특정 조건으로)Short Circuit 메서드를 사용해서 제한할 수 있다. 중개 오퍼레이션은 근본적으로 lazy하다. 손쉽게 병렬 처리할 수 있다. 병렬 처리를 쓴다고 꼭 빨라지는 것은 아니다. 스트림 파이프라인 0 또는 다수의 중개 오퍼레이션 (intermediate operation)과 한 개의 종료 오퍼레이션 (terminal operation)으로 구성한다. 스트림의 데이터 소스는 오직 종료 오퍼레이션을 실행할 때에만 처리한다..

[JAVA8] API의 기본 메서드와 스태틱 메서드

기록/JAVA 2021. 1. 10. 16:24

자바 8에서 추가한 기본 메서드로 인한 API 변화 Iterable의 기본 메서드 forEach() spliterator() public static void main(String[] args) { ArrayList strList = new ArrayList(); strList.add("test1"); strList.add("test2"); strList.add("test3"); strList.add("test4"); strList.add("test5"); //strList.forEach(Consumer

Article Thumbnail
[JAVA8] 인터페이스 기본 메서드와 스태틱 메서드

기록/JAVA 2021. 1. 10. 15:01

기본 메서드 (Default Methods) 인터페이스에 메서드 선언이 아니라 구현체를 제공하는 방법 해당 인터페이스를 구현한 클래스를 깨뜨리지 않고 새 기능을 추가할 수 있다. 기본 메서드는 구현체가 모르게 추가된 기능으로 그만큼 리스크가 있다. 컴파일 에러는 아니지만 구현체에 따라 런타임 에러가 발생할 수 있다. 반드시 문서화 할 것(@implSpec 자바독 태그 사용 , 자바8에서 추가되었음) Object 제공하는 기능 (equals , hashCode , toString 등등..)은 기본 메서드로 제공 할 수 없다. 구현체를 재정의 해야 한다. 본인이 수정할 수 있는 인터페이스 에만 기본 메서드를 제공할 수 있다. 인터페이스를 상속받는 인터페이스에서 다시 추상 메서드로 변경할 수 있다. 인터페이스..

Article Thumbnail
[JAVA8] 메서드 레퍼런스

기록/JAVA 2021. 1. 10. 01:26

메서드 레퍼런스 람다가 하는 일이 기존 메서드 또는 생성자를 호출하는 거라면 , 메서드 레퍼런스를 사용해서 매우 간결하게 표현할 수 있다. 메서드 참조 방법 스태틱 메서드 참조 타입::스태틱 메서드 특정 객체의 인스턴스 메서드 참조 객체 레퍼런스::인스턴스 메서드 임의 객체의 인스턴스 메서드 참조 타입::인스턴스 메서드 생성자 참조 타입::new 메서드 또는 생성자의 매개변수로 람다의 입력값을 받는다. 리턴값 또는 생성한 객체는 람다의 리턴값이다. public static void main(String[] args) { // 인스턴스를 자세히 봐야 한다. // 스태틱 메서드 참조 UnaryOperator hi = Greeting::hi; String strHi = hi.apply("2021-01-10")..

Article Thumbnail
[JAVA8] 람다 표현식

기록/JAVA 2021. 1. 10. 00:44

람다 (인자 리스트) -> {바디} BinaryOperator test = (a , b) -> a + b; 인자 리스트 인자가 없을 때 : () 인자가 한 개 일 때 : (one) 또는 one 인자가 여러 개 일 때 : (one , two) 인자의 타입은 생략 가능 , 컴파일러가 추론 (infer) 하지만 명시할 수도 있다. (Integer one , Integer two) 바디 화살표 오른쪽에 함수 본문을 정의한다. 여러 줄인 경우에 {}를 사용해서 묶는다. 한 줄인 경우에 생략 가능 , return도 생략 가능 변수 캡처 (Variable Capture) 로컬 변수 캡처 final 이거나 effective final 인 경우에만 참조할 수 있다. 그렇지 않을 경우 concurrency(동시성) 문제가..

Article Thumbnail
[JAVA8] 자바에서 제공하는 함수형 인터페이스

기록/JAVA 2021. 1. 9. 23:49

Java가 기본으로 제공하는 함수형 인터페이스 Java.lang.function 패키지 자바에서 미리 정의해둔 자주 사용할만한 함수 인터페이스 Function 항상 입력 인수를 반환하는 함수를 반환 (static) identity T 타입을 받아서 R 타입을 리턴하는 함수 인터페이스 R apply(T t) 함수 조합용 메서드 (default) andThen (default) compose public class FunctionTest implements Function { @Override public Integer apply(Integer integer) { return integer + 100; } } public static void main(String[] args) { // 객체 생성 Funct..

[JAVA8] 함수형 인터페이스와 람다표현식 소개

기록/JAVA 2021. 1. 9. 21:50

함수형 인터페이스 (Functional Interface) 추상 메서드를 딱 하나만 가지고 있는 인터페이스 SAM (Single Abstract Method) 인터페이스 default , static 메서드가 사용 가능하다. static은 재정의가 불가하지만 default는 재정의가 가능하다. // 추상화 메소드가 딱 1개라면 함수형 인터페이스 이다. // 이 규칙을 위반하면 애노테이션에서 컴파일 에러가 발생한다. @FunctionalInterface public interface RunSomething { void doIt(); static void printTestA(){ System.out.println("테스트A"); } default void printTestB(){ System.out.prin..

Java Virtual Machine ?

기록/JAVA 2020. 12. 29. 12:36

JVM이란? Java코드 또는 애플리케이션을 구동하기 위한 런타임 환경을 제공하는 엔진이다. Java 바이트 코드(.class) 를 기계 언어(OS에 특화된 언어)로 변환 한다. JRE (Java Runtime Environment) JVM + 라이브러리 자바 애플리케이션을 실행할 수 있도록 구성된 배포판 JVM과 핵심 라이브러리 및 자바 런타임 환경에서 사용하는 프로퍼티 세팅이나 리소스 파일을 가지고 있다. 개발 관련 도구는 포함하지 않는다. ( JDK에서 제공 ) JDK (Java Development Kit) JRE + 개발에 필요한 툴 소스 코드를 작성할 때 사용 하는 자바 언어는 플랫폼에 독립적 오라클 자바 11부터는 JDK만 제공하며 JRE를 따로 제공하지 않는다. 자바 컴파일러도 JDK에 해..

Article Thumbnail