본문 바로가기
Study About Computing/언어_Language

[C++/0] 언어에 대해서, C++의 특징

by gamgok 2022. 4. 5.

시작하면서

C++은 비야네 스트롭스트룹(Bjarne Stroustrup)에 의해 개발된 것으로 알려져 있으며, 아주 다양한 구문, 기능들을 지원하고 지원하고 있으며 표준 라이브러리를 폭넓게 적용할 수 있는 언어입니다. 

@yuva.krishna.memes


배우기 정말 어려운 언어로 악명이 자자하기도 합니다. 그런데 굳이 왜 쓰는걸까요? 몇몇 학교에서는 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

댓글