시작하면서
C++은 비야네 스트롭스트룹(Bjarne Stroustrup)에 의해 개발된 것으로 알려져 있으며, 아주 다양한 구문, 기능들을 지원하고 지원하고 있으며 표준 라이브러리를 폭넓게 적용할 수 있는 언어입니다.
배우기 정말 어려운 언어로 악명이 자자하기도 합니다. 그런데 굳이 왜 쓰는걸까요? 몇몇 학교에서는 C를 배우고 이후에 다른 언어가 아닌 C++을 많이 선택하기도 합니다. 이 글 작성자도 C를 배운 뒤에 다음 학기에 C/C++ 프로그래밍이란 이름으로 C++을 처음 접하게 되었습니다.
C++은 제대로 사용하기 정말 어렵지만 다양한 기능을 폭넓게 경험하기에 아주 좋은 언어입니다. 여전히 속도도 빠르고 C를 배웠다면 구문이 가장 익숙하게 느껴질 것입니다. C++로 개발을 시작하기에는 적합하지 않지만 알고리즘이나 자료구조, 기본적인 프로그래밍 실력을 키우기에는 적합하다고 생각합니다.
특징
이름에서 알 수 있듯이 C와 매우 유사하며, C에서 사용할 수 있는 자료형, 헤더(헤더에 포함된 함수), 수식, 구문을 모두 사용할 수 있습니다. C에서 발전되었고 C가 여러 이유(비교적 로우 레벨, 컴파일 빠름 등)에서 빠른 언어인 것처럼 C++도 기능을 적절히 활용하면 C처럼 빠르게 사용할 수 있습니다.
C와 같이 표준 헤더를 포함하여 다양한 작업을 수행할 수 있습니다.
대표적으로는 아래와 같은 헤더들이 있습니다.
- iostream : 입출력 헤더
- string : 문자열 클래스 헤더
- algorithm : 여러 함수를 제공하는 헤더, 커스터마이징이 가능하도록 잘 정의되어 있다.
- utility : pair, tuple의 조작을 제공하는 헤더
- vector, stack, queue, deque, map, list : 자료구조 헤더
이외에도 여러 표준 헤더들을 제공하고 있습니다.
C와 같이 main 함수를 가지고 있어, 프로그래밍의 시작점을 main으로 잡습니다.
대표적인 hello, world를 표준 헤더를 이용하여 출력하는 코드는 아래와 같습니다.
#include<iostream>
using namespace std;
// using, namespace 에 대한 설명은 다른 포스트에서 다룬다.
int main() {
cout << "hello, world" << endl;
// cout은 출력을 시작하는 알림
// << 연산자는 cout을 연쇄적으로 사용할 수 있는 연산자이다.
// endl은 "\n"와 같다. cout에 개행을 알린다.
return 0;
}
위의 코드를 보면<< 같은 연산자를 보면 형태가 아주 복잡해보인다.
하지만 이를 몇번 써보면 알겠지만 형식 문자열보다 훨씬 단순하다.
그리고 아래와 같이 C에서 사용하던 자료형, 함수, 수식도 모두 사용할 수 있습니다.
#include<iostream>
#include<cmath>
// C++에서는 math.c 와 같은 형식을 cmath처럼
// .(마침표)없이 사용할 수 있도록 지원하고 있다. (몰론, math.c도 된다)
using namespace std;
int main() {
int a = 3;
float b = 3.14;
long long c = 0xff;
cout << a << " " << b << " " << c << int(sqrt(4)) << endl;
return 0;
}
3 3.14 2552
이 출력됩니다. (c와 int(sqrt(4)) 사이에는 공백문자가 없습니다)
하지만 C와는 다르게 부가적인 여러 기능을 지원하는데,
객체 지향 프로그램(OOP) 구현을 위한 클래스와 관련된 여러 기능(template, virtual, 다중 상속 등)과
C++ 만의 초기화 스타일이나 함수의 오버로딩(클래스에서는 오버라이드) 등의 여러 기능을 지원합니다.
여러 기능들을 설명하는 건 복잡하니 C++ 11 이상에서 지원하는 초기화 스타일만 확인해보겠습니다.
int main() {
int a = 3; // C 스타일, 복사 초기화라고도 한다.
int a(3); // 생성자 스타일, 직접 초기화라고도 한다.
int a{3}; // 유니폼 초기화, 모든 데이터 타입(배열 형태)에도 적용하기 위해 만들어졌다.
}
C++에는 신기한 기능이 정말 많은데, 블로그조차 C++을 모두 자세히 다루기에는 너무 양이 방대하기 때문에 하나씩 쪼개서 C++ 에 대해서 알아보도록 하겠습니다.
마치며
C++은 비교적 역사가 있는 언어이기도 하고 객체지향을 지원하고 고수준의 기능들을 지원하지만 그럼에도 불구하고 로우 레벨의 언어처럼 사용할 수 있습니다. 그래서 분석하는 맛도 있고 코드를 읽었을 때 여타 언어보다 의사 코드(pseudo code)에 가깝게 느껴지는 경향이 있는 것 같습니다.
'Study About Computing > 언어_Language' 카테고리의 다른 글
[C++/ETC] algorithm (0) | 2022.05.03 |
---|---|
[C++/2] 자료형과 변수 (0) | 2022.04.26 |
[C++/ETC] C++ 연산자 우선순위 (0) | 2022.04.19 |
[C++/ETC] C++ 예약어(keywords) (0) | 2022.04.17 |
[C++/STL] vector container (0) | 2020.03.23 |
댓글