Java8
-
Stream API백기선(인프런 강의)/더 자바, Java 8 2020. 7. 11. 16:11
Stream API 걸러내기 Filter(Predicate) Predicate는 자바 11부터 사용가능 예) 이름이 3글자 이상인 데이터만 새로운 스트림으로 오라클 1.8, 여러가지 OpenJDK를 사용해본결과 1.8에는 없어서 질문했는데 답변을 달아주셨다... 11버전부터는 1.8과 몇가의 메소드들이 달라진것 같다. 공부하자! 변경하기 Map(Function) 또는 FlatMap(Function) 예) 각각의 Post 인스턴스에서 String title만 새로운 스트림으로 예) List을 String의 스트림으로 생성하기 generate(Supplier) 또는 Iterate(T seed, UnaryOperator) 예) 10부터 1씩 증가하는 무제한 숫자 스트림 예) 랜덤 int 무제한 스트림 제한하기..
-
인터페이스 기본 메소드와 스태틱 메소드백기선(인프런 강의)/더 자바, Java 8 2020. 7. 8. 23:26
기본 메소드 (Default Methods) 인터페이스에 메소드 선언이 아니라 구현체를 제공하는 방법 해당 인터페이스를 구현한 클래스를 깨트리지 않고 새 기능을 추가할 수 있다. 기본 메소드는 구현체가 모르게 추가된 기능으로 그만큼 리스크가 있다. 컴파일 에러는 아니지만 구현체에 따라 런타임 에러가 발생할 수 있다. 반드시 문서화 할 것. (@implSpec 자바독 태그 사용) Object가 제공하는 기능 (equals, hasCode)는 기본 메소드로 제공할 수 없다. 구현체가 재정의해야 한다. 본인이 수정할 수 있는 인터페이스에만 기본 메소드를 제공할 수 있다. 인터페이스를 상속받는 인터페이스에서 다시 추상 메소드로 변경할 수 있다. 인터페이스 구현체가 재정의 할 수도 있다. 스태틱 메소드 해당 타입..
-
메소드 래퍼런스백기선(인프런 강의)/더 자바, Java 8 2020. 7. 7. 23:47
람다가 하는 일이 기존 메소드 또는 생성자를 호출하는 거라면, 메소드 레퍼런스를 사용해서 매우 간결하게 표현할 수 있다. 메소드 참조하는 방법 스태틱 메소드 참조 타입::스태틱 메소드 특정 객체의 인스턴스 메소드 참조 객체 레퍼런스::인스턴스 메소드 임의 객체의 인스턴스 메소드 참조 타입::인스턴스 메소드 생성자 참조 타입::new 메소드 또는 생성자의 매개변수로 람다의 입력값을 받는다. 리턴값 또는 생성한 객체는 람다의 리턴값이다. 참고 https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html 예제 import java.util.Arrays; import java.util.function.Function; import java...
-
람다 표현식백기선(인프런 강의)/더 자바, Java 8 2020. 7. 7. 22:38
람다 (인자 리스트) -> {바디} 인자 리스트 인자가 없을 때: () 인자가 한개일 때: (one) 또는 one 인자가 여러개 일 때: (one, two) 인자의 타입은 생략 가능, 컴파일러가 추론(infer)하지만 명시할 수도 있다. (Integer one, Integer two) 바디 화상표 오른쪽에 함수 본문을 정의한다. 여러 줄인 경우에 { }를 사용해서 묶는다. 한 줄인 경우에 생략 가능, return도 생략 가능. 변수 캡처 (Variable Capture) 로컬 변수 캡처 final이거나 effective final 인 경우에만 참조할 수 있다. 그렇지 않을 경우 concurrency 문제가 생길 수 있어서 컴파일가 방지한다. effective final 이것도 역시 자바 8부터 지원하는 ..
-
함수형 인터페이스와 람다 표현식백기선(인프런 강의)/더 자바, Java 8 2020. 7. 6. 09:02
함수형 인터페이스(Funtional Interface) 추상 메소드를 딱 하나만 가지고 있는 인터페이스 SAM(Single Abstract Method) 인터페이스 @FunctionalInterface 애노테이션을 가지고 있는 인터페이스 람다 표현식(Lambda Expressions) 함수형 인터페이스의 인스턴스를 만드는 방법으로 쓰일 수 있다. 코드를 줄일 수 있다. 메소드 매개변수, 리턴타입, 변수로 만들어 사용할 수 있다. 자바에서 함수형 프로그래밍 함수를 First class object로 사용할 수 있다. 순수함수(Pure function) 사이드 이펙트를 만들 수 없다.(함수 밖에 있는 값을 변경하지 못한다.) 상태가 없다.(함수 밖에 정의되어있는) 고차 함수(High-Order Fucntio..