[도서리뷰] 이것이 자바다
목차
도서 정보
배경
java라는 언어 자체를 대학생 때부터 다뤄봤으니 충분히 다룰 줄 알고 충분한 이해와 기본기도 지니고 있다고 생각하고 있었지만, 최근 들어 언어 자체에 대한 이해가 부족하고 제대로 사용하지 못하고 있는 듯한 느낌을 많이 받기 시작했다. 업무가 늘어나고 작성하는 코드의 양 자체가 많아지면서, 다양하고 복잡한 프로그래밍 문제들을 만나기 시작했고 더 이해하기 쉽고 좋은 퀄리티의 코드를 작성하고 싶은 욕심이 생겼지만 내가 가지고 있는 지식만으로는 해결하는데 부족하다고 느꼈다. 또한 객체지향, 도메인 주도 개발, 클린 코드 등 심화된 지식들을 이해해보려고 해도 잘 이해가 되지 않고 설사 이해가 된다고 해도, 오히려 남들보다 더 많은 시간이 걸리는 듯한 인상을 받았다.
이런 상황 속에서 부족함을 메꾸고 발전하기 위해서는 결국 탄탄한 기본기가 필수적이라고 느꼈고, 다시 기본적인 내용부터 다뤄보는 게 좋을 것 같아 java의 가장 기초적인 부분부터 다루고 있는 이 책을 구매하고 공부하기 시작했다. 900페이지를 넘어가는 어마어마한 분량을 가지고 있어 처음에는 걱정도 됐지만 막상 시작해 보니 생각만큼 그렇게 오래 걸리지는 않았다. part 1은 기본적인 프로그래밍 문법을 다루고 있어서 이 부분은 생략하고 part 2부터 봤는데 책 내용을 모두 살펴보는데 대략 1달 반 정도 걸린 것 같다.
내용
책은 크게 다음과 같이 4가지 파트로 구성되어 있다.
- 자바 언어 기초
- 객체지향 프로그래밍
- 라이브러리 활용
- 데이터 입출력
첫 번째 파트인 자바 언어 기초는 기본적인 프로그래밍 문법을 다루고 있고, 두 번째 파트인 객체지향 프로그래밍부터 조금 더 java에 특화된 내용들로 구성되어 있었다. 세 번째 파트 라이브러리 활용에서는 Java 8부터 제공되는 collection, stream, lambda 등을 소개하면서 동작원리와 그 활용법에 대해 다루고, 마지막 파트 데이터 입출력에서는 앞서 소개한 내용들을 활용하여 파일 입출력, 네트워크 입출력을 통한 TCP 채팅 프로그램, JDBC를 통한 게시판 구현 등 java를 응용한 프로그램 개발 방법을 다루고 있다.
기본적인 변수 선언, 클래스 및 인터페이스 선언, 오버라이딩부터 상속, 익명 객체, 접근 제한자, 예외처리, java에 특화된 라이브러리 사용법 등 java와 관련된 모든 기초적인 지식들은 이 책에서 다루고 있다고 봐도 무방하다. 특히 초판이 발행된 후 시간이 조금 지난 기초 도서임에도 최근 LTS 버전인 java 17까지 다루는 등 그 내용을 광범위하게 다루고 있어서 더욱 좋았던 것 같다.
책을 보면서 노션에 기록해 둔 내용 중 일부인데 이 정도로 java의 모든 개념들은 다루고 있다. 책이 다루고 있는 모든 개념들을 하나하나 이 포스트에 작성해 두는 것보단, 거의 java의 모든 기초적인 내용을 다루고 있다고 보면 무방할 것 같다.
(따라서 만일 그러한 부분들에서 갈증을 느끼고 있다면 이 책만 봐도 충분히 해소될 것이라 생각한다.)
책 후반부로 갈수록 멀티스레드, 컬렉션 자료구조, 람다식, 스트림 등 복잡하고 심화된 개념들을 다루고 있어 학습 속도가 조금 지체되었지만, 도표와 그림들로 친절하게 설명이 되어 있어서 그리 어렵지 않게 이해할 수 있었다. 아래는 part03. 라이브러리 활용에서 17번째 챕터인 스트림 요소 처리 중 요소 병렬 처리에 대해 책에서 소개한 내용을 보고 내가 기록해 둔 내용인데, 여기에 들어간 이미지는 모두 책에 삽입된 삽화일 정도로 이미지와 함께 친절하게 설명이 되어있었다.
다만 기초적인 개념들을 위주로 다루고 있어서 java언어의 심화된 부분까지는 고민해 볼 수는 없어서 아쉬움이 남았지만, 광범위한 영역을 다루는 책인 만큼 어쩔 수 없는 부분인 것 같다. 사실 기초적인 개념을 다루는 책이라는 점에서 책의 목적에 충실하고 있다는 생각이 들었고 이런 아쉬움이 남은 부분들은 모던 자바 인 액션, 이펙티브 자바 등 심화 개념을 다루는 책을 통해서 익히면 충분히 해소될 것이라고 생각했다.
후기
워낙 관련 개념들이 자세하게 소개되어 있어서 이해하는 데에 큰 어려움이 없었다. 오히려 술술 읽혔고 예제 코드 작성도 그리 어렵지 않았던 것 같다. 또한 책에서 소개한 내용들을 단순하게 읽고 그냥 넘어가지 않고 다른 사람에게 설명할 수 있을 정도로 완전히 내 것으로 만들어보려고 했고, 책에선 다루지 않는 내용들에 대한 궁금증도 생겨 추가적으로 관련한 내용들을 찾아보면서 더 깊은 이해를 할 수 있었던 것 같다.
(이렇게 찾은 내용들은 모두 블로그에 기록해 두었고 그 목록은 다음과 같다.)
- [Java] JVM 구조와 메모리 사용영역, Java 쓰레드와 메모리 구조
- [Java] 클래스 로더(Class Loader)의 기능과 역할
- [Java] 추상 클래스와 인터페이스의 개념과 차이점
- [Java] 멀티모듈 프로젝트(응용 프로그램 모듈화하여 구성하기)
- [Java] 예외와 예외 처리
- [Java] Streams API의 장점과 사용시 주의사항
세 번째 파트인 라이브러리 활용에서 멀티스레드 환경과 관련된 내용이나 마지막 파트인 데이터 입출력에서 다루는 채팅 프로그램 구현 등에서는 불가피하게 CS 지식들이 필요했지만 그 개념들을 한 번씩 짚고 넘어가고 있어서, 만일 비전공자가 java언어를 공부하는 경우에도 이 책을 본다면 충분히 쉽게 학습할 수 있을 것 같다. 오히려 나도 잊고 있었던 중요한 CS 지식들을 다시 상기할 수 있어서 좋았던 것 같다.
만일 프로그래밍을 처음 익혀보는 비전공자거나 나처럼 어느 정도 java로 개발을 해봤지만 기본기가 부족하다고 느끼는 상황이라면 이 책을 한번 훑어보면 좋을 것 같다.