모던 자바 인 액션

[모던 자바 인 액션] 자바 8이 궁극적으로 추구하는 것.

chadongmin 2023. 9. 13. 15:36

자바와 스프링에 대한 공부를 하다보니 가장 중요한것은 결국 자바라는 언어를 자유자재로 다룰 줄 아는 능력이라는 것을 느끼게 되었다.

모던 자바 인 액션 책을 읽고 공부한 내용과 느낀 점을 기록하기 위해 포스팅 한다.

 

1. 자바 8에서 추구하는 것

모던 자바 인 액션에서 나오는 '자바8'에서 간결한 코드와 멀티코어 프로세서의 쉬운 활용이라는 두 가지 요구사항을 기반으로 한다. 

시간이 흐르면서 대용량 데이터를 빠른 시간내에 처리할 수 있는 프로그래밍 언어가 필요했고, 자바로는 역부족이었기 때문에 자바 8에서는 여러가지 방법을 동원했다. 그 과정에서 자바 8이 선택한 내용이 바로 모던 자바 인 액션에서 다루고 있는 내용이다. 

동작 파라미터화, 람다식, 스트림 등 여러 방식이 있다.

 

처음에는 모던 자바 인 액션의 내용이 너무 어려워서 내가 호기심이 들고 먼저 알고싶은 내용부터 읽어야겠다고 생각했다. 하지만 난 곧 이 방식이 잘못되었다는 것을 바로 깨달았다. (스트림부터 공부해서 토이프로젝트에서 스트림을 사용해봐야겠다고 생각했는데, 너무 어려워서 실패로 돌아갔다). 가장 베이직한 내용부터 시작해서, 이전 장에서 설명한 것을 근간으로 새로 나온 방식들이 다음 장에 계속 서술된다.


이를테면 앞에서 말한 대용량 처리를 위해서 자바에서는 스트림이란 것을 도입한다.

스트림이란 한 번에 한 개씩 만들어지는 연속적인 데이터 항목들의 모임이다. 여러 개의 명령어가 병렬적으로 실행될 수 있도록 하는 기법이다. (개인적으로 컴퓨터 구조 시간에 배우는 파이프라이닝의 원리로 생각하고 이해했다).

핵심은 한번에 한 항목을 처리했지만, 스트림으로 처리하면 스레드를 사용하지 않으면서 병렬성을 얻을 수 있다는 것이다.


이 병렬성을 위한 스트림을 사용하기  위해서 나오는 내용이 바로 '동작 파라미터화'이다. 

동작 파라미터화란 메서드를 다른 메서드의 인수로 넘기는 것이다. 왜 메서드를 다른 메서드의 인수로 넘길까?

바로 변화하는 사용자의 요구에 대응하기 때문이다. 특정 메서드를 구현해놓으면, 사용자의 요구사항이 변경될때마다 고쳐야 할 부분이 너무 많이 생기게 되고 시시각각 변화하는 요구에 대응할 수 없게 된다. 그럼 애자일한 개발을 못하게 되는 것이다.


동작 파라미터의 핵심은 시시각각 변화할 수 있는 요구사항에 대응하기 위해 함수의 호출을 뒤로 미루는 것이다. 

호출을 뒤로 미뤄서 아직 어떻게 실행할지 결정하지 않고 있다가 함수가 호출되는 시점에 결정하는 것이다. 이 기법은 전략 패턴을 기반으로 하고 있다.


 

하지만 이 동작 파라미터화를 사용하면 발생하는 단점이 존재한다. 바로 코드가 지저분해진다는 것이다. 이 문제를 해결하기 위해 나온것이 바로 '람다식'이다. 

 

정확하게 모던 자바 인 액션의 목차와 일치한다. 

 

다음 포스팅은 동작파라미터화 부터 람다식까지의 깊은 내용을 정리해서 포스팅 할 것이다.

책의 내용이 깊어서 아직 이해가 잘 안되는 부분이 있지만 일단 람다식까지는 완벽히 소화할 수 있도록 해야겠다. 그리고 그 다음 장부터 다시 이해하기 시작할 것이다.

 

자바 책을 보면서 책이 재밌다고 느낀 적은 처음이었다. 

공부가 재밌다고 느껴진다.