C++ 초급 - 1. C++ 소개 및 개발 환경 설정 (1 - C++ 개요 및 특징)

2025. 2. 12. 11:13프로그래밍 언어/C++

1.1 C++ 개요 및 특징


C++의 탄생과 역사

C++의 개발 배경 (Bjarne Stroustrup, 1983년 발표)

C++는 Bjarne Stroustrup이 1983년에 개발한 프로그래밍 언어로, C 언어를 기반으로 객체지향 프로그래밍(OOP) 기능을 추가하여 확장된 언어다.

  • Stroustrup은 C 언어의 강력한 성능저수준 시스템 접근성을 유지하면서도 소프트웨어 개발의 생산성을 높일 방법을 고민했다.
  • 기존 C 언어는 구조적 프로그래밍에 최적화되어 있었지만, 코드 재사용성, 유지보수성이 부족했다.
  • 이에 따라 클래스(class), 상속(inheritance), 다형성(polymorphism) 등의 OOP 개념을 도입한 C with Classes라는 언어를 개발했다.
  • 이후, 1983년부터 ‘C++’라는 이름으로 발전하며 객체지향과 일반적인 프로그래밍 패러다임을 조화시킨 현대적인 언어로 자리 잡았다.

C와의 차이점 (객체지향 프로그래밍 지원)

구분  C C++
프로그래밍 패러다임 절차지향 (Procedural) 객체지향 + 절차지향 (OOP + Procedural)
데이터 캡슐화 없음 (구조체 사용) 클래스 및 접근 지정자 지원
동적 메모리 관리 malloc(), free() new, delete, 스마트 포인터
함수 오버로딩 지원하지 않음 함수 오버로딩 지원 (int add(int, int), double add(double, double))
네임스페이스 없음 namespace 지원
예외 처리 setjmp(), longjmp() try-catch를 통한 예외 처리 지원

C++는 객체지향 프로그래밍(OOP)을 지원하여 코드 재사용성, 확장성, 유지보수성이 뛰어난 반면, C는 보다 하드웨어에 가까운 저수준 프로그래밍에 적합하다.


실무에서의 활용

C++는 강력한 성능과 확장성을 바탕으로 다양한 산업에서 활용된다.

  1. 게임 개발
    • 게임 엔진(Unity, Unreal Engine) 개발 및 그래픽 프로그래밍에 사용
    • 실시간 렌더링을 위한 DirectX, OpenGL과 호환 가능
    • 유명 게임 엔진: Unreal Engine (C++ 기반)
  2. 임베디드 시스템
    • 마이크로컨트롤러, 자동차 소프트웨어, 로봇 공학 등에서 활용
    • C와의 호환성 덕분에 성능과 메모리 최적화가 가능
    • 예: 자동차 ECU(Engine Control Unit), IoT 디바이스, 의료 장비
  3. 금융 시스템
    • 초고속 트레이딩 시스템(HFT), 리스크 관리 시스템 등에 활용
    • 성능 최적화가 중요한 분야에서 C++의 속도가 강점으로 작용
    • 예: Bloomberg Terminal, JP Morgan 금융 소프트웨어
  4. 운영체제 및 소프트웨어 개발
    • Windows, macOS, Linux 커널 일부 C++로 개발
    • 데스크톱 애플리케이션, 데이터베이스 엔진(예: MySQL) 등에 사용됨
  5. 과학 기술 및 머신러닝
    • 물리학, AI, 머신러닝 라이브러리 (TensorFlow, OpenCV 등)
    • 대규모 데이터 분석 및 고성능 연산 처리에 사용

C++의 주요 특징

1. 객체지향 프로그래밍 (OOP: 캡슐화, 상속, 다형성)

C++는 객체지향 프로그래밍을 지원하여 유지보수성과 확장성을 높인다.

  • 캡슐화 (Encapsulation): 데이터와 함수를 하나의 클래스로 묶고, 외부 접근을 제한할 수 있음.
  • 상속 (Inheritance): 기존 클래스를 확장하여 코드 재사용성을 높임.
  • 다형성 (Polymorphism): 같은 인터페이스로 다양한 동작을 수행할 수 있도록 지원 (virtual 키워드 사용).
class Animal {
public:
    virtual void makeSound() { std::cout << "Some sound" << std::endl; }
};

class Dog : public Animal {
public:
    void makeSound() override { std::cout << "Woof!" << std::endl; }
};

2. 메모리 관리 (동적 메모리 할당, 스마트 포인터)

C++는 수동 및 자동 메모리 관리를 지원한다.

  • new / delete를 사용한 수동 메모리 할당
  • 스마트 포인터 (std::unique_ptr, std::shared_ptr)를 사용하여 메모리 누수 방지 (C++11~)
#include <memory>
std::unique_ptr<int> ptr = std::make_unique<int>(10);

3. 표준 라이브러리 (STL: vector, map, set 등)

C++는 STL(Standard Template Library)을 제공하여 데이터 구조 및 알고리즘을 쉽게 구현할 수 있다.

  • vector: 동적 배열
  • map: 키-값 저장소
  • set: 중복 없는 데이터 저장소
#include <vector>
std::vector<int> numbers = {1, 2, 3};
numbers.push_back(4);

4. 성능과 최적화 (컴파일 언어, 최적화 가능성)

  • 컴파일 언어: 실행 속도가 빠르고, 기계어로 변환됨 (Just-In-Time 컴파일이 아님)
  • 최적화 가능성: 직접 메모리 관리 및 저수준 프로그래밍 가능
  • 인라인 함수 지원: 실행 속도 최적화 가능
inline int add(int a, int b) { return a + b; }

5. C와의 호환성 (C 언어 코드 실행 가능)

C++는 C 코드를 실행할 수 있으며, 기존 C 라이브러리를 그대로 사용할 수 있다.

#include <stdio.h>
extern "C" void c_function() {
    printf("This is a C function\n");
}
  • C++는 C의 모든 기능을 포함하면서도 객체지향적 확장이 가능하다.
  • C에서 C++ 코드 호출 시 extern "C"을 사용하여 C와의 연결을 쉽게 할 수 있다.

6. 최신 기능 (템플릿, 람다, 모듈 등)

C++는 지속적으로 발전하며 최신 기능을 추가하고 있다.

  • 템플릿 (Generic Programming 지원)
  • 람다 함수 ([] 사용하여 간단한 익명 함수 정의, C++11 도입)
  • 모듈 시스템 (C++20 도입, 컴파일 속도 개선)
auto add = [](int a, int b) { return a + b; };
std::cout << add(2, 3);  // 출력: 5

정리

C++는 C의 성능과 메모리 제어 능력을 유지하면서도 객체지향적 설계를 가능하게 만든 언어다.

  • 다양한 산업에서 활용되며, 지속적인 발전을 통해 최신 프로그래밍 패러다임을 반영하고 있다.
  • 초보자도 이해하기 쉽게 STL을 활용할 수 있으며, 고급 개발자에게는 최적화 및 저수준 접근성을 제공한다.