본문 바로가기
728x90
반응형

우리 대학교의 IT인들을 위한 소통방에서 내가 스터디를 꾸려서 스터디장이 되었다.

스터디의 목록은 토비스프링, 모던자바인액션, 디자인패턴, 이펙티브자바, ORM표준JPA가 있었는데

인원 사정상 토비스프링과 모던 자바인액션을 진행하게 되었다.

나머지는 이후 또는 멀티로 나혼스(나 혼자 하는 스터디)를 진행해볼까 한다..ㅎㅎ

스케쥴(일정, 어느 부분 공부할것인지)을 정하는 데 애 먹기도 했고 공부할 양과 난이도도 있는 편이지만 끝까지 마무리를 잘했으면 좋겠다.

항상 어떤 공부를 시작하기 전에, 시작하는 도중에, 끝맺음 도중에 기억을 떠올려야 하는 내용이 있다.

그것은 바로 자기가 공부하는 책의 목차이다..!!

목차를 외우는 것만큼 공부에서(특히 책) 중요한 것은 없다고 생각한다.

그리고 WHY? 왜? 질문이다. 모든 것에서 왜? 하나로 나올 여러가지 가지 질문들이 많다. 왜 좋은지?(장점) 왜 나쁜지?(단점) 왜 공부하는지?(이유)

그래서 시작에 앞서 2가지를 적어보려고 한다.

1. Why? 모던 자바? Why do you study Modern java?

왜 아직도 자바는 변화하는가?

기술의 흐름에 맞추지 못하는 언어는 다른 경쟁 언어에 비해 도태될 수 밖에 없다.

하드웨어가 발전함에 따라 빅데이터를 다루게 되었고, 멀티코어 컴퓨터나 컴퓨팅 클러스터를 이용해서 빅데이터를 효과적으로 처리할 필요성이 커졌다. 그러나 자바 8이전 버전에서는 이러한 요구사항을 만족시킬 수 없었다.

자바 8 이후 부터는 간결한 코드, 멀티코어 프로세서의 쉬운 활용이라는 요구사항에 맞춰 진화하였다.

 

다음은 커스텀 Comparator 객체의 람다 적용 전/후 모습이다

* 적용 전

Comparator<Apple> byWeight = new Comparator<Apple>() {
	public int compare(Apple a1, Apple a2) {
    	return a1.getWeight().compareTo(a2.getWeight());
    }
};

 

* 적용 후

Comparator<Apple> byWeight = 
	(Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight());

어떤가? 놀랍지 않은가? 보기도 훨씬 쉬워졌고, 코드의 줄 수도 줄어들었다. 앞으로 간결한 코드, 가시적인 코드, 병렬성이 살아있는 코드들을 배울 것이다.

2. 목차

[ PART I 기초 ]

CHAPTER 1 자바 8, 9, 10, 11 : 무슨 일이 일어나고 있는가?
1.1 역사의 흐름은 무엇인가?
1.2 왜 아직도 자바는 변화하는가?
1.3 자바 함수
1.4 스트림
1.5 디폴트 메서드와 자바 모듈
1.6 함수형 프로그래밍에서 가져온 다른 유용한 아이디어
1.7 마치며

CHAPTER 2 동작 파라미터화 코드 전달하기
2.1 변화하는 요구사항에 대응하기
2.2 동작 파라미터화
2.3 복잡한 과정 간소화
2.4 실전 예제
2.5 마치며

CHAPTER 3 람다 표현식
3.1 람다란 무엇인가?
3.2 어디에, 어떻게 람다를 사용할까?
3.3 람다 활용 : 실행 어라운드 패턴
3.4 함수형 인터페이스 사용
3.5 형식 검사, 형식 추론, 제약
3.6 메서드 참조
3.7 람다, 메서드 참조 활용하기
3.8 람다 표현식을 조합할 수 있는 유용한 메서드
3.9 비슷한 수학적 개념
3.10 마치며

[ PART II 함수형 데이터 처리 ]

CHAPTER 4 스트림 소개
4.1 스트림이란 무엇인가?
4.2 스트림 시작하기
4.3 스트림과 컬렉션
4.4 스트림 연산
4.5 로드맵
4.6 마치며

CHAPTER 5 스트림 활용
5.1 필터링
5.2 스트림 슬라이싱
5.3 매핑
5.4 검색과 매칭
5.5 리듀싱
5.6 실전 연습
5.7 숫자형 스트림
5.8 스트림 만들기
5.9 마치며

CHAPTER 6 스트림으로 데이터 수집
6.1 컬렉터란 무엇인가?
6.2 리듀싱과 요약
6.3 그룹화
6.4 분할
6.5 Collector 인터페이스
6.6 커스텀 컬렉터를 구현해서 성능 개선하기
6.7 마치며

CHAPTER 7 병렬 데이터 처리와 성능
7.1 병렬 스트림
7.2 포크/조인 프레임워크
7.3 Spliterator 인터페이스
7.4 마치며

[ PART III 스트림과 람다를 이용한 효과적 프로그래밍 ]

CHAPTER 8 컬렉션 API 개선
8.1 컬렉션 팩토리
8.2 리스트와 집합 처리
8.3 맵 처리
8.4 개선된 ConcurrentHashMap
8.5 마치며

CHAPTER 9 리팩터링, 테스팅, 디버깅
9.1 가독성과 유연성을 개선하는 리팩터링
9.2 람다로 객체지향 디자인 패턴 리팩터링하기
9.3 람다 테스팅
9.4 디버깅
9.5 마치며

CHAPTER 10 람다를 이용한 도메인 전용 언어
10.1 도메인 전용 언어
10.2 최신 자바 API의 작은 DSL
10.3 자바로 DSL을 만드는 패턴과 기법
10.4 실생활의 자바 8 DSL
10.5 마치며

[ PART IV 매일 자바와 함께 ]

CHAPTER 11 null 대신 Optional 클래스
11.1 값이 없는 상황을 어떻게 처리할까?
11.2 Optional 클래스 소개
11.3 Optional 적용 패턴
11.4 Optional을 사용한 실용 예제
11.5 마치며

CHAPTER 12 새로운 날짜와 시간 API
12.1 LocalDate, LocalTime, Instant, Duration, Period 클래스
12.2 날짜 조정, 파싱, 포매팅
12.3 다양한 시간대와 캘린더 활용 방법
12.4 마치며

CHAPTER 13 디폴트 메서드
13.1 변화하는 API
13.2 디폴트 메서드란 무엇인가?
13.3 디폴트 메서드 활용 패턴
13.4 해석 규칙
13.5 마치며

CHAPTER 14 자바 모듈 시스템
14.1 압력 : 소프트웨어 유추
14.2 자바 모듈 시스템을 설계한 이유
14.3 자바 모듈 : 큰 그림
14.4 자바 모듈 시스템으로 애플리케이션 개발하기
14.5 여러 모듈 활용하기
14.6 컴파일과 패키징
14.7 자동 모듈
14.8 모듈 정의와 구문들
14.9 더 큰 예제 그리고 더 배울 수 있는 방법
14.10 마치며

[ PART V 개선된 자바 동시성 ]

CHAPTER 15 CompletableFuture와 리액티브 프로그래밍 컨셉의 기초
15.1 동시성을 구현하는 자바 지원의 진화
15.2 동기 API와 비동기 API
15.3 박스와 채널 모델
15.4 CompletableFuture와 콤비네이터를 이용한 동시성
15.5 발행-구독 그리고 리액티브 프로그래밍
15.6 리액티브 시스템 vs 리액티브 프로그래밍
15.7 마치며

CHAPTER 16 CompletableFuture : 안정적 비동기 프로그래밍
16.1 Future의 단순 활용
16.2 비동기 API 구현
16.3 비블록 코드 만들기
16.4 비동기 작업 파이프라인 만들기
16.5 CompletableFuture의 종료에 대응하는 방법
16.6 로드맵
16.7 마치며

CHAPTER 17 리액티브 프로그래밍
17.1 리액티브 매니패스토
17.2 리액티브 스트림과 플로 API
17.3 리액티브 라이브러리 RxJava 사용하기
17.4 마치며

PART VI 함수형 프로그래밍과 자바 진화의 미래

CHAPTER 18 함수형 관점으로 생각하기
18.1 시스템 구현과 유지보수
18.2 함수형 프로그래밍이란 무엇인가?
18.3 재귀와 반복
18.4 마치며

CHAPTER 19 함수형 프로그래밍 기법
19.1 함수는 모든 곳에 존재한다
19.2 영속 자료구조
19.3 스트림과 게으른 평가
19.4 패턴 매칭
19.5 기타 정보
19.6 마치며

CHAPTER 20 OOP와 FP의 조화 : 자바와 스칼라 비교
20.1 스칼라 소개
20.2 함수
20.3 클래스와 트레이트
20.4 마치며

CHAPTER 21 결론 그리고 자바의 미래
21.1 자바 8의 기능 리뷰
21.2 자바 9 모듈 시스템
21.3 자바 10 지역 변수형 추론
21.4 자바의 미래
21.5 더 빠르게 발전하는 자바
21.6 결론

부록
_APPENDIX A 기타 언어 업데이트
_APPENDIX B 기타 라이브러리 업데이트
_APPENDIX C 스트림에 여러 연산 병렬로 실행하기
_APPENDIX D 람다와 JVM 바이트코드

 

자 이제 앞으로 제대로 공부를 시작해보자!!

728x90
반응형

댓글