백기선(인프런 강의)/더 자바, Java 8
-
Date와 Time API백기선(인프런 강의)/더 자바, Java 8 2020. 7. 12. 16:36
자바 8에 새로운 날짜와 시간 API가 생긴 이유 그전까지 사용하던 java.util.Date 클래스는 mutable 하기 때문에 thead safe하지 않다. 클래스 이름이 명확하지 않다. Date인데 시간까지 다룬다. 버그 발생할 여지가 많다. (타입 안정성이 없고, 월이 0부터 시작한다거나..) 날짜 시간 처리가 복잡한 애플리케이션에서는 보통 Joda Time을 쓰곤했다. 자바 8에서 제공하는 Date-Time API JSR-310 스팩의 구현체를 제공한다. 디자인 철학 Clear Fluent Immutable Extensible 주요 API 기계용 시간 (machine time)과 인류용 시간(human time)으로 나눌 수 있다. 기계용 시간은 EPOCK (1970년 1월 1일 0시 0분 0초..
-
Optional API백기선(인프런 강의)/더 자바, Java 8 2020. 7. 12. 13:13
Optional 만들기 Optional.of() Optional.ofNullable() Optional.empty() Optional에 값이 있는지 없는지 확인하기 isPresent() isEmpty() (Java 11부터 제공) Optional에 있는 값 가져오기 get() 만약에 비어있는 Optional에서 무언가를 꺼낸다면? NoSuchElementException이 발생 Optional에 값이 있는 경우에 그 값을 가지고 ~~를 하라. ifPresent(Consumer) 예) Spring으로 시작하는 수업이 있으면 id를 출력하라. Optional에 값이 있으면 가져오고 없는 경우에 ~~를 리턴하라. orElse(T) 무조건 호출이 된다. 예) JPA로 시작하는 수업이 없다면 비어있는 수업을 리턴..
-
Optional 소개백기선(인프런 강의)/더 자바, Java 8 2020. 7. 11. 18:46
자바 프로그래밍에서 NullPointerException을 종종 보게 되는 이유 null을 리턴하니까! && null 체크를 깜빡했으니까! 메소드에서 작업 중 특별한 상황에서 값을 제대로 리턴할 수 없는 경우 선택할 수 있는 방법 예외를 던진다. (비싸다, 스택트레이스를 찍어두니까.) null을 리턴한다. (비용 문제가 없지만 그 코드를 사용하는 클리어인트 코드가 주의해야 한다.) (자바 8부터) Optional을 리턴한다. (클라이언트에 코드에게 명시적으로 빈 값일 수도 있다는 걸 알려주고, 빈 값인 경우에 대한 처리를 강제한다.) Optional 오직 값 한 개가 들어있을 수도 없을 수도 있는 컨네이너. 주의할 것 리턴값으로만 쓰기를 권장한다. (메소드 매개변수 타입, 맵의 키 타입, 인스턴스 필드 ..
-
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 무제한 스트림 제한하기..
-
Stream 소개백기선(인프런 강의)/더 자바, Java 8 2020. 7. 9. 20:52
Stream sequence of elements supporting sequential and parallel aggregate operations 데이터를 담고 있는 저장소 (컬렉션)이 아니다. Funtional in nature, 스트림이 처리하는 데이터 소스를 변경하지 않는다. 스트림으로 처리하는 데이터는 오직 한번만 처리한다. 무제한일 수도 있다. (Short Circuit 메소드를 사용해서 제한할 수 있다.) 중개 오퍼레이션은 근본적으로 lazy 하다. 손쉽게 병렬 처리할 수 있다. parallelStream 병렬을 쳐리해주는 스트림이지만 성능이 무조건 좋은건 아니다. 그 이유는 병렬을 처리하기위해서 쓰레드를 생성해야되는 비용이 필요하기 때문이다. 사용할 때는 데이터가 매우 방대하게 많을 때 ..
-
자바 8 API의 기본 메소드와 스태틱 메소드백기선(인프런 강의)/더 자바, Java 8 2020. 7. 9. 12:59
자바 8에서 추가한 기본 메소드로 인한 API 변화 Iterable의 기본 메소드 forEach() spliterator() Collection의 기본 메소드 stream() / parallelStream() removeIf(Predicate) spliterator() Comparator의 기본 메소드 및 스태틱 메소드 reversed() thenComparing() static reverseOrder() / naturalOrder() static nullsFirst() / nullsLast() static comparing() 참고 https://docs.oracle.com/javase/8/docs/api/java/util/Spliterator.html https://docs.oracle.com/jav..
-
인터페이스 기본 메소드와 스태틱 메소드백기선(인프런 강의)/더 자바, 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...