JaeniWorld
[Java] Java 8에 추가된 API 본문
Optional 클래스
java.util.Optional<T>라는 새로운 클레스를 제공하여 변수에 null을 할당하지 않고, Optional.empty메서드로 Optional<T>를 반환받아 할당한다.
따라서 Optional을 사용하면 값이 없는 상황이 소유한 데이터에 문제가 있는지 아닌지알 수 없기 때문에 모든 null참조를 Optional로 대체하는 것은 옳지않다.
Map과 FlatMap
Optional에서의 map도 Stream의 map과 비슷한 역할로 Optional이 값을 포함하면 map의 인수로 제공된 함수가 값을 바꾼다.
Flatmap역시 Stream의 것과 비슷한 역할을 지니는데 map()을 통해 변환을 하다보면 Optional<Optional<T>>와 같은 이차원 Optional을 반환한다. 이때 Flatmap을 통해 이차원 Optional을 일차원 Optional로 평준화 하여야 컴파일 할 수 있다.
Optional 언랩
Optional 인스턴스에 포함된 값을 읽는 방법은 다양하다.
- Get(): 가장 기본 적인 메서드이면서 가장 안전하지 않은 메서드이다. Optional 인스턴스에 포함된 값이 있다면 해당 값을 반환하지만, 없을 경우 NoSucElementException을 발생시키기 때문에 값이 반드시 있는 경우를 제외하고는 사용하지 않는 것이 바람직함
- orElse(T other): Optional 인스턴스에 포함된 값이 있다면 값을 반환하고, 존재하지 않는다면 other을 반환한다.
- orElseGet(Supplier<? Extends T> other): orElse에 대응하는 Lazy 버전의 메서드로 Optional의 값이 존재하지 않을 때만 Supplier가 실행된다.
- orElseThrow(Supplier<? Extends X> exceptionSupplier): Optional이 비어있을 때, 예외를 발생시키는 점에서 get과 비슷하지만 해당 메서드는 발생시킬 예외의 종류를 선택할 수 있다.
- IfPresemt(Consumer<? Super T> consumer): 값이 존재하면 인수로 넘겨준 동작을 실행할 수 있고 없으면 아무 일도 일어나지 않는다.
새로운 날짜와 시간 API
LocalDate / LocalTime / LocalDateTime
LocalDate는 시간을 제외한 날짜를 LocalTime은 시간을 표현하는 불변 객체로써, 시간대 정보를 포함하지 않는다. Now() 메서드를 통해서 시스템 시계의 정보를 이용해 현재 날짜 정보를 얻을 수 있다.
LocalDateTime은 LocalDate와 LocalTime을 모두 갖는 복합클래스로 날짜와 시간을 모두 표현할 수 있다.
Instance class
기계를 위해 연속된 시간에서 특정지점을 하나의 큰 수로 표현할 수 있는 클래스로 자바에서는 유닉스 에포크 시간을 기준으로 특정 지점까지의 시간을 초로 표현한다. 기계전용 유틸리티이기 때문에 인간이 읽을 수 있는 시간 정보는 제공하지 않는다.
'프로그래밍 > JAVA' 카테고리의 다른 글
[Java 8] 동작 파라미터화 (behavior Parameterization) (0) | 2021.01.18 |
---|---|
[Java] 디폴트 메소드(Default methods) (0) | 2021.01.12 |
[Java] Collection factory (0) | 2021.01.12 |
[Java] Stream 데이터 수집 (0) | 2021.01.11 |
[Java] Stream 연산 (0) | 2021.01.11 |