한빛출판네트워크

IT/모바일

뇌를 자극하는 C++ STL

한빛미디어

집필서

판매중

뇌를 자극하는 C++ STL
좋아요: 34
  • 저자 : 공동환
  • 출간일 : 2012-04-26
  • 페이지 : 576쪽
  • ISBN : 9788979149135
  • 물류코드 :1913

합계 : 25,200

  • 예제 위주로 간결하고 빠르게 설명

    코드 중심으로 설명했다. 코드를 실습하면서 한 단계씩 실력을 쌓을 수 있게 했다. 단계별로 난이도를 조금씩 올리고 예제를 점진적으로 개선하는 방법을 택해 독자가 STL의 동작 원리와 구현 원리를 학습하면서 핵심 원리를 터득할 수 있게 구성했다.

    표준 템플릿 라이브러리를 위한 선수지식 포함

    표준 템플릿 라이브러리(STL)에서 폭넓게 쓰이는 핵심 기술을 먼저 소개해서 C++ 언어의 문법 이해가 낮아도 따라갈 수 있게 배려했다. 오버로딩, 함수 포인터, 함수 객체, 템플릿을 먼저 설명하고, 실제 STL 라이브러리를 직접 구현해보면서 구현 원리까지 이해할 수 있다.
    • 연산자 오버로딩
    • 함수 포인터
    • 함수 객체
    • 템플릿
    • 시퀀스 컨테이너
    • 연관 컨테이너
    • 알고리즘
    • STL 함수 객체
    • 반복자
    • 컨테이너 어댑터
    • string 컨테이너
  • [저자] 공동환

    어느덧 프로그램 개발과 강의를 병행한 지 12년이 넘었다. 가르치는 것을 좋아하며 인생은 ‘재미’와 ‘행복’ 중심이 되어야 한다고 믿는 평범한 개발자다. 지금은 한세대학교와 비트교육센터에서 프로그램 강의를 진행하며 작은 소프트웨어 회사를 시작하려 한다. 저서로는 『열혈강의 C 포인터』(프리렉, 2006)가 있다.
  • 1부. STL을 학습하기 전 꼭 알아야 할 C++ 문법1장  연산자 오버로딩   01.  연산자 오버로딩이란    02.  연산자 오버로딩 정의 및 사용하기    03.  단항 연산자 오버로딩    04.  이항 연산자 오버로딩    05.  전역 함수를 이용한 연산자 오버로딩    06.  STL에 필요한 주요 연산자 오버로딩    07.  타입 변환 연산자 오버로딩 02장  함수 포인터    01.  함수 포인터란    02.  함수 포인터의 종류    03.  클라이언트 코드와 서버 코드 3장  함수 01.  함수 객체란 02.  함수 객체 구현 4장  템플릿01.  함수 템플릿 02.  클래스 템플릿  03.  STL을 위한 템플릿 예제  2부. STL 이해하기5장  STL 소개    01.  STL이란     02.  STL을 한눈에  6장  시퀀스 컨테이너   01.  vector 컨테이너     02.  deque 컨테이너     03.  list 컨테이너  7장  연관 컨테이너   01.  set 컨테이너     02.  multiset 컨테이너     03.  map 컨테이너  8장  알고리즘   01.  원소를 수정하지 않는 알고리즘     02.  원소를 수정하는 알고리즘     03.  제거 알고리즘     04.  변경 알고리즘     05.  정렬 알고리즘     06.  정렬된 범위 알고리즘     07.  수치 알고리즘  9장  STL 함수    01.  함수 객체의 종류     02.  산술 연산 함수 객체     03.  비교 연산 조건자     04.  논리 연산 조건자     05.  바인더     06.  부정자     07.  함수 포인터 어댑터     08.  멤버 함수 포인터 어댑터  10장  반복자   01.  반복자의 종류     02.  X::iterator와 X::const_iterator     03.  X::reverse_iteratoX::const_reverse_iterator     04.  삽입 반복자     05.  입/출력 스트림 반복자     06.  반복자 특성과 보조 함수  11장  컨테이너 어댑터    01.  stack 컨테이너     02.  queue 컨테이너     03.  priority_queue 컨테이너  12장  string 컨테이너    01.  string의 주요 인터페이스와 특징     02.  string의 주요 멤버 함수 정리
  •  

    • * 리뷰를 하며 느낀 점



      뇌를 자극하는 시리즈를 IT 쿡북 시리즈와 더불어 한빛미디어 시리즈 책 중 하나입니다.



      C언어, C++, 자료구조, 알고리즘, TCP/IP, 시스템 프로그래밍 등 학부 때 전공 필수 과목을 들으며 함께 해왔고,



      제 방 책장 한 켠을 굳건히 지키고 있습니다.



      이번에 리뷰하게 된 책은 STL과 관련된 내용입니다. STL은 Standard Template Library의 약자로



      사실 학부 때는 STL을 거의 사용해 보지 못했습니다. 대학원 준비를 하며 논문과 관련된 네트워크 시뮬레이터 코딩을



      하면서 STL을 매우 자주 사용하고 접하게 되었습니다.



      사실 STL을 쓰면 코딩이 이렇게 편리해지는지 전에는 잘 알지 못했습니다. 그러나 확실히 사용한 후부터는



      기본적인 자료구조/알고리즘 내용은 알고 있기 때문에 바로 STL을 사용해서 구현하고 빠르게 확인이 가능해졌습니다.



      일일이 스택, 큐, 리스트 등을 구조체/클래스로 선언하지 않고 반복적으로 코딩을 해서 사용할 필요가 없기 때문에



      (바로 라이브러리를 가져다 쓰면 되므로) 사용해 본 사람만이 그 편리함을 잘 알 수 있습니다.



      따라서 자료구조와 알고리즘을 공부한 학부 3,4학년이라면(물론 그 전에 이해한다면 좋겠지만^^;)



      반드시 STL을 사용하여 게임 프로그래밍이나 기타 프로젝트 수업에서 유용히 사용할 수 있을 것입니다.





      * 책 내용



      STL은 몇 년 전이나 지금이나 크게 달라지지 않았습니다. 컴파일러에서 지원하는 차이가 있을 수 있지만,



      기본적으로 사용되는 컨테이너(라이브러리)들이 정해져 있습니다. 이러한 STL을 학습하기에 앞서



      C++에서 반드시 알고 넘어가야 할, 그리고 어려운 부분에서 속하는 오버로딩, 템플릿 등의 내용을 먼저 소개하고



      있습니다.



      그리고 이러한 C++을 기반으로 STL에 대한 내용을 차례대로 설명하고 있습니다.



      STL에 대한 소개 및 각종 컨테이너에 대한 설명과 그림, 예제 코드를 담고 있습니다.





      * 전체 구성 및 내용 정리



      1) 연산자 오버로딩 2) 함수 포인터

      3) 함수 객체 4) 템플릿



      -------------여기까지는 STL과 관련된 C++ 내용



      5) 시퀀스 컨테이너 6) 연관 컨테이너

      7) 알고리즘 8) STL 함수 객체

      9) 반복자 10) 컨테이너 어댑터

      11) string 컨테이너



      <1~4장>

      STL에 본격적으로 들어가기 앞서 STL을 사용하면서 많이 활용하게 되는 C++ 문법들을 언급하고 있습니다.

      연산자 오버로딩, 함수 포인터, 함수 객체, 템플릿 등 C++에서 어렵다고 생각되는 부분이기 때문에 반드시 짚고 넘어가야 합니다.



      1장 - 연산자 오버로딩의 경우 게임에서 많이 사용되는 Point 객체의 연산을 이용하고 있고, C++에서 나오는 연산자 오버로딩 부분을 전부 다루고 있어 STL의 기본 내용이 됩니다.

      4장 - 그림4-1, 2과 같이 컴파일러를 언급하면서 생성된 함수들을 비교하는 것이 특징이며 템플릿을 자주 쓰지는 않더라도 반드시 동작 원리를 알고 있어야 합니다.



      <5장>

      STL 컨테이너에 대한 분류를 하고 있으며, 구성 요소들(컨테이너/반복자/알고리즘 등)을 차례대로 설명하고 있습니다.

      특히 컨테이너에 대한 그림들(stack, vector 등)이 자세하게 그려져 있어 예제코드와 함께 이해가 쉽습니다.

      그리고 1~5, 10~50 등 동일한 수(예제)를 사용하여 다른 컨테이너들끼리 서로 동작 원리도 비교가 가능합니다.



      <6장>

      본격적으로 vector부터 차례대로 설명이 시작됩니다.

      첫 페이지에 주요 인터페이스와 특징을 설명하여 코딩시 쉽게 참고하고 쓸 수 있게 되어 있습니다.



      (다른 컨테이너를 소개할 때도 동일하게 적용됩니다.)

      실제로 코딩할 때 이러한 멤버함수들을 검색해서 많이 사용해 왔습니다.



      vector의 특징이자 장점은 바로 doubling입니다. 처음에 할당된 공간을 다 차게 되면, 자동으로 해당 크기만큼

      추가로 메모리를 자동으로 재할당하게 되는데 이는 컴파일러에 따라 다소 다를 수 있습니다.(p172~p173)

      array를 동적으로 사용할 경우 vector를 이용하면 자동 관리가 되므로 매우 편리합니다.)

      * resize()함수를 사용할 수도 있지만 늘어난 capacity가 줄어들지 않기 때문에 차이점이 존재합니다.



      vector의 경우 push_back과 pop_back 등 마지막 원소에 대해서만 기본적으로 삽입/삭제가 이루어지지만,

      이를 개선?한 것이 deque입니다. deque의 경우 앞과 뒤에서 자유롭게 삽입/삭제가 가능합니다.



      list의 경우 주로 트리에서 유용하게 쓸 수 있습니다. 노드는 원소값과 포인터를 선언해서 사용하는데 를 쓰면 관리가 편리합니다. 또한, vector, deque에 비해서 사용할 수 있는 멤버함수가 다양한 것이 특징입니다.

      특히 특정 위치에 삽입/삭제할 때는 배열 기반 컨테이너보다 이러한 노드 기반 컨테이너가 성능 관점에서 매우 우수합니다.(배열은 뒤로 밀거나 당기는 동작이 수반되기 때문에 time complexity가 달라짐)



      <7장>

      연관 컨테이너는 균형 이진트리 형태로 관리가 되며, 키 값을 가지고 앞뒤 관계(키값의 크기)를 따져보는 컨테이너입니다.

      set과 map이 있으며, set은 차례대로 키를 삽입할 수 있으며, 중복 키 값은 허용하지 않습니다.

      map은 키와 value를 같이 저장할 수 있으며, 중복 키를 허용하기 위해서는 각각 multiset, multimap을 사용할 수 있습니다.



      <8장>

      algorithm의 경우 많이 사용해보지 않은 컨테이너입니다.

      min, max, 특정 값을 search하거나 count 등을 할 수 있는 함수들을 제공합니다.

      그리고 직접적으로 해당 원소값을 수정할 수 있는 멤버함수도 제공하며 copy, replace, fill, swap 등의 함수가 있습니다.

      또한 변경/정렬 형태의 알고리즘도 추가적으로 제공하는데,

      heap 같은 경우 자료구조 수업 시간에 일일이 구현을 해야했지만,

      에서 만들고(make) 관리(push,pop,sort) 할 수 있는 함수가 있어 매우 유용할 것 같습니다.



      <9장>

      STL 함수 객체는 지금까지 사용해온 STL에서 거의 안 써본 부분입니다.

      로 선언해 사용하며, operator() 연산자를 오버로딩한 클래스 객체입니다.



      <10장>

      iterator의 경우 for문과 같은 반복문에서 사용할 수 있으며, 특히 vector를 사용시 많이 쓰입니다.

      배열 형태로 인덱스 접근도 가능하지만, begin과 end를 이용한 반복자를 이용한 방법도 많이 사용됩니다.



      <11장>

      컨테이너 어댑터에서는 stack/queue/priority_queue에 대한 간단한 설명으로,

      역시 자료구조를 통해 직접적으로 구현할 필요없이 바로 이 컨테이너들을 사용하면 유용합니다.



      <12장>

      string 컨테이너는 일반적으로 STL의 큰 범주에는 포함되지 않지만, C++ 코딩할 때도 많이 사용되는 라이브러리입니다.

      char 배열의 크기를 지정하여 선언하거나 동적으로 관리할 때 모두 불편하고 null문자도 고려해야 하는 등 다소 어렵습니다.

      strcpy, strcat 등 함수들도 다 알아야 합니다. 그러나 string 컨테이너를 선언해 쓰면 제공하는 멤버함수를 통해

      폭넓게 string(문자열)을 관리할 수 있습니다.



      * 좋은 점

      1) 칼라로 인쇄되지는 않았지만 공부하기에는 이런 책이 더 우수하다고 생각합니다.

      특히 코드 부분이 많기 때문에 눈의 피로가 적습니다.

      2) 비슷한 예제들(코드)을 반복적으로 사용하고 짧게 짧게 연습해 보면서 필요한 내용들을 학습할 수 있습니다.

      3) STL을 처음 접하는 독자의 경우 다소 개념적으로 어려울 수 있는데

      항상 예제 코드와 자세한 동작 그림을 포함시켜 쉽게 이해할 수 있도록 돕고 있습니다.



      * 아쉬운 점

      STL을 공부하는데는 매우 유용한 책임은 분명하지만, 마지막 한 챕터 정도는

      이러한 컨테이너들을 복합적으로 사용하는 간단한 프로젝트 정도를 넣었으면 더 좋지 않을까 생각하였습니다

    • 코딩의 기술 : C와 C++ 게임 코드로 알아보는

      오즈 모리하루

    • 전문가를 위한 C++ : C++ 11을 대하는 유쾌한 방법(개정판 2권)

      마크 그레고리 , 니콜라스 솔터 , 스캇 클레퍼

    • 전문가를 위한 C++ : C++ 11을 대하는 유쾌한 방법(개정판 1권)

      마크 그레고리 , 니콜라스 솔터 , 스캇 클레퍼

    • 이것이 C++이다

      최호성

    • 뇌를 자극하는 C++ 프로그래밍

      이현창

닫기

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