-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
Discussed in https://github.com/orgs/Study-2-Modern-Java-In-Action/discussions/15
Originally posted by coalong June 11, 2023
[CHAPTER 1] - 자바 8, 9, 10, 11 : 무슨 일이 일어나고 있는가?
CHAPTER 1 은 자바가 꾸준하게 변화하는 이유와 추가된 핵심 기능을 짚어주고 있다.
앞으로 이 책을 어떻게 스터디해야 할지 방향성을 잡을 수 있는 챕터라 생각한다.
Chaoter 1.
1.1 역사의 흐름은 무엇인가?
- 자바 8에서는 가장 많은 변화가 일어났는데 크게
간결한 코드와멀티코어 프로세서의 쉬운 활용를 목표로 했다. - 자바 8부터 지원하는 새로운 기술 3가지
- 스트림 API
- 메서드에 코드를 전달하는 기법 (메서드 참조와 람다)
- 인터페이스의 디폴트 메서드
자바는 병렬 실행 환경을 쉽고 안전하게 구성하기 위해 지속적인 변화를 해왔다.
- Java 1 : 스레드, Lock, 동기화, wait/notify 지원
- Java 5 : java.util.concurrent 라이브러리, thread pool, 실행자(Executor) 프레임워크 지원
- Java 7 : 고성능 병렬 분해(parallel decom-position) 프레임워크인 포크-조인(fork-join) 패키지를 추가
- Java 8 : parallel 메서드를 한 번 호출하면 파이프라인을 병렬 실행할 수 있는
스트림 API지원
자바 8의 새로운 변화에 대한 배경을 알 수 있었고, 특히 함수형 프로그래밍을 하기 위해 꼭 이해하고 사용해야겠다.
1.2 왜 아직도 자바는 변화하는가?
- 프로그래밍 언어도 마치 커다란 생태계와 같아서 진화하지 않는 기존 언어는 사장되기 쉽다.
- 그럼에도 자바가 20년 넘게 많은 프로그래머에게 선택받을 수 있었던 이유는 지속적인 진화를 했기 때문이다.
- 가장 큰 변화인 자바 8 에서는 크게 세가지 개념을 볼 수 있다.
- 스트림 처리
- 동작 파라미터화로 메서드에 코드 전달하기
- 병렬성과 공유 가변 데이터
1.3 자바 함수
-
자바 8에서는 함수를 새로운 값의 형식으로 추가했다.
- 이게 어떤 의미이고 왜 필요했을까?
-
런타임에 메서드를 전달 할 수 있도록, 즉 메서드를 일급 시민으로 만들어 프로그래밍에 유용하게 활용했다. -
일급 값(또는 일급 시민) == 바꿀 수 있는 값
- int, double 등의 Primitive type 과 객체(객체의 참조) 는 모두 일급 시민이다.
- 메서드와 클래스는 그 자체로 값이 될 수 없고 이급 시민이다.
1.4 스트림
- 스트림 API 를 이용하면 컬렉션 API 와는 상당히 다른 방식으로 데이터를 처리할 수 있다.
이를 적절하게 사용하는 것이 중요할 것이다.
- 컬렉션은 어떻게 데이터를 저장하고 접근할지에 중점을 두는 반면 스트림은 데이터에 어떤 계산을 할 것인지 묘사하는 것에 중점을 둔다.
스트림은 스트림 내의 요소를 쉽게 병렬로 처리할 수 있는 환경을 제공한다.
1.5 디폴트 메서드와 자바 모듈
- 디폴트 메서드란?
구현 클래스에서 구현하지 않아도 되는 메서드를 인터페이스에 정의한 것.
- 왜 나오게 되었을까?
디폴트 메서드가 나오기전에는 패키지의 인터페이스를 바꿔야 하는 상황에서 인터페이스를 구현하는 이전의 모든 클래스를 바꿔야 하는데 이는 불가능에 가까웠고 이를 해결하기 위해 구현하지 않아도 되는 메서드를 추가했다.
1.6 함수형 프로그래밍에서 가져온 다른 유용한 아이디어
- 스트림 API 는 함수형 프로그래밍의 핵심적인 아이디어 2가지를 활용한다.
- 메서드와 람다를 일급 시민으로 사용한다.
- 가변 공유 상태가 없는 병렬 실행을 이용해서 효율적이고 안전하게 함수나 메서드를 호출할 수 있다.
- 자바 8 의 NullPointer 예외를 피할 수 있도록 도와주는 Optional 클래스
회고
- Java 8 에 등장한 여러 기능에 대해 왜 나왔는지 배경을 생각할 수 있어서 좋았다.
- 지금까지는 제대로 이해하지 않고 IDE 에 의존해서 코드를 작성했었는데, 이 책을 스터디하고 나면 함수형 프로그래밍을 생각하면서 개발할 수 있도록 노력해야겠다.
- 사실 chapter 1 을 가볍게 읽을 수 있을 줄 알았는데, 이해하기 어려운 부분이 많았고 스터디를 완주하고 나서 다시 챕터 1을 봐야겠다.