일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 고양이
- A. Steed 2: Cruise Control
- 냥이
- 파머스테이블
- CDJ
- 발산
- CodeJam 2017 Round 1B
- 커플
- 스코티쉬 스트레이트
- 소호정본점
- codejam
- 치명적 귀여움
- 카페
- 양재맛집
- 스파게티
- 냥스토리
- 부모님과
- RED CAT COFFEE X LOUNGE
- 데이트
- 먹기좋은곳
- 안동국시
- 레스토랑
- coffee
- 발산맛집
- 고양이는 언제나 귀엽다
- 스테이크
- 냥냥
- 발산역 근처 카페
- 소호정
- 파버스
- Today
- Total
hubring
[EC++] 항목1 C++를 언어들의 연합체로 바라보는 안목은 필수 본문
C++ 프로그래밍 개념
오늘날의 C++은 다중패러다임 프로그래밍 언어(multipradigm programming language)라고 불린다.
절차적(procedural), 객체 지향(object-oriented), 함수식(functional), 일반화(generic), 메타(meta) 프로그래밍의 개념까지 지원한다.
각 지원하는 프로그래밍 마다 적절한 사용 규칙이 존재한다.
C++ 을 제대로 따라잡기 위해 여러 개의 하위 언어(4가지)에 대해 알아보고 각각의 프로그래밍 개념에 맞는 규칙을 적용할 수 있도록 하자.
1. C
C++ 은 여전히 C를 기본으로 하고 있다.
따라서 C 언어 기능만 쏙 뽑아서 사용이 가능하다.
2. 객체 지향 개념
클래스(생성자와 소멸자), 캡슐화, 상속, 다향성, 가상 함수(동적 바인딩) 등의 개념을 포함한다.
객체 지향 설계의 규칙들 대부분이 그대로 드러맞는 부분이다.
3. 템플릿 C++
C++의 일반화 프로그래밍의 부분
템플릿의 영향력이 커지면서 완전히 새로운 프로그래밍 패러다임이 파생되었다.
이 패러다임은 템플릿 메타 프로그래밍(template metaprograming : TMP)이라 부른다.
=> 이부분은 항목48에서 전반적으로 다룰예정
4. STL
템플릿 라이브러리로 컨테이너, 반복자, 알고리즘, 함수 객체로 이루어졌다.
STL 나름의 독특한 사용 규약을 가지고 있으므로 프로그래밍 시 그 규약을 따라 한다.
이 4가지 하위 언어들이 C++을 이루고 있다는 점을 새기며 효과적인 프로그램 개발을 위해 각 하위 언어 사용에 따라 전략을 바꾸며 사용하도록 한다.
하위언어 사용에 따른 전략 변경 예로
C 스타일로 사용하는 경우, 값 전달이 참조 전달 보다 대개 효율이 더 좋다 라는 규칙이 통하지만.
객체 지향으로 사용하는 경우, 생성자/소멸자의 개념으로 상수 객체 참조자에 의한 전달(pass-by-reference-to-const) 방식이 더 좋은 효율을 보인다.
=> 해당 부분이 더 효율적이라 하는 이유는 객체를 매개변수와 같이 전달할 때 값 전달(복사 생성자 호출)로 받게되면 메모리가 추가로 차지하게 되기 때문인 것으로 보임. (항목 20 참고)
이 현상은 템플릿 C++를 쓰게 될 때 특히 두드러지는데 그 이유는 템플릿에서는 객체의 타입조차 알 수 없기 때문이다.
하지만 STL에서는 반복자와 함수 객체가 C의 포인터를 이용하여 만들었기에 다시 값 전달에 대한 규칙이 더 힘이 있다.
이것만은 잊지 말자!
* C++를 사용한 효과적인 프로그래밍 규칙은 C++의 어떤 부분(사용하는 프로그래밍 개념, 하위 언어)를 사용하냐에 따라 달라진다.
'C++ > Effective C++' 카테고리의 다른 글
[EC++] 항목 48: 템플릿 메타 프로그래밍, 하지 않겠는가? (0) | 2021.10.13 |
---|---|
[EC++] 항목 3 : 낌새만 보이면 const를 들이대 보자! (0) | 2021.06.16 |
[EC++] 항목 2 : #define을 쓰려거든 const, enum, inline을 떠올리자. (0) | 2021.06.12 |
[EC++] 독자 여러분 반갑습니다 (0) | 2021.06.11 |