[리뷰] 혼자 공부하는 자바



개요

본 리뷰는 한빛미디어 출판사 "혼자 공부하는 자바"를 읽고 얻은 지식을 정리한 글입니다.

이 책을 읽으며 Java와 함께한 20년을 돌이켜보았다.


처음 Java와 만난건 2000년 어느날 프로그래밍 수업 시간이었다. 리뷰는 안하고 왜 갑자기 추억을 회상하는지 의아해 하실 분들이 계실지 모르겠다. 책을 읽기 전에 20년 간 Java를 익혀왔던 프로그래머의 회상과 푸념을 듣는다면 책을 읽으면서 본인이 어떤 학습 위치에 있는지 파악하기 쉬울 것이기에 향후 학습방향에 도움이 된다는 의미로 재미있게 읽어주셨으면 좋겠다.

  • 게시판과 메모장
    요즘 학부 프로그래밍 수업에서도 메모장 또는 웹 게시판을 만들라는 과제가 부여되는지 모르겠다. 처음으로 GUI 방식으로 메모장을 만들면서 느끼는 희열은 대단했다. 내가 만든 프로그램을 내가 유용하게 쓰고 더불어 누군가가 편리하게 써주는 것에 보람을 느꼈다. 다만 데스크탑 위에서 돌아가는 GUI 개발에 있어 Java는 실망감을 안겨주기도 했다. 주로 Applet 또는 Swing을 활용하였는데 당시 이클립스가 대세가 아니었던 시절이었기에 Kawa Java라는 IDE를 쓰곤 했다. 지금도 마찬가지로 데스크탑 프로그램으로는 별로 추천하고 싶지 않은 언어이다. 게다가 "exe" 파일을 만드는 데 있어서도 너무 낯설었는데 Java가 깔려있어야 돌아갈 수 있다는 사실에 조금 불만이 있었다. JVM위에서 독립성을 보장하는 언어이니 당연한 얘기일진데 초보때는 Visual C++과 달리 UI 컴포넌트 배치도 불편하고, 배포 및 설치도 생소한 이 프로그램에 대한 안타까움을 느꼈던 것도 사실이다. 물론 이 부분에 느끼는 단점은 지금도 마찬가지이다.ㅎㅎ 대신 WEB, Network 기반의 개발에 있어서는 차원이 다른 고급 언어이다. C언어로 게시판을 개발했던 필자는 당시 초보자로서 웹에서 인코더/디코더를 구현하는 것이 얼마나 어려운 일이었는지 모른다. 그런데 Java는 원했던 모든것이 라이브러리화 되어있어 편하게 웹 프로그램을 개발할 수 있었고, 채팅방 Back-End 로직을 만들면서 네트워크 통신을 안전하게 보장하고 Thread등을 활용하여 성능을 높이고 동기화 할 수 있다는 점에 큰 매력을 느꼈다.

  • SCJP1.4 자격증 취득
    지금은 이 자격증이 사라지고 Oracle사의 다른 자격증으로 대체되었다고 들었다. Dump라는 일종의 족보(?)를 구하고 달달 외우기만 하면 붙을 수 있었던 시험. 비록 문제와 답이 영어로 되어있다는 점이 어색하긴 해도 합격이 크게 어려운 시험은 아니었다. 비록 취득이 쉬운 자격증이었지만 국제공인 프로그래밍 자격증 중에는 꽤나 인기있는 자격증이었고, 나름 Class, 상속, 인터페이스, 추상화, 다형성, 예외처리 등 객체지향의 개념을 다잡고 정리하는데 좋은 계기가 되었다.

  • 대학 전산원 근로장학생
    비록 신분은 근로장학생으로 미천(?)했으나 2000년 초반 대부분의 대학들은 학사서비스를 WEB방식으로 운영하기 시작했으므로 나름 학부에서 배운 기술을 실전에 적용했던, 처음으로 실무로 뛰어들게 된 계기이다. 학생치고는 개발을 잘한다고 칭찬을 들었기에 더 열심히 개발하게 된 계기가 되었고 내가 쓰는 학사 프로그램을 내가 고친다는게 너무 신기했어서 마치 게임하 듯 개발에 푹 빠진 시간이었다. 대학 전산원 알바 시절에는 대부분은 웹 프로그램이 Servlet으로 구현되어 있었다. 물론 지금도 JSP가 Servlet 방식보다 개발하기 편리할 뿐 사실 내부적으로 WAS가 내부적으로 JSP를 Servlet으로 변경한다는 점은 변함이 없으므로 지금보다 low level의 개발을 하고 있다고 표현하는 것이 옳다고 하겠다. 그런데 Ajax도 등장하지 않았던 시절 HTML, Javascript, Java, SQL 언어가 뒤죽박죽 섞여 있는 코드를 보며 정녕 이것이 최선인가 자주 탄식할 수 밖에 없었다.

  • 전산장교 시절과 Factory 개념
    진짜 개발자로서의 첫 출발은 바로 이때가 아니었을까 싶다. 생각보다 꽤 큰 규모의 전산실에서 최초로 MVC 기법의 개발을 시작했다. 더불어 DB의 활용도를 높이고자 Factory 클래스를 만들어 싱글톤 디자인 패턴도 활용하기도 했고 나름 Java가 가진 맛을 제법 느껴볼 수 있는 경력을 쌓는 계기가 되었다. 다만 우리나라의 현실은 왜 이렇게도 DB, SQL 중심인가? 그리고 이런 Java의 패턴 몇 가지가 최선인가? 라는 질문이 계속 들기 시작했다.

  • 지금까지 이어온 개발자의 삶
    군을 전역할 즈음 우리나라는 최악의 개발 환경을 가지고 있었고 SI, SM 정도의 직군만 존재하여 그것이 영원하리라 생각했다. 다 년간 개발을 하면서 창의적인 개발보다는 찍어내기식 개발에 스트레스는 늘어가고 보람은 줄어드는 패닉에 빠졌고 고민 끝에 가장 개발환경이 편하다는 안정적인 직장에 들어오게 되었다. 그리고 마침내 Framework를 다루기 시작했다. 스트럿츠, 스프링까지 프레임워크를 다루며 그 안에 녹아있는 철학을 음미했다. 예를 들면 스프링에서 활용되는 개념인 DI, AOP등의 개념을 익히며 이 정도는 알아야 프로그래머라고 할 수 있는 것이겠구나, 더불어 소프트웨어 공학을 열심히 익혀야 이런 훌륭한 철학을 기반으로 한 프레임워크를 만들 수 있겠구나라고 깨닫는 계기가 되었다.

  • 모바일의 등장
    지금까지도 대세인 모바일 개발 환경이 등장하기 시작한다. 안드로이드 OS가 리눅스와 비슷하여 친숙함도 들겠다 직접 만든 App이 내 모바일 기기 위에서 돌아가겠다 마치 처음 Java를 접했던 호기심이 다시금 발동해서 한동안 App개발에 푹 빠져 들던 시절이었다. 역시 자바는 자바였다. 자바를 아니까 .java도 개발하기 결코 어렵지 않았다.

  • 그리고 광풍이 부는 격변의 개발환경
    SNS까지 확산되며 MEAN스택이 등장하기 시작했다. 예전엔 LAMP만 알면 되었는데 프런트엔드 중심의 개발환경이 등장하고 앵귤러, 익스프레스, 리액트, D3, Vue.js 등 프런트 엔드에 엄청난 기술들이 등장했고 이 블로그를 운영하는 Jekyll같은 정적 컴파일 언어, Grant 등이 등장했다. 백엔드 단에는 Go, 얼랭 같은 언어가 등장했고, 딥러닝과 빅데이터가 화두가 됨은 물론 이더리움과 같은 블록체인 개발 언어, Iot 사물인터넷, 그리고 함수형 언어의 대세.. 광풍이라고 표현할 수 밖에 없는 격변의 개발환경이 등장하기 시작하고 심지어 수학, 통계학 등 기초 사이언스에 대한 내공이 얼마나 중요한지 보여주는 시점에 도달하게 되었다.

주제가 인생사로 벗어나는 듯 하여 이쯤에서 각설하려 한다. 그렇다면 이 책이 다루는 범위는 위 개발자 20년 인생에 어느 부분을 다루는 것일까? 미안하지만 잘 쳐줘야 “대학 근로장학생” 시절까지 정도이다. 이 책이 좋지 않다는 말인가? 그렇지 않다. Java의 객체 개념을 정확히 알지 못한다면 그리고 하나의 언어를 정확히 알지 못한다면 다른 언어, 기술, 철학, 프레임워크와 비교할 수 없고 창의적인 개발을 할 수 없게된다. 가야할 길은 멀지만 이 책으로 개념의 초석을 튼튼히 쌓는다면 갈길이 먼 길을 축지법을 써서 이동하는 느낌으로 발전하는 자신을 보게 될 것이다.

이 책은 필자가 처음 Java 개념을 접했던 기본서와 비교하자면 개념을 전달하는 깊이가 수십배는 되는 전달력, 가독성이 좋은 책이다. 프로그래밍 스킬이 쌓일수록 알고리즘과 기초 사이언스, 철학이 얼마나 중요한 것인지 깨닫게 된다. 그저 지식의 양이 중요한 것이 아니라 그 안에 녹아있는 철학과 수학이라는 사이언스가 녹아있는 공학의 핵심 개념을 잡아내는 것이 중요하다. 지식의 양은 세월이 흐를수록 늘어나는 것이지만, 개념을 잡지 못한다면 그저 Copy&Paste 코더를 벗어나지 못하게 된다. 그런 점에서 이책을 강력하게 추천하고 싶다.

신용권 저자께 직접 들었던 모바일 웹앱 강의


이 책의 장점을 하나 더 소개하자면 바로 저자의 내공과 전달력이다. 2013년 경 삼성멀티캠퍼스에서 모바일 웹 앱 & 하이브리드라는 IT전문 교육을 1주일 정도 이수했다. 그때 강사님이 이 책의 저자이신 신용권님이었는데 그때 Core개념을 제대로 전수받은 것이 이후 모바일 개발을 하는데 있어 큰 도움이 되었고 더불어 애매하게 알고 있었던 Java의 개념과 기술을 다시 정리하고 토대를 다지는데 결정적인 계기가 되었다.

이 책은 혼자 공부하는 자바 동영상 강의도 제공한다. 사투리가 구수하게 섞인 음성에 수강생들이 멍하게 있으면 유머스럽게 질책하던 기억이 아직도 생생하다. 더불어 책 마지막 부분엔 혼공용어노트라는 배운 핵심개념을 정리한 용어집도 있다. 프로그래밍도 암기력이 탄탄하면 그 위에 더 큰 작품을 더 빠르게 올릴 수 있다.

이런 저런 측면에서 이 책은 초보자가 프로그래머로서의 길을 나아가기에 참 많은 배려를 한 디테일이 보이는 양서라고 생각한다. 소스 코드의 동작 순서를 화살표로 배치하거나 자바의 Stream을 가독성있게 그림으로 표현한 부분을 보신다면 어떤 의미인지 이해하실 수 있을 것이다.
혼공용어노트

스트림개념도

소스코드동작순서

누가 읽어야 하는가?


  • 초보 프로그래머, 컴퓨터 전공 학부 초년생

  • Java에 관심있는 타 언어 개발자

  • 기타 비전공자
    데이터 분석, 경제학 등 타 분야에서도 프로그래밍을 알면 큰 시너지 성과를 얻을 수 있는 타 학문 전공자에게 컴퓨터 공학 개념의 기초를 다지기에 정말 도움이 되는 책이다.

책의 구성 및 요약


이 책은 크게 세 부분으로 구성된다.

  • 1. Java의 기본문법(1 ~ 5장)
    • 자바 및 이클립스를 그 어떤 블로그 or 책 보다 쉽게 설치할 수 있다. (시작이 반이다.)
    • 변수, 타입, 연산자, 조건문, 반복문 등 기본문법을 익힌다.
    • 어느 프로그래밍 언어에나 존재하는 공통점을 배운다.
  • 2. Java와 객체지향언어의 특징(6 ~ 10장)
    • 객체지향 언어의 특성과 개념을 익힌다.
    • Java에서 설계된 객체지향 기법을 다룬다.
    • 객체의 핵심 개념인 Class, Class의 재사용을 위한 상속, 메소드의 추상화와 구현을 위한 Interface, 중첩 Class, 예외처리까지 익힐 수 있다.
  • 3. Java의 멋진 도구들(11 ~ 14장)
    • Java에 얼마나 유용한 라이브러리가 많이 있는지 체험하는 시간이다.
    • 기본 API클래스인 java.lang., java.util. 사용법을 익힌다.
    • 스레드 및 동기화, 컬렉션 프레임워크, 입출력 스트림 등 자료구조나 병렬처리에 필요한 기법을 익힌다.

요약하며…


20년 전과는 달리 요즘엔 참 좋은 서적과 레퍼런스가 많아 막 프로그래머로서의 길을 출발하는 요즘 친구들이 너무 부럽다. 필자가 처음 Java를 공부한 기본서는 어색한 번역의 내용도 전달력도 딱딱한 그저 그런 책이었다. 친절함은 커녕 이제 뭐 좀 알겠다 싶으면 이상한 코드들이 무더기로 나와 보는 순간 질려버리게 만들기도 했다. 코드는 색상도 들여쓰기도 가독성도 형편없었다. 심지어는 오류도 있었다.

이 책의 저자는 Java의 핵심 개념을 마스터한 전문가이며 나아가 WEB, Mobile 기술에 정통하다. 책도 친절한데 무료 동영상 강의도 해 준다. 부럽지 않을 수가 없다. 이 책은 위에서 언급한 바와 같이 입문자에게 더할나위 없이 좋은책으로 처음 시작하시는 분께 강력 추천한다. 아쉬운 점이 하나 있다면 Java에 해박하신 전문가께서 너무 얕은 기초 지식만 내공을 전수해주신다는 점이다.(하지만 그 개념은 매우 중요하다.) 언젠가 스트림 이후의 Java 세계에 대하여 시리즈로 집필을 계속 이어나가시길 바라며 본 포스팅을 마친다.

<한빛미디어 출판사>

개발자라면 믿고보는 “한빛미디어 출판사”라는 수식어가 따라다닐 만큼 IT분야는 물론 다른 분야에서도 양질의 도서를 끊임없이 출판하는 회사입니다. 개발자로서 “나는 프로그래머다”라는 유익한 팟캐스트를 즐겨 듣곤 했는데 한빛미디어에서 후원을 하였기에 수년간 방송이 이어져올 수 있었다 생각하며, 그외에도 리뷰어 활동, 학습지원 등 다양한 분야에서 사회에 공헌하는 개발자와 공생하는 업체입니다. IT 분야에 관심이 많은 분이라면 한빛미디어의 책으로 시작하시면 후회없는 출발을 하실 수 있습니다.

한빛미디어 바로가기




© 2019.04. by theorydb

Powered by theorydb