본문 바로가기
프로그래밍/Effective C++

독자 여러분 반갑습니다.

by Ohdumak 2018. 3. 15.

이 책의 목적은 C++를 효과적으로 구사하는 방법을 가르쳐 주는 것이다.


C++라는 언어를 사용해서 제작한 여러분의 소프트웨어가 이해하기 좋고 유지보수에도 그만이고 이식성, 확장성, 효율성까지 지님은 물론이며 여러분의 의도대로 동작하게 만들 때까지 많은 수고가 들지 않는 그런 결과물이 되는 데 도움이 될 지침 혹은 조언을 모아 두었다.


안목을 기르자는 목표를 가지고 읽자.



용어사용에 대하여

선언(declaration)은 코드에 사용되는 '어떤 대상'의 이름과 타입을 컴파일러에게 알려 주는 것


모든 함수의 선언문에는 시그니처(signature), 함수의 매개변수 리스트와 반환 타입이 나와 있다. 함수의 경우엔 시그니처가 그 함수의 타입이다.


정의(definition)는 선언에서 빠진 구체적인 세부사항을 컴파일러에게 제공하는 것이다.


초기화(initialization)는 어떤 객체에 최초의 값을 부여하는 과정이다. 사용자 정의 타입으로 생성한 객체의 경우, 초기화는 생성자에 의해 이뤄진다. 기본 생성자(default constructor)는 어떤 인자도 주어지지 않은 채로 호출될 수 있는 생성자이다.


복사 생성자(copy constructor)는 어떤 객체의 초기화를 위해 그와 같은 타입의 객체로부터 초기화할 때 호출되는 함수이고, 복사 대입 연산자(copy assignment operator)는 같은 타입의 다른 객체에 어떤 객체의 값을 복사하는 용도로 쓰이는 함수이다.


STL은 표준 템플릿 라이브러리(Standard Template Library)의 준말이다. C++의 표준 라이브러리에 속해 있는 라이브러리로서 컨테이너(vector, list, set, map 등), 반복자(vector<int>::iterator, set<string>::iterator 등), 알고리즘(for_each, find, sort 등) 및 관련된 기능들이 집결한 결정체이다. 관련된 기능들의 상당 부분을 함수 객체(function object), 즉 함수처럼 동작하는 C++ 객체가 차지하고 있다.


C++ 프로그램을 잘 만드는 사람들은 미정의 동작(undefined behavior)과 멀리 떨어져 가는 코드를 만드는 데 최선을 다한다.


C++의 인터페이스(interface)라는 용어는 함수의 시그니처, 혹은 어떤 클래스의 접근가능 요소라든지, 템플릿의 타입 매개변수로서 유효해야 하는 표현식 등을 가리킨다.


'사용자'는 만든 코드를 사용하는 아무개 혹은 아무것이다.



이름짓기에 대한 규약



스레딩에 대한 고려사항

C++는 언어 차원에서 스레드에 대한 개념 자체가 없다. 어떤 종류의 병행성도 고려하고 있지 않은 언어이다. 이 책에서 다루는 스레드 이야기는 C++를 사용할
때 해결해야할 스레딩 문제의 시작점에 불과하다는 것이다.


TR1 그리고 부스트

-TR1("Technical Report 1") C++ 표준 라이브러리에 새로 추가되는 기능들에 대한 명세.

새로 추가된 기능들은 클래스 및 함수 템플릿이 주류인데, 해시 테이블(hash table), 참조 카운팅 방식 스마트 포인터(reference-counting smart pointer), 정규 표현식(reqular expression)등이다.

TR1의 모든 구성요소는 tr1 네임스페이스에 들어 있고, tr 네임스페이스는 std 네임스페이스 안에 중첩되어 있다.

- 부스트 비슷한 공력의 고수들 사이에서 교차 검증을 거쳤고 플랫폼 간 이식성도 가진 오픈소스 C++ 라이브러리를 제공하는 단체이다. 부스트에 오면 TR 외에 더 많은 유익한 것들을 구할 수 있기 때문에 꼭 알아야 한다.

728x90

댓글