프로그래밍 언어에 대한 자세한 설명을 하기보다는 프로그래밍 언어를 조금 더 잘 코딩하고 실행 속도와 효율을 높일 수 있는 이야기로 풀어나가는 책이다. 좋은 프로그램 작성 방법을 소개하여 상위 프로그래머와 일반 프로그래머를 구별하는 작은 차이를 만들어내고 있다. 절차적인 프로그래밍 환경에서 알고 있어야 할 내용과 핵심적인 기능들, 추상화에 대한 내용들을 다루고 있다.
Part 1. 절차적인 프로그래밍 환경에서 알고 있어야 할 내용
Chapter 01. 데이터 관리에 필수 요소인 변수와 상수
Chapter 02. 명령어들의 집합 함수
Chapter 03. 프로그램 실행의 흐름을 제어하는 제어문
Chapter 04. 소스 코드를 간결하게 해주는 반복문
Chapter 05. 연산자(Operator)
Part 2. 객체지향 프로그램의 핵심적인 기능들 정리 I
Chapter 01. 개요
Chapter 02. 클래스의 골격
Chapter 03. 생성자(Constructor)
Chapter 04. 소멸자(destructor)
Chapter 05. 접근 제한자(access modifier)
Chapter 06. 멤버 초기화 목록(the member initialization list)
Chapter 07. this 포인터
Chapter 08. const 멤버 함수와 mutable
Chapter 09. inline 멤버 함수
Chapter 10. friend
Chapter 11. 네임스페이스(namespace)
Part 3. 객체지향 프로그램의 핵심적인 기능들 정리 II
Chapter 01. 클래스 다이어그램
Chapter 02. 상속의 의미와 종류
Chapter 03. virtual
Chapter 04. 값 클래스(Value Class)와 기반 클래스(Base Class)
Chapter 05. C++ 타입 캐스팅(Type Casting)
Chapter 06. 오버로딩(Overloading, 중복 정의)과 오버라이딩(Overriding, 재정의)
Chapter 07. 다중 상속(multiple inheritance)과 가상 상속(virtual inheritance)
Chapter 08. 상속 접근 제한자
Chapter 09. 함수 포인터와 멤버 함수 포인터
Chapter 10. 예외 처리
Part 4. 객체지향 프로그램의 핵심적인 기능들 정리 III
Chapter 01. 템플릿 함수
Chapter 02. 템플릿 멤버 함수
Chapter 03. 클래스 템플릿
Chapter 04. 템플릿의 컴파일 최적화
Chapter 05. 템플릿과 상속
Chapter 06. 내장 템플릿
Chapter 07. 템플릿 매개 변수로 다른 템플릿 사용하기
Chapter 08. 템플릿 매개 변수로 상수형 인스턴스 사용하기
Chapter 09. 템플릿 특수화(Template Specialization)
Part 5. 추상화에 대한 이해
Chapter 01. 추상화
Chapter 02. 추상화의 발전 과정과 종류
Chapter 03. 상속을 통한 추상화 계층 설계
대입 연산자에서 this 포인터 자기 자신을 가릴 때에 대한 처리와 이를 assembly 상에서 동작하는 예시를 보며 대입 연산자와 복사 생성자의 차이를 명확하게 알려준다. 복사 생성자는 새로운 클래스 변수가 생성되는 시점에 호출되지만, 할당 연산자는 이미 생성된 인스턴스에 같은 데이터 타입으로 값을 할당하게 되는데 이를 assebly 단에서 move, push 등 확인해 준다.
그 외의 매개변수와 오버 로딩되는 연산자에 따라서 차이점을 확인할 수 있다. 그러나 매개변수가 있는 연산자는 모호함이 있을 수 있다. 컴파일러마다 암묵적으로 만들어주는 생성자가 있기에 문제가 발생할 수 있는데 이를 방지하기 위해 explicit 키워드를 사용하여 명시적으로 암묵적인 타입 캐스팅이 될 오류를 방지한다.
초기화 리스트 챕터에서는 사용하지 않을 차이점을 assembly 단에서 초기화 리스트가 있는 경우와 없는 경우에 관해서 확인하면서 대입 연산이 들어가지 않는 차이를 확인할 수 있다.
다중 상속 장에서는 다이아몬드 상속에 대해서 설명하며 이를 회피하는 방법 중 SCOPE 연산자를 이용하여서 명시적으로 호출하는 방법과 VIRTUAL 상속을 사용하는 방법을 제시한다. 이를 글로만 본다면 어려울 수 있으나 UML을 통하여 CLASS 간의 관계를 그려서 설명되어 있다.
책의 전반적인 내용은 C++에서 중요시하는 기본개념에 대해서 충실히 설명되어 있다. 필자는 대학교에서 C++ 배울 때와 비교해서 생각해보면 해당 책은 다중 상속, 템플릿 특수화, 네임스페이스 등을 UML을 통하여 도식화되어 있어 글로 보는 설명보다는 이해하기가 더 쉬웠다.
오버 로딩, 연산자 오버라이딩, VIRTUAL 상속 등 동작하는 차이를 직접 assembly 코드를 보며 설명해주는 부분도 매우 인상 깊었다. VIRTUAL 쪽에서는 COM 프로그래밍에서 주로 사용하는 Runnable 인터페이스와 UUID 등을 예시를 들며 설명이 되어 있는데 이는 저자가 MS COM 프로그래밍을 정확히 알고 있는 게 아닌가 생각이 들었다.
단순하게 자료형, 반복문, IF 사용법을 소개하고 Class는 무엇인지 설명하는 게 아니라 assembly 단에서 동작하는 방식의 차이와 UML을 통하여 도식화하여 이해를 도와준다.
하지만 Effective C++이나 GOF 리팩토링 책에 내용이 조금 섞여 있긴 한데 이는 저자가 책을 집필할 때 참고문헌을 위 책을 사용했다 하니 이는 어느 정도 참작할만하다. 아무런 이해 없이 바로 Effect Cplus, UML, 리팩토링 책에 접근하면 읽기 어렵다고 느낄 수 있는데 이 책에서는 이러한 난해 점을 C++이나 COM으로 구현할 때 Class Diagram으로 도식화하고 객체 간의 관계에 관해서 설명을 하여 "어느 부분에서 리팩토링을 해야 하며 여기서 필요한 점은 무엇이다!" 자연스럽게 설명한다.
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
텐서플로 라이트를 활용한 안드로이드 딥러닝 (0) | 2022.01.17 |
---|---|
머신러닝 엔지니어링 - 제이펍 (0) | 2022.01.07 |
자바스크립트는 모든 곳에 존재한다 - 그래프QL, 리액트, 리액트 네이티브, 일렉트론으로 크로스플랫폼 앱 만들기 (0) | 2021.12.24 |
핵심만 골라 배우는 안드로이드 스튜디오 Arctic Fox & 프로그래밍 - 제이펍 (0) | 2021.12.24 |
가볍게 떠먹는 데이터 분석 프로젝트 - 제이펍 (2) | 2021.12.15 |
댓글 영역