메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

자바로 배우는 핵심 자료구조와 알고리즘

기술 면접에 필요한 실용주의 자료구조와 알고리즘

한빛미디어

번역서

판매중

  • 저자 : 앨런 B. 다우니
  • 번역 : 유동환
  • 출간 : 2018-06-01
  • 페이지 : 184 쪽
  • ISBN : 9791162240847
  • 물류코드 :10084
초급 초중급 중급 중고급 고급
4.5점 (10명)
좋아요 : 7

자료구조와 알고리즘을 활용하여 간단한 웹 검색 엔진 만들기

이 책은 컴퓨터과학을 공부하거나 기술 인터뷰를 준비하는 소프트웨어 개발자를 위한 실용적인 책입니다. 자료구조와 알고리즘을 빠르게 배울 수 있도록 실용적이고 중요한 부분을 중점으로 설명합니다. 자료구조가 어떻게 동작하는지보다 어떻게 활용하는지에 초점을 맞추었습니다. 

이 책은 웹 검색이라는 응용 분야에 집중합니다. 이 분야는 자료구조를 광범위하게 사용하며 자체로도 흥미롭고 중요합니다. 다른 책에서는 보기 어렵지만 기술 인터뷰에 필요한 내용입니다. 또한, 버전 관리와 유닛 테스트 같은 기본적인 소프트웨어 엔지니어링 실무 내용도 다룹니다. 장마다 배운 것을 확인할 수 있는 예제가 있고, 해답을 확인할 수 있는 자동화된 테스트도 제공합니다. 

  • 리스트와 맵 등의 자료구조 사용과 작동 방식 이해하기
  • 위키피디아 페이지를 읽고, 분석하고, 결과 데이터 트리를 탐색하는 응용 프로그램 작성하기
  • 코드를 분석하여 실행시간과 필요한 메모리양 예측하기
  • 해시 테이블과 이진 검색 트리를 사용하여 맵 인터페이스 구현하기
  • 크롤러로 웹 검색 엔진 구축하기
저자

앨런 B. 다우니

올린 공과대학교(Olin College of Engineering)의 컴퓨터공학과 교수로, 웰즐리 대학교(Wellesley College)와 콜비 대학교(Colby College), UC 버클리 대학교(UC Berkeley)에서 강의하였습니다. UC 버클리 대학교에서 컴퓨터공학 박사 학위를, MIT에서 석사와 학사 학위를 받았습니다. 이 책 외에도 『Think Stats』(2013), 『파이썬을 활용한 베이지안 통계』(2014, 이상 한빛미디어)를 집필하였습니다.

역자

유동환

책 쓰는 프로그래머. 연세대학교 정보대학원에서 경영정보학을 전공한 후 LG전자에 안드로이드 앱을 개발하였습니다. 최근에는 선행플랫폼개발팀으로 자리를 옮겨 차세대 모바일 기술 프로젝트를 진행하고 있습니다. 자바카페와 한국자바개발자협의회(JCO)의 초기 멤버로 수년간 활동하였습니다.

집필한 책으로는 『안드로이드를 위한 Gradle』(2016)과 『RxJava 프로그래밍』(공저, 2017, 이상 한빛미디어)이 있고, 번역한 책으로는 『Professional Java Web Services』(2002, 정보문화사)와 『그레이들 레시피』(2016), 『Java 9 모듈 프로그래밍』(2018, 이상 한빛미디어)이 있습니다.

CHAPTER 1 인터페이스

_1.1 리스트가 두 종류인 이유

_1.2 자바 interface

_1.3 List interface 

_1.4 실습 1

CHAPTER 2 알고리즘 분석

_2.1 선택 정렬

_2.2 빅오 표기법

_2.3 실습 2

CHAPTER 3 ArrayList 클래스

_3.1 MyArrayList 메서드 분류하기 

_3.2 add 메서드 분류하기 

_3.3 문제 크기

_3.4 연결 자료구조 

_3.5 실습 3 

_3.6 가비지 컬렉션 

CHAPTER 4 LinkedList 클래스

_4.1 MyLinkedList 메서드 분류하기

_4.2 MyArrayList와 MyLinkedList 비교하기

_4.3 프로파일

_4.4 결과 해석하기

_4.5 실습 4

CHAPTER 5 이중 연결 리스트 

_5.1 성능 프로파일 결과

_5.2 LinkedList 메서드 프로파일하기

_5.3 LinkedList 끝에 더하기

_5.4 이중 연결 리스트 

_5.5 자료구조 선택하기

CHAPTER 6 트리 순회

_6.1 검색 엔진

_6.2 HTML 파싱하기

_6.3 jsoup 사용하기

_6.4 DOM 트리 반복하기

_6.5 깊이 우선 탐색

_6.6 스택

_6.7 반복적 DFS

CHAPTER 7 철학으로 가는 길

_7.1 시작하기

_7.2 Iterable과 Iterator

_7.3 WikiFetcher

_7.4 실습 5

CHAPTER 8 인덱서

_8.1 자료구조 선택

_8.2 TermCounter

_8.3 실습 6

CHAPTER 9 Map 인터페이스

_9.1 MyLinearMap 구현하기

_9.2 실습 7

_9.3 MyLinearMap 분석하기

CHAPTER 10 해싱

_10.1 해싱

_10.2 해싱의 동작 방식

_10.3 해싱과 변형

_10.4 실습 8

CHAPTER 11 HashMap 클래스

_11.1 실습 9

_11.2 MyHashMap 분석하기

_11.3 트레이드오프

_11.4 MyHashMap 프로파일링

_11.5 MyHashMap 클래스 고치기

_11.6 UML 클래스 다이어그램

CHAPTER 12 TreeMap 클래스

_12.1 해싱의 문제점

_12.2 이진 탐색 트리

_12.3 실습 10

_12.4 TreeMap 구현하기

CHAPTER 13 이진 탐색 트리

_13.1 단순한 MyTreeMap 클래스 

_13.2 값 탐색하기

_13.3 put 메서드 구현하기

_13.4 중위 순회

_13.5 로그 시간 메서드

_13.6 자가 균형 트리 

_13.7 추가 실습 

CHAPTER 14 영속성

_14.1 레디스

_14.2 레디스 클라이언트와 서버 

_14.3 레디스 기반 인덱스 만들기 

_14.4 레디스 데이터 타입

_14.5 실습 11

_14.6 추가 제안

_14.7 설계 힌트

CHAPTER 15 위키피디아 크롤링

_15.1 레디스 기반의 인덱서 

_15.2 조회 성능 분석

_15.3 인덱싱 성능 분석 

_15.4 그래프 순회

_15.5 실습 12

CHAPTER 16 불리언 검색

_16.1 크롤러 해답

_16.2 정보 검색

_16.3 불리언 검색

_16.4 실습 13

_16.5 Comparable과 Comparator

_16.6 확장

CHAPTER 17 정렬

_17.1 삽입 정렬

_17.2 실습 14

_17.3 병합 정렬 분석

_17.4 기수 정렬

_17.5 힙 정렬

_17.6 제한된 힙 정렬

_17.7 공간 복잡도 

이 책은 자료구조와 알고리즘에 대한 내용을 설명하기 위해 문제 풀이 형식으로 구성되어 있습니다. 14개의 실습을 통해 자바 언어에서 기본으로 제공하는 자료구조인 자바 컬렉션 프레임워크(Java Collections Framework, JCF)의 주요 클래스를 중심으로 개념을 학습하고 시간 복잡도를 분석하며 성능을 측정해 봅니다. 또한, 성능 개선에 대해서도 알려 줍니다.

자료구조와 알고리즘에 대한 이해는 소프트웨어의 품질을 높이는 아주 기본적인 작업입니다. 요즘은 빅데이터와 클라우드가 있고 이미 검증된 수많은 DBMS가 있지만, 단지 활용만 해서는 원하는 품질을 얻기 힘듭니다. 내가 잘 만들고 있는지, 이미 구현된 레거시 소프트웨어의 병목은 무엇인지 분석하려면 학부 과정에서 배우는 자료구조와 알고리즘이 단단한 기본기가 되기 때문입니다. 졸업하고 나면 세부 내용은 모두 잊히겠지만, 머릿속 어딘가에는 남아 다시 떠올리게 됩니다.

이 책은 한 번에 후루룩 읽기에는 꽤 압축적인 내용을 담고 있습니다. 꼭 설명해야 할 내용은 본문에서 충분히 설명하지만, 그 외 부가적인 내용은 과감하게 외부 링크를 제공합니다. 실습 과제를 먼저 제공하고 그다음 장에서 바로 필자의 해답을 제시하기 때문에 부담을 가질 필요는 없습니다. 끝까지 읽는다면 큰 도움이 된다고 확신합니다. - 옮긴이의 말 중에서

  • 최근 진행되는 채용 절차에는 거의 필수라고 할 정도로 코딩 테스트가 포함되어 있습니다. 그리고 일반적으로 코딩 테스트는 JAVA, C 등의 언어로 진행됩니다. 이렇게 개발자들이 직장을 구할 때도, 알고리즘에 대한 이해와 응용 능력은 꼭 필요한 조건이 되었습니다. 비단 입사를 위한 공부가 아니더라도, 효율적으로 개발하고 개발 의도에 맞는 프로그램을 명확히 구현하기 위해서는 알고리즘의 개념 숙지와 개념을 코드로 활용하는 능력, 이를 위한 공부 또한 필수적이죠. 

    이렇게 필수적인 내용의 공부를 위해 알고리즘을 다루고, 알고리즘 테스트를 대비하기 위한 JAVA 서적들 중 가볍고 한 번에 끝낼 수 있는 책을 소개합니다.




    [자바로 배우는 핵심 자료구조와 알고리즘 : 기술 면접에 필요한 실용주의 자료구조와 알고리즘]

    http://www.hanbit.co.kr/store/books/look.php?p_code=B1619666323

     


    [이 책은]



    장의 맨 앞 페이지에는 이와 같이 '주제' 와 이 주제를 전개하는 '흐름'을 먼저 설명해 주고 있습니다.

    이 덕분에 우리가 이 장에서 어떤 내용을 익힐 것이며, 어떤 순서로 어떻게 학습할 수 있는지 미리 파악할 수 있어요. 

    책을 끝까지 읽고 복습할 때, 각 장의 첫 장만 보고도 내용을 되짚을 수 있어 좋습니다.




    각 장에서는 알고리즘에 사용되는 자료구조를 다이어그램 또는 그림으로 보여주고 있습니다.

    글로 설명된 개념을 읽고 막연히 떠올리는 것보다 이해하기 쉬워요.

    다이어그램으로 이해한 자료구조는 알고리즘을 구상하고 코드로 옮길 때 훨씬 유용하고 빠르게 적용할 수 있어요.




     


    각 장에는 'NOTE' 섹션으로 심화학습을 위한 가이드, 잠시 쉬어갈 수 있는 읽을거리, 중요한 내용 등을 제공하고 있습니다.

    또 사진처럼 알고리즘 개념을 설명할 때 하나부터 열까지 순차적으로 이해해 나갈 수 있게 차근차근 짚어줘요.

    떄문에 어렵게 외우지 않아도 자연스럽게 이해할 수 있습니다.

    또 개념을 설명하고 난 뒤에는 JAVA로 작성된 예제 코드들을 첨부해 바로 응용해 볼 수 있도록 가이드라인을 잡아줍니다.

    이 책은 개념을 설명하고, JAVA로 그 개념을 작성하는 책이라서 소스 코드가 상당 부분을 차지하고 있어요.

    소스 코드는 알고리즘 문제를 해결할 때 매우 유용하고, 더 나아가 JAVA를 사용하여 효율적으로 개발할 때 정말 좋을 것 같네요.



    [책을 덮으며]

    이 책은  자료구조에 대한 개념을 학습하기 전이나, 알고리즘의 종류를 알기 전에 읽기에는 조금 어려울 것 같아요. 하지만 어느 정도 '~알고리즘에 대해 들어 봤다', '자료구조를 좀 알고 있다' 하는 사람들에게 유용할 것 같습니다. 가볍게만 알고 있던 개념을 구체화할 수 있고, 만약 개념을 이해하지 못하고 암기해 둔 상태라면 완벽히 이해하여 내재화할 수 있게 도와주는 책이라고 생각되기 때문이예요. 그만큼 차근차근 이해하기 쉽게 개념이 설명되어 있고, 이를 JAVA 코드로 구현하는 것에 관해서도 상세히 설명되어 있어 완벽한 이해와 코드로 옮기는 데에 큰 도움이 될 수 있을 거라 생각합니다.

    저는 개념을 가볍게 알고 있었던 상태에서 이 책을 접했기 때문에 책으로부터 받은 도움이 훨씬 더 크게 다가왔습니다. 또한 하나의 개념 뒤에 따라오는 소스코드도 개발할 때 매우 유용하게 참고했고요. 

    여러분들도 이 책을 통해 저와 같이 알고리즘/자료구조에 대한 개념을 다잡고, 이와 함께 JAVA로 효율적인 코드를 작성하는 데 많은 도움을 받길 바랍니다!



  • 200p가 되지 않는 얇은 책이기 때문에 부담없이 읽을 수 있는 책입니다. 물론 한 언어의 알고리즘이란 주제로 200p라면 모든 내용을 담지 못하기 때문에, 중요한 내용들을 잘 응축해 놓았겠죠?! 그 중에서도 중요하거나 괜찮은 내용이 들은 챕터를 위주로 리뷰를 해보겠습니다.

    Chap. 1 인터페이스

    알고리즘에 대한 자세한 설명 전, List와 List를 implements한 ArrayList, LinkedList를 가지고 Casting에 대한 매우 간략한 (주로 Downcasting 에 대한)설명이 나옵니다. 인터페이스를  쓰는지 아는건 중요한 일이죠.

    Chap. 3 ArrayList 클래스

    제목은 ArrayList지만, ArrayList의 구성 요소들 (get, equals, remove, removeAll 등등...)을 보여주고, LinkedList를 설명해준다. (음...? chap4가 LinkedList인데 여기서 나오네...?)

    Chap. 4 LinkedList 클래스

    chapter의 제목을 조금 바꿔야할 것 같네요... chap4에서는 ArrayList와 LinkedList(add 메서드의)의 성능 비교를 합니다. 몇개를 add할 때, 얼마나 걸리는지를 구한 뒤, 수식을 통해 어떤 결과가 나오는 지 확인할 수 있습니다.

    Chap. 5 이중 연결 리스트

    LinkedList의 앞, 뒤에 Element가 추가될 때의 성능을 비교하고, 이중 연결 리스트에서 같은 연산에서 어떤 자료구조가 효율적인지 확인해봅니다.

    Chap. 6 트리 순회, Chap. 7 철학으로 가는 길

    검색 엔진 (검색 엔진은 크롤링 / 인덱싱 / 검색으로 이루어짐)을 주제로 [위키트리의 본문의 제일 첫 소문자 링크를 클릭하고 이어지는 기사에서도 이를 반복하다 보면 마지막 글은 철학에 도달하게 된다] 라는 추측을 테스트 해 봅니다. 깊이 우선 탐색을 Iterator로 반복하여 탐색하는 구조에 대해 설명하는데, 짧게 설명하다보니 생략된 부분이 많아 내용을 모르고 보는 초보자들에게는 조금 어려울 수 있을 것 같네요. 반복적인 트리 순회로 크롤러를 만드는 챕터입니다.

    Chap. 8 인덱서

    인덱서란 검색어가 다수라면 이들의 집합을 분석하고, 검색어를 바탕으로 관련성 높은 페이지를 추리는 작업을 합니다. 콜렉션, 맵이 이에 알맞는 자료구조지만 이 중 속도면에서는 맵이 더 빠르기에, 맵을 이용해 인덱서를 구성해봅니다.

    Chap. 9 Map 인터페이스

    가장 많이 사용하는 자료구조 중 하나인 Map입니다. 반복적이고 단순한 구조인 LinearMap에 대해 설명되어 있습니다.

    Chap. 10 해싱, Chap. 11 HashMap 클래스

    Map 인터페이스를 해시값으로 구현한 해싱입니다. 반복으로 키에 매핑되는 값을 구해내는 LinearMap과는 달리, 해시된 키를 이용하여 값을 구하는 방법입니다.

    Chap. 12 TreeMap 클래스, Chap. 13 이진 탐색 트리

    해시맵에서도 O(n)구조를 벗어날 수 없었기에, 조금 더 빠른 구조인 TreeMap이 나왔습니다. (O(logn)) 이 TreeMap에 사용된 이진 탐색 트리 구조가 어떤 것인지, 또 다른 트리구조엔 어떤것이 있는지 알아봅니다.


    • 추가적인 chapter가 있지만, 필수적이라기보단, 성능 향상과 추가 기능들을 알려줍니다.

    이번 리뷰 도서는 조금... 애매합니다. 주관적으로 생각하기에는 난이도가 고르지 못한 느낌이었고, chapter의 제목이 내용과 매치되지 않는 부분이 존재했습니다. 문장들이 이해하긴 쉬웠지만 조금 다듬어야 될 것 같습니다.

    이번 리뷰는 여기서 마치겠습니다.

    감사합니다.

  •  

     



    이 책은 말 그대로 '자료구조와 알고리즘'을 주제로

    만들어진 책 입니다.


    "왜 기존에 쓰던 방법을 사용하지, 굳이 이러한 알고리즘을 써야하나?"

    라고 생각하시는 분이 계실 수 있으실텐데, 각 챕터마다

    이러한 알고리즘을 써야하는 이유가 나와있습니다.


    즉 단순히 알고리즘에 대해 설명하고 끝내는 것이 아닌,

    이러한 알고리즘을 쓰는 방법과 그 이유를 함께 설명하고 있습니다.



    계다가 각각의 알고리즘의 속도(수행 시간)을 그래프로 나타내어,

    어떠한 알고리즘이 효율적인지를 쉽게 알아볼 수 있었습니다.



    또한, 자료구조를 언제 사용을 해야하는지, 그 조건에 대해 설명을

    함께 진행하고 있어, 언제 사용을 해야하는지 판단하는데 도움이 되는 것 같습니다.


    그리고 실무에서 자료구조를 사용할 수 있도록 접근을 도와주고 있어,

    현업자 분들에게도 많은 도움을 주는 것 같습니다.



    웹 크롤링에 관한 내용도 있어,

    이 부분도 재미있게 보았습니다.



    책의 내용은 맨 첫장부터 마지막까지 모두 184장 밖에 되지 않아

    일주일 정도면 충분히 읽을 수 있을 것 같습니다.


    다만, 내용이 실무자에 맞춰져 있어, 초보자는 이해하는데 시간이

    조금 걸릴 것 같습니다.


    자료구조를 활용해보고 싶어하시는

    실무자 분들에게 추천드리는 도서입니다.

  • 자신의 사고를 코드로 작성하는 법 - 자바로 배우는 핵심 자료구조와 알고리즘


    - 서평시작

     

    “자료구조를 왜 배워야 하는지 모르겠다!”


    입사하고 얼마 안되어 “학생 때 배운걸(자료구조, 알고리즘 등) 써먹어 본적이 있는가? “ 라고 나에게 질문을 던지던 회사 선배가 갑자기 떠올랐다. 그 때의 내 대답은 자세히 기억나진 않지만 아마 별로 없다라고 했던것 같다.


    실제로 그 이후로 실무 프로젝트를 경험 하면서도 라이브러리나 프레임워크 사용에만 급급해서 자료구조 같은 것에 대해서 생각해 본적도 별로 없긴하다. ‘이미 만들어져 있는걸 간단히 불러와서 사용 할 수 있는데 왜?‘ 라고 생각하면서 말이다.


    하지만, 간단한 하던 복잡하던 프로그램을 작성 하면 가끔 왜 라는 질문에 부딪힐 때가 있다. ‘왜 이걸 사용해야 하나? 다른걸 쓰면 안되나?’

    사실 상 이유를 분석할 능력이 없어서 '이제까지 그냥 쓰던 거니까' 하고 별 생각 없이 하던 방식을 답습해 왔다.


    옮긴이는 책의 처음에서 “자료구조와 알고리즘에 대한 이해는 소프트웨어의 품질을 높이는 아주 기본적인 작업이다.” 라고 이야기 하며 자료구조를 배워야 하는 이유를 설명 하고 있다.

    물론 내가 이미 구현된 레거시 소프트웨어의 병목을 분석 한다던지 하는 일은 없을 것 같지만,  어떤 자료구조를 어떤 상황에서 왜 사용 했는 지 에 대해서 생각해 볼 수 있는 계기는 된듯 하다. (이 책에서는 몇가지 자료구조들에 대한 설명과 이를 구현하기 위한 가이드와 함께 성능을 측정 하는 방법 (단순한 실행 시간 비교가 아닌 계산을 통한 예측) 까지 소개 하고 있다.)


    책의 구성 중 모든 구현을 다 소개 하지 않고 가이드만 제공하는 부분은 참 좋았다. 직접 코드를 구현하지 않고 책만 읽어 나가기에는 좀 귀찮은 면도 있었지만, 이 책을 제대로 읽으려면 직접 코드를 작성해 보고, 책에 나오는 외부링크를 같이 읽을 필요가 있어 보인다. (외부링크가 모두 영문이긴 하지만)

     

    자료구조 공부를 위해서는 자료구조의 알고리즘 설명을 듣고 그걸 내 머리속으로 이해 한뒤 그 내용을 내 코드로 옮기는 기술이 필요 한데, 그걸 익히게 하는데 도움을 많이 주었다.

     

    소스 코드를 github 을 통해서 제공하는 점도 마음에 들었다. 개발자를 위한 책에서 코드를 제공하는 방식은 당연히 이렇게 되어야 하지 않나 싶을 정도 이다.


    - 인상적이었던 부분

     

    ================================================================================

    요약하면 알고리즘 분석은 자료구조를 선택하는 지침을 제공하지만, 오직 다음 조건일 때만 유효합니다.

     

    1. 응용프로그램의 실행시간이 중요하다.

     

    2. 응용프로그램의 실행시간이 선택한 자료구조에 의존한다.

     

    3. 증가차수에 따라 어느 자료구조가 나은지 실제로 예측할 수 있을 만큼 문제크기가 충분히 크다.

     

    여러분은 오랜 시간 소프트웨어 엔지니어로 일하면서도 이러한 상황을 접하지 못하였을 수도 있습니다.

    ================================================================================

    네 말 그대로 입니다.


    - 소감

     

    뭔가 새로운 것을 배우는 것도 아닌데 희안하게 재미있는 책이다.

    두께도 두껍지 않아서 (다른 자료구조 책들과 비교해 보자!) 부담감도 적다.


    - 서평 끝



  • 오늘 소개할 책은 <자바로 배우는 핵심 자료구조와 알고리즘>입니다. 약 180페이지 정도로 구성된 얇은 책이지만, 자료구조와 알고리즘을 학습하면서 반드시 알아야 할 기본적인 핵심 내용을 대부분 포함하고 있습니다.

    이 책은 주요 자료 구조를 소개한 후, 실습 문제를 풀이하면서 자연스럽게 학습하는 방식으로 구성되어 있습니다. 이런 접근 방법은 신선하면서도 원저자의 많은 고뇌가 담겨있다고 생각합니다. 제게는 매우 신선했습니다. 이렇게 좋은 기회를 제공해주신 한빛미디어 관계자님께 깊은 감사의 말씀을 전합니다.

    이 책에서 다루는 내용은?

    자료 구조(Data Structure)는 시스템에서 데이터를 효율적으로 사용할 수 있도록 데이터의 특성에 따라 알맞은 구조를 만들어 저장하는 방법입니다. 특정 응용에 적합한 자료 구조는 시스템의 효율을 높여줄 수 있습니다.

    <자바로 배우는 핵심 자료구조와 알고리즘>에서는 Java Collection Framework(JCF)를 기초로 JCF에서 제공하는 자료 구조를 간단하게 구현하는 방법으로 기본 자료 구조를 소개합니다. 또한, 이야기의 전개 과정이 어떤 문제를 제시하고 이를 해결하기 위한 자료 구조가 어떤 것이 있을까? 라는 의문을 제시하면서 자료 구조에 관해 설명합니다. 이런 전개 과정으로 독자는 각 자료 구조에 대한 이해도를 높일 수 있으며 흥미를 끝까지 잃지 않고 완독할 수 있는 모티브를 제공합니다. 필자는 시간이 많이 소요되었지만 재미있는 시간이었습니다.

    이 책에서 소개하는 자료 구조는 Array List, Linked List, Doubly Linked List, Tree, Map, Hash, Binary Search Tree 등 기본 자료 구조를 다룹니다. 물론 지면 한계로 말미암아 꼭 다뤄야 할 기본 자료 구조를 전부 다루지 못하고, 각 자료 구조에 대한 이론적 배경에 관해서 설명이 미흡한 것은 사실입니다. 하지만 굉장히 실용적으로 빈번히 사용하는 자료 구조에 대해서는 대부분 기술하고 있으며, 더 깊이 있게 학습하고 싶은 분들은 관련 내용을 더 학습하면 될 것입니다.

    기본 자료 구조 이외에도 간단하게 위키피디아 웹 크롤러와 인덱스 구현하는 예제를 제시합니다. 물론 매우 간단한 예제이지만 자료 구조를 실제 응용에서 어떻게 활용하는지에 대한 감을 잡을 수 있을 것입니다. 실제로 이 책을 따라가면서 이 예제를 직접 만들다 보면 더 좋은 방법이 있지 않을까? 라는 생각을 하는 자신을 발견할 수 있을 것입니다.
     
    실무에서 JCF를 많이 사용하는 분들이라면 이번 휴가 기간에 한 번 학습해 보는 것이 어떨까요? 학생이라면 이번 방학을 이용해서 자바의 Collection Framework를 조금 더 재미있게 할 수 있는 계기로 만드는 것도 좋을 것 같습니다.

    마치면서...

    <자바로 배우는 핵심 자료구조와 알고리즘>을 읽은 후, 자바에서 제공하는 기본 자료구조와 알고리즘 활용법에 대해 정리할 수 있는 시간을 가질 수 있었습니다. 그리고 장마다 주어진 실습 문제를 풀이하며 즐거운 시간을 보냈습니다.

    약 180페이지로 구성된 얇은 책이므로 이 책에서 설명하는 내용은 제한적입니다. 다만 주요 요소 내용을 링크로 꼼꼼히 정리하여 제공하고 있으므로, 깊이 있게 학습할 분들은 관련 링크를 참고하시면 도움을 얻을 수 있을 것입니다.

  • [도서] 자바로 배우는 핵심 자료구조와 알고리즘 : 쉽고 현업에서 사용하는 알고리즘

     

    undefined

     

  •  

    한빛 미디어의 "나는 리뷰어다" 를 통해서 Think Data Structures (자바로 배우는 핵심 자료구조와 알고리즘) 책을 받게되었다. 전에 한빛 미디어 사이트를 들어갔을때 어떤 책인지 궁금했었는데 이렇게 타이밍 적절하게 책을 읽게 되었다. 

     

    우선 이책은 그냥 알고리즘 책이 아니다. "자바로 배우는" 알고리즘 책이다. 그렇기 때문에 자바 코드를 읽을 수 있어야 한다. 저자도 책의 머릿말에 사전 준비사항으로 자바를 언급하면서 익숙하지않은 독자들은 "Think Java", "Head First Java" 책을 권해주고 있다. 

     

    자바의 Collection 과 알고리즘

     

    이 책에는 Java Collection들이 많이 나온다. LinkedList, Map, ArrayList 등등. 알고리즘을 설명하면서 거기에 맞는 클래스를 구현한다. 구현을 하다 보면 우리가 Java 에서 사용하는 Collection 클래스가 만들어진다. 그래서 그저 import만 해서 노출된 메서드만 사용하는것을 넘어서 그 클래스가 어떻게 동작하는지 이해할 수 있게 된다. 그리고 각각의 실습을 통해서 실제로 적용해볼 수 있도록 유도한다. 

     

     

    알고리즘과 적용

     

    알고리즘에 대한 설명과 더불어 위키피디아 웹 클롤러나 인덱서를 실제로 구현해 볼수도 있다. 책에서는 간단하게 구현하고 설명하고 있지만 그 작동 원리를 이해하는데 많은 도움이 된다. 어떤 알고리즘을 적용해야 하는지 어떻게 구현해야 하는지 생각하고 실습하다 보면 더 이 책의 재미에 더 빠져들 수 있다. 

     

     

    이책이 나에게 다른 알고리즘 책에 비해서 좀더 친숙하다고 생각한 것은 Java 로 된 소스코드 때문이다. C 나 파이썬이 아닌 Java 로 되어있었기 때문에 나에게는 더 유익했고 이해가 쉬웠다. Java 개발자라면 한번쯤 읽어보고 내가 그동안 썼던 라이브러리들에 대해서 다시 생각해 볼 수 있는 계기를 마련해줄수 있는 책이다. 

     

    http://blusky10.tistory.com/345

  • 자바로 배우는 핵심 자료구조와 알고리즘

    저자 앨런 B. 다우니

    출판 한빛미디어

    발매 2018.06.01.

    상세보기
     
    자바로 배우는 핵심 자료구조와 알고리즘

    이 책의 대상자는?
    컴퓨터 공학 중 자료구조와 알고리즘을 학습한 사람부터, 현업에서 과장 이상급으로 설계를 할 때 자료구조를 선택해야 하는 중, 고급 개발자까지 다양한 사람들에게 필요한 책입니다.

    이 책의 주제는?
    실무와 동떨어져 있는 자료구조에 대해서 보다 현실적인 접근을 시도하여, 실무에 적용 가능하도록 이해를 도와주고 응용을 할 수 있도록 해줍니다. 알고리즘에 대한 책이라기보다는 자료구조를 이해하여 적재적소에 사용 가능하도록 하는 데 도움을 줍니다.

    이 책을 읽는 데 걸리는 시간?
    이 책은 총 181페이지로 전문적인 내용을 다루는 데에 비해선 꽤나 얇은 편입니다. 기존에 컴퓨터 공학을 전공한 사람이라면 출근 시간 한 시간씩 읽으면 일주일 정도 걸립니다. 특히 자바를 주 언어로 사용하신다면 총 7시간 정도라면 충분합니다. 다만, 자료구조나 알고리즘에 대한 사전지식이 없는 사람이라면 조금 더 오래 걸릴 수도 있을 것 같네요.

    초심자에 대한 배려가 담긴 책
    사전지식이 없더라도 비교적 쉽게 읽히게 하기 위해서 자바의 인터페이스에 대한 기초, 그리고 알고리즘의 기초에 해당하는 페이지가 30페이지 정도로 총 두 챕터를 할애하고 있습니다.

    인상깊었던 점?
    예제도 잘 되어 있긴 하지만 이 책의 강점은, 특히 그래프와 같이 도식화가 잘 되어 있어 한 눈에 파악하기가 쉽다는 데에 있습니다. 
    두 가지 형태의 구상클래스인 array list와 linked list를 어떠한 경우에 무엇을 선택해야 하는 지,
    두 가지의 자료구조를 비교해서, 예제 코드와 그 결과에 따른 차트를 보여줌으로써 한 눈에 파악할 수 있도록 해줍니다.

    아쉬웠던 점?
    애초에 실무에 꼭 필요한 핵심적인 것만을 담고 있으므로 자료구조의 원론적인 설명이 조금은 부족합니다. 또, 자료구조 얘기는 많았으나 알고리즘에 대한 설명은 거의 없었어요.
    핵심적인 것만 모아놓아서 시간이 없는 실무자들이 읽기엔 정말 최적인 책이지만, 그만큼 아쉽기도 하네요.

  • <이 책의 리뷰는 한빛미디어 '나는 리뷰어다'로 부터 책을 지원받아 작성된 글입니다.>

     

     

    책소개

    자료구조와 알고리즘을 활용하여 간단한 웹 검색 엔진 만들기

    이 책은 컴퓨터과학을 공부하거나 기술 인터뷰를 준비하는 소프트웨어 개발자를 위한 실용적인 책입니다. 자료구조와 알고리즘을 빠르게 배울 수 있도록 실용적이고 중요한 부분을 중점으로 설명합니다. 자료구조가 어떻게 동작하는지보다 어떻게 활용하는지에 초점을 맞추었습니다. 

    이 책은 웹 검색이라는 응용 분야에 집중합니다. 이 분야는 자료구조를 광범위하게 사용하며 자체로도 흥미롭고 중요합니다. 다른 책에서는 보기 어렵지만 기술 인터뷰에 필요한 내용입니다. 또한, 버전 관리와 유닛 테스트 같은 기본적인 소프트웨어 엔지니어링 실무 내용도 다룹니다. 장마다 배운 것을 확인할 수 있는 예제가 있고, 해답을 확인할 수 있는 자동화된 테스트도 제공합니다. 

    • 리스트와 맵 등의 자료구조 사용과 작동 방식 이해하기
    • 위키피디아 페이지를 읽고, 분석하고, 결과 데이터 트리를 탐색하는 응용 프로그램 작성하기
    • 코드를 분석하여 실행시간과 필요한 메모리양 예측하기
    • 해시 테이블과 이진 검색 트리를 사용하여 맵 인터페이스 구현하기
    • 크롤러로 웹 검색 엔진 구축하기

    목차

     

    CHAPTER 1 인터페이스

    _1.1 리스트가 두 종류인 이유 

    _1.2 자바 interface 

    _1.3 List interface 

    _1.4 실습 1 

    CHAPTER 2 알고리즘 분석

    _2.1 선택 정렬 

    _2.2 빅오 표기법 

    _2.3 실습 2 

    CHAPTER 3 ArrayList 클래스

    _3.1 MyArrayList 메서드 분류하기 

    _3.2 add 메서드 분류하기 

    _3.3 문제 크기

    _3.4 연결 자료구조 

    _3.5 실습 3 

    _3.6 가비지 컬렉션 

    CHAPTER 4 LinkedList 클래스

    _4.1 MyLinkedList 메서드 분류하기 

    _4.2 MyArrayList와 MyLinkedList 비교하기 

    _4.3 프로파일 

    _4.4 결과 해석하기 

    _4.5 실습 4 

    CHAPTER 5 이중 연결 리스트 

    _5.1 성능 프로파일 결과 

    _5.2 LinkedList 메서드 프로파일하기 

    _5.3 LinkedList 끝에 더하기 

    _5.4 이중 연결 리스트 

    _5.5 자료구조 선택하기 

    CHAPTER 6 트리 순회

    _6.1 검색 엔진 

    _6.2 HTML 파싱하기 

    _6.3 jsoup 사용하기 

    _6.4 DOM 트리 반복하기 

    _6.5 깊이 우선 탐색 

    _6.6 스택 

    _6.7 반복적 DFS 

    CHAPTER 7 철학으로 가는 길

    _7.1 시작하기 

    _7.2 Iterable과 Iterator 

    _7.3 WikiFetcher 

    _7.4 실습 5 

    CHAPTER 8 인덱서

    _8.1 자료구조 선택 

    _8.2 TermCounter 

    _8.3 실습 6 

    CHAPTER 9 Map 인터페이스

    _9.1 MyLinearMap 구현하기 

    _9.2 실습 7 

    _9.3 MyLinearMap 분석하기 

    CHAPTER 10 해싱

    _10.1 해싱 

    _10.2 해싱의 동작 방식 

    _10.3 해싱과 변형 

    _10.4 실습 8 

    CHAPTER 11 HashMap 클래스

    _11.1 실습 9 

    _11.2 MyHashMap 분석하기 

    _11.3 트레이드오프 

    _11.4 MyHashMap 프로파일링 

    _11.5 MyHashMap 클래스 고치기 

    _11.6 UML 클래스 다이어그램 

    CHAPTER 12 TreeMap 클래스

    _12.1 해싱의 문제점 

    _12.2 이진 탐색 트리 

    _12.3 실습 10 

    _12.4 TreeMap 구현하기 

    CHAPTER 13 이진 탐색 트리

    _13.1 단순한 MyTreeMap 클래스 

    _13.2 값 탐색하기 

    _13.3 put 메서드 구현하기

    _13.4 중위 순회 

    _13.5 로그 시간 메서드 

    _13.6 자가 균형 트리 

    _13.7 추가 실습 

    CHAPTER 14 영속성

    _14.1 레디스 

    _14.2 레디스 클라이언트와 서버 

    _14.3 레디스 기반 인덱스 만들기 

    _14.4 레디스 데이터 타입 

    _14.5 실습 11 

    _14.6 추가 제안 

    _14.7 설계 힌트 

    CHAPTER 15 위키피디아 크롤링

    _15.1 레디스 기반의 인덱서 

    _15.2 조회 성능 분석 

    _15.3 인덱싱 성능 분석 

    _15.4 그래프 순회 

    _15.5 실습 12 

    CHAPTER 16 불리언 검색

    _16.1 크롤러 해답 

    _16.2 정보 검색 

    _16.3 불리언 검색 

    _16.4 실습 13 

    _16.5 Comparable과 Comparator 

    _16.6 확장 

    CHAPTER 17 정렬

    _17.1 삽입 정렬 

    _17.2 실습 14

    _17.3 병합 정렬 분석 

    _17.4 기수 정렬 

    _17.5 힙 정렬 

    _17.6 제한된 힙 정렬 

    _17.7 공간 복잡도 

     

     

     

     

    이번에 리뷰를 하게 된 책은 

    자바로 배우는 핵심 자료구조와 알고리즘 - 앨런B.다우니 지음. 유동환 옮김 입니다.

    제가 많은 책들 중 책을 선택한 이유는 알고리즘 부분이 부족하다고 생각해서 입니다.

    많은 개발 회사에서 코딩 테스트를 진행하고 있는데 그 중 가장 기초적으로 필요한 알고리즘에 대한 개념이 있는 좋은 책이라고 생각됩니다.

    그리고 더 중요하게 생각했던 것은 크롤링과 불리언 서치에 대한 목차가 있었기 때문에 책을 선택했습니다.

     

    특히, 웹 검색이라는 응용분야에 특화된 책이기 때문에 기초 알고리즘을 원하시는 분들은 다른 책을 찾아보셔야할 것 같습니다!

     

     

    일단 기본적인 베이스로는 자바가 필요 합니다. 

    자바를 배우기 위해서는 개인적으로

     

    - 이것이 자바다 - 신용권(한빛미디어) 

     

    책이 괜찮다고 생각합니다. 1권, 2권으로 나눠져있어서 중요하고 어려운 개념을 2권에서 자세하게 다루고 있습니다.

    자바 책은 시중에도 많고 인터넷 검색을 통해서도 많은 자료를 찾을 수 있으니 공부하시기 어렵지는 않을겁니다.

     

     

    가장 관심있던 두 부분의 목차입니다. 

    위키피디아 크롤링의 경우 현재 제가 몸담고 있는 회사에서도 진행하고 있기 때문에 더욱 관심이 갔던 부분인데 무작정 보는 것이 아니라 앞에 나오는 개념들을 이해하고 나서 보면 더욱 쉽게 이해가 가능했습니다.

    이 책의 좋은 점은 자주 사용하는 알고리즘이 순차적으로 나오는 겁니다.

    예를 들면 C언어로 자주 나오는 연결리스트 들은 엄청 많지만 실제적으로 그 알고리즘은 라이브러리로 구현되어 있기 때문에 개념적인 부분만 알면 되는데 너무 많은 부분을 차지 하는 책들이 많았는데

    이 책의 경우 딱 필요하고 자주 쓰는 부분에 대해서 자료구조로 알려주는 부분이 많습니다.

    또한, 자료구조에서 중요한 스택, 큐, 트리, 그래프에 대한 개념이 없으니 

    완전히 기초적인 알고리즘을 보실 분들은 다른 책으로 공부를 하고 보시는 것도 좋습니다.

    

     

    

     

    레디스( Redis)는 키-값 데이터베이스이고, 데이터베이스가 포함한 자료구조는 유일한 문자열로 식별되는 데이터 베이스입니다. 웹 검색이라는 응용 분야에 집중되어 있기 때문에 이런 내용들이 나옵니다,.

    [ 마무리 ]


    웹 검색이라는 부분에서 필요한 자료구조와 알고리즘에 대해 개념을 이해할 수 있게 도와주는 책

     

    디자인    ★★★☆☆

    내용       ★★★★☆ 

    난이도    ★★★☆☆ 

     

     

     

     

  • 시중에 많은 책들을 보면 자료구조라는 것에 초점을 두어 자료구조에 대해서만 설명을 해주기 때문에 어떤 상황에 어떤것을 사용해야될지 감이 안잡히는 경우가 대부분이었습니다.

     

    “자바로 배우는 핵심 자료구조와 알고리즘”에서는 자료구조에 대한 설명과 이 자료구조가 언제 어떻게 쓰이는지에 대한 설명을 해주고 추가로 구현까지 이루어집니다. 


    자바에 대한 설명도 같이 이루어지니 자바를 통해 자료구조를 공부하고자 하시는분들에게는 정말 좋은책 같습니다.

     

     

결재하기
• 문화비 소득공제 가능
• 배송료 : 0원배송료란?

배송료 안내

  • 책, 아이템 등 상품을 3만원 이상 구매시 무료배송
  • 브론즈, 실버, 골드회원이 주문하신 경우 무료배송

무료배송 상품을 포함하여 주문하신 경우에는 구매금액에 관계없이 무료로 배송해 드립니다.

닫기

리뷰쓰기

닫기
* 도서명 :
자바로 배우는 핵심 자료구조와 알고리즘
* 제목 :
* 별점평가
* 내용 :

* 리뷰 작성시 유의사항

글이나 이미지/사진 저작권 등 다른 사람의 권리를 침해하거나 명예를 훼손하는 게시물은 이용약관 및 관련법률에 의해 제재를 받을 수 있습니다.

1. 특히 뉴스/언론사 기사를 전문 또는 부분적으로 '허락없이' 갖고 와서는 안됩니다 (출처를 밝히는 경우에도 안됨).
2. 저작권자의 허락을 받지 않은 콘텐츠의 무단 사용은 저작권자의 권리를 침해하는 행위로, 이에 대한 법적 책임을 지게 될 수 있습니다.

오탈자 등록

닫기
* 도서명 :
자바로 배우는 핵심 자료구조와 알고리즘
* 구분 :
* 상품 버전
종이책 PDF ePub
* 페이지 :
* 위치정보 :
* 내용 :

도서 인증

닫기
도서명*
자바로 배우는 핵심 자료구조와 알고리즘
구입처*
구입일*
부가기호*
부가기호 안내

* 회원가입후 도서인증을 하시면 마일리지 500점을 드립니다.

* 한빛 웹사이트에서 구입한 도서는 자동 인증됩니다.

* 도서인증은 일 3권, 월 10권, 년 50권으로 제한됩니다.

* 절판도서, eBook 등 일부 도서는 도서인증이 제한됩니다.

닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?

자료실