////
Search
🙄

1장 자바에 무슨일이?

자바는 버전 8 부터 혁신적인 일이 일어나고 있는 것 같다.
내 입장에서는 스레드를 배울 때 지옥이 여기구나.. 라는 걸 알았다.
근데 8 버전 부터는 이러한 불편함, 어려운 내가 아직 겪어보지 못한 변경사항? 등이 엄청나게 변화 했다.
이러한 변경에서 가장 주의 깊게 볼만한 변경 사항은 "스트림, 동작파라미터화, 병렬성, 인터페이스의 디폴트 메서드"라 생각한다.

스트림

스트림이란 한 번에 한 개씩 만들어지는 연속적인 데이터 항목들의 모임이다. 이론적으로 프로그램은 입력 스트림에서 데이터를 한개씩 읽어 들이며 마찬가지로 출력 스트림으로 데이터를 한 개씩 기록한다. 즉, 어떤 프로그램의 출력 스트림은 다른 프로그램의 입력 스트림이 될 수 있다.

메서드에 코드를 전달하는 기법(동작 파라미터화)

코드 일부를 API로 전달하는 기능이다. 말 그대로 동작을 파라미터화 시키는 작업이다. 뭔가 객체를 인수(파라미터)로 전달하는 방식을 생각했다면 조금 다르다. 자바스크립트에서 많이 볼 수 있는 것으로 동작(메서드)를 인수로 전달하는 방법이다.

병렬성과 공유 가변 데이터

보통 다른 코드와 동시에 실행 하더라도 안전하게 실행 할 수 있는 코드를 만들려면 공유된 가변 데이터에 접근하지 않아야 한다. 이러한 하수를 순수 함수, 부작용 없는 함수, 상태 없는 함수라고 부른다. 공유되지 않는 가변 데이터, 메서드, 함수 코드를 다른 메서드로 전달하는 두가지 기능은 함수형 프로그래밍의 개념이다.

인터페이스의 디폴트 메서드

어찌하면 기존의 구현을 고치지 않고도 이미 공개된 인터페이스를 변경할 수 있을까? 라는 의문에서 출발한다. 상속 구조에서 본다면 내가 인터페이스 내부에 특정 메소드를 추가한다면 모든 구현체에 이를 구현해주어야할 것이다. 이는 고통이다. 그래서 이를 대처할 내부의 default 메소드를 추가해준 것 이다. 하지만 이는 다중 상속 문제를 일으켰다.