편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.
최신판 | 당신의 편집 | ||
1번째 줄: | 1번째 줄: | ||
;C++ | ;C++ | ||
==개요== | |||
C++는 기본적으로 [[C언어]]를 확장한 언어이다. | |||
*C언어와 마찬가지로, 기본적으로 메모리 관리를 수동으로 한다. 물론 스마트 포인터도 사용할 수 있다. | |||
*객체지향과 일반화 프로그래밍을 모두 아우르는 멀티 패러다임이다. | |||
*언어 설계 자체가 성능을 추구하므로, [[자바]]나 [[C#]]과 같은 언어보다 빠르고 [[네이티브 앱|네이티브]]로 컴파일된다. | |||
*다른 언어보다 비교적 어렵고 생산성이 낮다고 평가받는다. | |||
==C언어와의 관계== | |||
C언어와는 다음의 특성을 지닌다. | |||
== | |||
*C언어와 호환성이 있지만 설계 지향점이 다르기 때문에, 전혀 다른 언어로 보는 것이 안전하다. | *C언어와 호환성이 있지만 설계 지향점이 다르기 때문에, 전혀 다른 언어로 보는 것이 안전하다. | ||
*C언어를 부분집합으로 갖지만, 일부 과거 버전은 그렇지 않았던 경우도 있었다. | *C언어를 부분집합으로 갖지만, 일부 과거 버전은 그렇지 않았던 경우도 있었다. | ||
22번째 줄: | 16번째 줄: | ||
템플릿은 제네릭보다 크게 확장된 개념으로, 자바나 C#의 [[제네릭 프로그래밍|제네릭]]보다 많은 역할을 수행한다. | 템플릿은 제네릭보다 크게 확장된 개념으로, 자바나 C#의 [[제네릭 프로그래밍|제네릭]]보다 많은 역할을 수행한다. | ||
사실상 C++에 포함되며 성능을 위해 컴파일 시간에 전부 처리되는, 하나의 작은 프로그래밍 언어라고 봐도 무방하다. | |||
이러한 문법을 사용하는 프로그래밍을 메타 프로그래밍이라고 한다. | |||
사실상 성능을 위해 컴파일 시간에 전부 처리되는, 하나의 작은 프로그래밍 언어라고 봐도 무방하다. | |||
표준 라이브러리를 사용한다면, 무조건 템플릿을 사용하게 된다. | |||
예를 들어, 동적 배열 객체인 'vector<int>'은 int 타입에 특수화하여 int 배열을 생성한다. | 예를 들어, 동적 배열 객체인 'vector<int>'은 int 타입에 특수화하여 int 배열을 생성한다. | ||
템플릿은 컴파일 시간에 모든 과정이 처리되므로, 실행 시간에 int 대신 short 타입에 특수화할 수는 없다. | 템플릿은 컴파일 시간에 모든 과정이 처리되므로, 실행 시간에 int 대신 short 타입에 특수화할 수는 없다. | ||
36번째 줄: | 28번째 줄: | ||
C++는 자바나 C#과 같은 언어와 완전히 다른 방식으로 메모리 관리를 한다는 것을 유의해야 한다. | C++는 자바나 C#과 같은 언어와 완전히 다른 방식으로 메모리 관리를 한다는 것을 유의해야 한다. | ||
자바나 C#에서는 다른 객체에서 객체를 생성해서 넘겨주는 방식이 적지 않게 사용되지만, C++에서 이는 메모리 문제를 일으키기 쉽다. | 자바나 C#에서는 다른 객체에서 객체를 생성해서 넘겨주는 방식이 적지 않게 사용되지만, C++에서 이는 메모리 문제를 일으키기 쉽다. | ||
다만, C++11 이후 추가된 std::shared_ptr와 같이 쓰레기 수집을 참조 횟수 계산 방식으로 지원하거나 | 다만, C++11 이후 추가된 std::shared_ptr와 같이 쓰레기 수집을 참조 횟수 계산 방식으로 지원하거나 소유권을 넘겨줄 수 있는 스마트 포인터를 활용하면, 이러한 구현 자체가 문제되지는 않는다. | ||
==성능 제약 요소== | ==성능 제약 요소== | ||
113번째 줄: | 105번째 줄: | ||
==소스코드 예시== | ==소스코드 예시== | ||
< | <source lang='cpp'> | ||
#include <iostream> | #include <iostream> | ||
120번째 줄: | 112번째 줄: | ||
return 0; | return 0; | ||
} | } | ||
</ | </source> | ||
==같이 보기== | ==같이 보기== | ||
136번째 줄: | 128번째 줄: | ||
* {{위키백과}} | * {{위키백과}} | ||
* {{영어 위키백과}} | * {{영어 위키백과}} | ||
* [http://terms.naver.com/entry.nhn?docId=1179635&cid=200000000&categoryId=200003361 네이버 지식백과] | *[http://terms.naver.com/entry.nhn?docId=1179635&cid=200000000&categoryId=200003361 네이버 지식백과] | ||
* [https://en.cppreference.com/w/ cppreference.com] | *[https://en.cppreference.com/w/ cppreference.com] | ||
[[분류: C++]] | [[분류: C++]] |