C++ 편집하기

경고: 로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다. 로그인하거나 계정을 생성하면 편집자가 사용자 이름으로 기록되고, 다른 장점도 있습니다.

편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.

최신판 당신의 편집
1번째 줄: 1번째 줄:
https://isocpp.org/files/img/cpp_logo.png
;C++
;C++
==개요==
C++는 기본적으로 [[C언어]]를 확장한 언어이다.
*C언어와 마찬가지로, 기본적으로 메모리 관리를 수동으로 한다. 물론 스마트 포인터도 사용할 수 있다.
*객체지향과 일반화 프로그래밍을 모두 아우르는 멀티 패러다임이다.
*언어 설계 자체가 성능을 추구하므로, [[자바]]나 [[C#]]과 같은 언어보다 빠르고 [[네이티브 앱|네이티브]]로 컴파일된다.
*다른 언어보다 비교적 어렵고 생산성이 낮다고 평가받는다.


C언어와 호환성이 있으며 객체지향과 일반화 프로그래밍과 같은 멀티 패러다임을 지원하는 시스템 프로그래밍 언어
==C언어와의 관계==
 
C언어와는 다음의 특성을 지닌다.
*[https://isocpp.org/ 홈페이지]
 
 
==특징==
*C언어와 호환성이 있다.
*객체지향과 일반화 프로그래밍을 모두 아우르는 멀티 패러다임을 지원한다.
*zero-cost abstraction<ref>성능 하락 없는 추상화를 의미한다.</ref>를 설계 이념으로 하여 고성능을 추구하므로, [[자바]]나 [[C#]]과 같은 언어보다 빠르다.
*다른 언어보다 어렵고 복잡하며 비교적 생산성이 낮다고 평가받는다.<ref>프로그래머의 자유를 우선시하고 멀티 패러다임을 지원하기 위해 문법의 제약이 적다. 다만, 이로 인해 난이도가 C언어보다도 어려워졌다.</ref>
 
===C언어와의 관계===
*C언어와 호환성이 있지만 설계 지향점이 다르기 때문에, 전혀 다른 언어로 보는 것이 안전하다.
*C언어와 호환성이 있지만 설계 지향점이 다르기 때문에, 전혀 다른 언어로 보는 것이 안전하다.
*C언어를 부분집합으로 갖지만, 일부 과거 버전은 그렇지 않았던 경우도 있었다.
*C언어를 부분집합으로 갖지만, 일부 과거 버전은 그렇지 않았던 경우도 있었다.
22번째 줄: 16번째 줄:


템플릿은 제네릭보다 크게 확장된 개념으로, 자바나 C#의 [[제네릭 프로그래밍|제네릭]]보다 많은 역할을 수행한다.
템플릿은 제네릭보다 크게 확장된 개념으로, 자바나 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와 같이 쓰레기 수집을 참조 횟수 계산 방식으로 지원하거나 std::unique_ptr와 같이 소유권을 넘겨줄 수 있는  스마트 포인터를 활용하면, 이러한 구현 자체가 문제되지는 않는다.
다만, C++11 이후 추가된 std::shared_ptr와 같이 쓰레기 수집을 참조 횟수 계산 방식으로 지원하거나 소유권을 넘겨줄 수 있는  스마트 포인터를 활용하면, 이러한 구현 자체가 문제되지는 않는다.


==성능 제약 요소==
==성능 제약 요소==
113번째 줄: 105번째 줄:


==소스코드 예시==
==소스코드 예시==
<syntaxhighlight lang='cpp'>
<source lang='cpp'>
#include <iostream>
#include <iostream>


120번째 줄: 112번째 줄:
     return 0;
     return 0;
}
}
</syntaxhighlight>
</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] http://it-jobgo.co.kr/, http://www.itbk.net/
*[https://en.cppreference.com/w/ cppreference.com]
* https://google.github.io/styleguide/cppguide.html
* 관련 교육기관 : http://kgeduoneitbank.com/


[[분류: C++]]
[[분류: C++]]

제타위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 3.0 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는 제타위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다. 저작권이 있는 내용을 허가 없이 저장하지 마세요!

취소 편집 도움말 (새 창에서 열림)