1장 C++에 왔으면 C++의 법을 따릅시다 🏳

Effective C++ 책을 읽고 정리하고자 합니다.
궁금한 점, 보안점 남겨주시면 감사하겠습니다 🙇

C++ 에서 뿜어져 나오는 힘을 자유자재로 휘두르면서 기능을 효과적으로 활용하기 위해서는 여러분의 행동방식과 사고방식을 C++ 스타일로 만들면 좋습니다. 어떤 관점으로 C++을 바라봐야하는지 알아봅시다.

C++를 바라보는 관점

C++ 처음 이름 조차도 Class with C 라고 정의될 정도로 C에 가깝게 구성되어졌으며, C언어에 객체지향 기능 몇 가지가 결합된 형태였다. 하지만 C++은 꾸준한 성장을 거쳐 아이디어, 기능, 프로그래밍 전략 들을 취해 C와의 차별성을 뒀다. 일례로, 함수 구성 방식을 변경한 예외, 템플릿, 확장성 용이한 STL 등의 기법들을 취하면서 독자적인 프로그래밍 언어로 거듭났다.

우리는 C++을 다중패러다임 프로그래밍 언어 (multiparadigm programming language)이라 부른다. 절차적 언어를 기반으로 객체지향, 함수식, 일반화 프로그래밍을 포함하여 메타프로그래밍 까지 다양한 개념을 내포하고 있고, 이런 표현들은 C++ 엄청난 표현들과 유연성을 제공해준다.

그렇다면, 이렇게 발전한 C++을 어떤 관점으로 봐라보면 좋을까?

C++을 단일 언어로 보지말고 여러개의 언어들이 결합된 “연합체” 로 바라보는 관점을 가지는 것을 권한다.

C++ 연합체를 구성하는 4가지

C++ 를 공부할 때, 연합체를 구성하는 하위 개념 4가지를 쪼개서 공부하면 쉽게 접근할 수 있다.

C (절치지향) - C++은 여전히 C를 기반으로 구성된다. 블록, 문장, 선행처리자, 기본 제공 데이터타입, 배열, 포인터 등 모든 것들이 C 에서 왔다. C언어처럼 절차지향으로 쓸 수 있지만 그럴경우 C++에 매력이 떨어지니, 아래의 개념들도 확인해보자.

객체 지향의 C++ 개념 - 해당 부분은 Class 관한 부분들이다. 클래스, 캡슐화, 상속, 다형성, 가상함수 등 우리가 학교에서 늘 배우는 부분들이다.

템플릿 C++ - C++의 일반화 프로그래밍 부분으로 모든 경우를 고려해 확장가능한 C++를 작성하는 부분이다. 보통 프로그래머들이 해당 부분까지는 오지 않는다. 이 부분을 공부하면 득이 될 것이다. 특히 48장에서 다루는 TMP (템플릿 메타 프로그래밍) 부분을 잘 확인해보자.

STL (Standard Template Library) - STL은 이름에서 알 수 있듯이 템플릿 기반 라이브러리이다. STL의 세계는 컨테이너, 반복자, 알고리즘과 함수객체 들이 얽혀 하나를 구성하고 있다. 우리가 흔히 알고리즘을 공부할 때 많이 만나는 부분들이다.

C++를 사용한 효과적인 프로그래밍은 규칙에 따라 달라진다. 그 경우가 바로 C++의 어떤 개념들을 취해서 사용하느냐이다. 해당 부분들일 잘 기억해서 C++언어에 접근해보자.