서적 정리/Effective C++

1.C++를 언어들의 연합체로 바라보는 안목은 필수

민돌이2 2021. 12. 10. 23:47

C++는 다중패러다임 프로그래밍 언어(Multiparadigm programming language)라고 불린다.

절차적(procedural) 프로그래밍을 기본으로 객체 지향(object-oriented), 함수식(functional), 일반화(generic) 프로그래밍을 포함하여 메타프로그래밍(metaprogramming) 개념까지 지원한다.

 

C

C++은 C를 기본으로 하고 있다. 블록, 문장, 선행 처리자, 기본제공 데이터타입(int ,float 등), 배열, 포인터 등 C에서 이어져 왔다. C기능만 사용해도 되나 템플릿도 없고 예외, 오버로딩도 없어 적용할 수 있는 범위가 좁아짐(C++의 장점)

 

객제 지향 개념의 C++

클래스를 사용하는 C에 관한 것이 해당된다. 생성자와 소멸자, 캡슐화, 상속, 다형성, 가상 함수등이 있다.

 

템플릿 C++

일반화 프로그래밍 부눙이고 템플릿 메타프로그래밍(template metaprogramming : TMP)이라고 한다.

 

STL
템플릿 라이브러리(template library)이다. 컨테이너(container), 반복자(iterator), 알고리즘(algorithm)과 함수 객체(function object)가 얽혀 돌아가는 규약으로 삼고 있으나 얼마든지 다른 아이디어 중심으로 만들어질 수 있다.(커스텀 가능?)

 

효과적인 프로그래밍 개발을 위해 한 하위 언어에서 다른 하위 언어로 옮겨 가면서 대응 전략을 바꿔야 하는 상황이 온다. 예를 들어 C 스타일로만 쓰고 있으면 기본제공 타입에 대해서는 값 전달(pass-by-value)이 참조 전달(pass-by-reference)보다 대개 효율이 더 좋다 라는 규칙이 통하지만, 객체 지향 C++에서는 사용자 정의 생성자/소멸자 개념이 생기면서 상수 객체 참조자에 의한 전달(pass-by-reference-to-const)방식이 더 좋은 효율을 보인다. 특히 템플릿에서 두드러진다.(객체의 타입 조차 알 수 없기 때문에)

하지만 STL의 반복자 및 함수 객체에 대한 값 전달에 대한 규칙이 힘을 발휘한다(20장 참고).

 

이것만은 잊지 말자

C++를 사용한 효과적인 프로그래밍 규칙은 경우에 따라 달라진다. 그 경우란, C++의 어떤 부분을 사용하느냐이다.

728x90