이것이 자바다 본문

Programming/Java

이것이 자바다

halatha 2018. 10. 30. 09:34

한줄 요약

Java를 시작해 빠른 시일 내에 코드를 작성하기 원하는 초보자들에게 최적화된 책

장점

소스코드와 설명이 자세하다. API에 대해 사용 방법을 바로 알고 싶을 때 매우 유용하다.

단점

초급 대상이긴 하지만, 간단하게라도 설명이 있으면 좋을 중요한 부분들이 종종 빠진 경우가 있다.

총평

택배로 온 책을 보고 두꺼워서 조금 놀랐는데, 1/2권 분책이 가능한 형태였다. 두께로만 봐도 내용이 정말 많겠다는 생각이 들었고, 읽어보니 정말 많은 내용을 넣으려는 노력을 했음을 알 수 있었다.

1권은 자바의 기본 문법과 간단한 OOP에 해당하는 부분이라 죽 읽고 넘어갔는데, 일단 읽으면서 받은 첫 인상은 소스코드가 자세히 나와 있어 좋았고, 설명도 비교적 세부적인 부분까지 기술한 듯 해서 괜찮았다. 중간 중간 설명이 조금 거슬리는 경우가 있는데, 자바를 실무에서 사용한지 오래되어 내 생각이나 기억이 틀릴 수도 있어 일단 넘어갔다.

2권부터는 직접 소스코드를 입력하면서 실행해보고 설명을 읽었다. 예제 이름이 ~~Example.java로 끝나는 이름을 갖는 예제들은 모두 main method를 가지고 있어 테스트할 수 있는 예제들이다.

환경 설정

Oracle은 license 문제 때문에 괜히 꺼려져서 adoptopenjdk를 설치하고, 주로 intelliJ에서 실행했다. 1장을 보면 개발 환경 설명을 상세히 하는 점은 좋은데, 윈도우만 다루고 있고, IDE로는 Eclipse를 선택했다. 아마 저자의 경력을 볼 때 SI 환경을 고려해서 그런 거 같은데, 사실 최근에 프로그래밍 서적은 개발 환경을 설명할 때 간단하더라도 윈도우, 맥, 리눅스를 모두 설명하는 경우가 많다는 점에서 이 부분은 단점이라고 생각한다. IDE도 (여전히 2위이긴 하지만) 이미 Eclipse의 시대가 지난 지 한참 되었는데, intelliJ를 선택하지 않은 점은 특정 환경을 고려했다는 생각을 할 수 밖에 없다.

adoptopenjdk 설치 후 version 확인

또 네이버 카페(https://cafe.naver.com/thisisjava)에서 저자가 굉장히 열심히 질문에 답변을 해준다는 글을 읽게 되었는데, 이 점은 매우 장점이지만, 네이버 카페에 가입을 하고 등업을 해야만 한다는 점은 매우 불편했다.

소스 코드 역시 한빛 홈페이지에서 제공하고 있긴 하지만(http://www.hanbit.co.kr/store/books/look.php?p_code=B1460673937), github repository가 없다는 건 굉장히 의외이다.

예제

스크린샷의 왼쪽에 보면 알 수 있듯이 ch12, ch13, … 식으로 package를 구성해 예제들을 실행해봤다.

ch13.

WildCardExample.java, p667

책을 찾아봐도 Person, Worker, Student, HighStudent class는 없는데, 카페에 있는 건지 아니면 앞에서 있었는지 책이 두꺼워서 다시 확인은 못했다. class는 간단하게 만들어서 하면 되기는 하지만, 초보자들에게는 당황스러울 수 있는 부분

초급대상이긴 하지만 generic 이야기하면서, covariance/contravariance라는 게 있다 정도는 이야기 해줘야할 거 같은데… 이 부분은 뭐가 맞는지는 잘 모르겠음. 하지만 용어라도 알아야 나중에 찾아볼 수 있지 않을까?

https://dzone.com/articles/covariance-and-contravariance

ch14.

MyFunctionalInterfaceExample.java, p684

특히 lambda같이 예전에는 언어 스펙에 없어 해보지 않았던 부분을 이해하는 데 도움이 많이 되었다. 개인적으로는 일단 실행해볼 수 있어야 이해하기 쉽다고 생각하기 때문이다. 다만 이런 스타일의 책의 경우 그 이면의 원리를 이해하지 못하면 응용을 하기 어려울 수 있는데 이런 부분은 책을 보는 사람들이 결국 다른 책이나 강의를 통해 스스로 채워야 하는 부분이다.

ch15.

자료구조와 알고리즘의 중요성은 두말 할 필요가 없기 때문에 가장 중요한 챕터 하나를 선택하자면 15장이 되지 않을까? 기본 사용법을 충실히 설명했기 때문에 초보자들에게는 매우 중요하고 계속해서 참고할 부분이다.

StackExample.java, p769
QueueExample.java, p770

ch16.

프로그래머가 초보를 벗어나 중급으로 갈 수 있느냐를 평가할 때 중요한 점 하나가 concurrency/parallel에 대해 이해하느냐이다. 이 부분을 제대로 배우려면 사실 이쪽의 바이블 격인 Java Concurrency in Practice http://jcip.net/ 를 봐야 하기 때문에 여기서는 기본적인 API가 뭐가 있고 이렇게 동작한다 정도만 알아도 충분하다.

ParallelExample.java, p786
StreamPipelinesExample.java, p796

ch17.

javafx를 별도로 라이브러리를 설치하고 추가 import가 필요한데, 현재 사용중인 adpotopenjdk와 충돌이 없는지를 제대로 확인하지 못해(Oracle JDK가 기본) 이 장은 지나갔다. intelliJ에서 javafx 설치를 위한 문서는 다음 link 참조.

https://www.jetbrains.com/help/idea/preparing-for-javafx-application-development.html

ch18.

UdpSendExample.java, UdpReceiveExample.java, p1088

ch19.

AsynchronousFileChannelWrite.java, p1146

결론

많은 설명과 예제를 통해 빠르게 코드를 작성하고 실행해볼 수 있다는 점에서 좋은 책이지만, 초보를 벗어나기 위해서는 너무 많이 의존해서는 안 되는 종류의 책이기도 하다. 책에 나온 예제를 통해 동작하는 코드를 얻을 수 있겠지만, 여기에만 의존하면 정작 필요한 형태로 변형해서 쓰는 거 조차 어려움을 느낄 수 있기 때문이다. 이 책을 읽은 후 OOP에 대한 부분이건, data structure & algorithm에 대한 부분이건 바로 기본적인 부분을 채워야 한다.

Comments