4. 기존 날짜와 시간 API
쓰레드에서 안전하지 않음
사용하기 불편, Date? Calendar?
일관성이 떨어짐
어정쩡한 Unixtime의 추상화
불규칙한 성능
헬로월드 “Java의 날짜와 시간 API” 참고
http://helloworld.naver.com/helloworld/645609
오픈소스 joda-time이 사실상 표준으로 사용
5. 새 API의 목표
일관된 API
쓰레드에서 안전, 불변값
직관적이고 사용하기 편한 API
LocalDate.now().with(TemporalAdjusters.lastDayOfMonth()).minusDays(2)
관련 표준 준수: ISO-8601, CLDR(Unicode Common
Locale Data Repository), TZDB( Time-Zone
Database)
UTC와 연계된 명시적 시간 척도
joda-time 참조
도메인 객체, 타입 안전:
DayOfWeek,
27. LocalDate, LocalTime
LocalDate: 특정 지역의 날짜, 시간대 정보 제외
LocalTime: 특정일의 시간, 시, 분, 초, 나노(10-9)초
LocalDateTime으로 날짜와 시간 결합 가능
다양한 날짜 연산 메서드 제공
생성
현재:LocalDateTime.now()
35. LocalDate, LocalTime
날짜 연산
with____: 특정 날짜 요소만 변경
LocalDateTime.now().withYear(1980)
plus____/minus____: 상대적인 날짜/시간 계산
LocalDateTime.now().plusDays(-10)
기간을 나타내는 도메인 객체:
40. 시간대
ZoneId/ZoneOffset
ZoneID: 지역 기반 시간대 표시
ZoneId.of(“Asia/Seoul”)
LocalDateTime + 시간대
LocalDateTime.now().atZone(ZoneId.of(“Asia/Seoul”))
ZoneOffset: 고정 상대값
ZoneOffset.of(+9:00)
ZonedDateTime
LocalDateTime/LocalTime + 시간대 시차
LocalDateTime.now().atOffset(ZoneOffset.of(+9:00))
OffsetDateTime/OffsetTime
41. JDBC 날짜/시간 개선
SQL Java 8
날짜 DATE LocalDate
시간 TIME LocalTime
일시 TIMESTAMP LocalDateTime
시간 + 시간대 TIME WITH TIMEZONE OffsetTime
일시 + 시간대
TIMESTAMP WITH
TIMEZONE
OffsetDateTime
57. LongAdder
기존 원자적으로 갱신되는 값 객체
새로 추가된 고성능 누산/계수기
- Java 8 Performance Improvements: LongAdder vs AtomicLong: http://skpla.net/fQAB
- Java 8 Concurrency: LongAdder: http://skpla.net/dZfC
LongAdder의 성능 밴치 마크
58. ForkJoinPool
Java 7에 추가된 ExecutorService 구현체
범용 최적화 공용 풀 추가: ForkJoinPool.commonPool()
성능 개선
병렬처리스트림(Parallel Stream) 구현에 사용
Arrays.parallelSort(…)에 사용
Is Java 8 the fastest JVM ever? Performance
benchmarking of Fork-Join: http://skpla.net/cZSO
성능 밴치 마크
155. 매개변수 메타데이터 리플랙션 지원
자바7까지, 생성자와 메서드의 매개변수 정보를 바이트 코드에서 삭제
매개변수 타입 정보 외에는 리플랙션을 통해서 얻을 수 없었음
자바 8에 java.lang.reflect.Executable.getParameters() 추가
Executable은 Method와 Constructor의 부모
-parameters 컴파일러 옵션으로 활성화
매개변수 메타 데이터: Parameter
어노테이션 정보, 수정자, 이름, 타입, 가변인자 여부
156. 자바 타입 어노테이션
JSR308
자바8부터 타입에도 어노테이션 지정 가능
클래스 인스턴스 생성, 타입 캐스팅, 인터페이스 구현 등에서 사용
컴파일러에 타입 확인 프로세서를 추가해서 처리
Checker Framework: http://types.cs.washington.edu/checker-framework/
자바의 타입 시스템보다 강화된 타입 확인 가능
@NotNull
198. World!'););
자바의 스크립트 엔진 매니저를 사용해 실행
터미널에서 jjs 명령을 사용해 실행
Nashorn: The New Rhino on the Block: http://skpla.net/ggNQ
Performance: Nashorn vs. Node : http://skpla.net/e9f4
성능 밴치마크
203. 255).count();
!
Files.lines(Path, Charset): 파일을 한 줄씩 읽어 Stream으로 반환
Files.lines(Path): lines(Path, Charset)과 동일, UTF-8 사용
각종 편의 메서드:
Files.readAllLines(Path),
Files.newBufferedReader(Path),
Files.newBufferedWriter(Path,OpenOption...),
Files.write(Path,Iterable,OpenOption...)