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++는 강력한 성능과 확장성을 바탕으로 다양한 산업에서 활용된다.
- 게임 개발
- 게임 엔진(Unity, Unreal Engine) 개발 및 그래픽 프로그래밍에 사용
- 실시간 렌더링을 위한 DirectX, OpenGL과 호환 가능
- 유명 게임 엔진: Unreal Engine (C++ 기반)
- 임베디드 시스템
- 마이크로컨트롤러, 자동차 소프트웨어, 로봇 공학 등에서 활용
- C와의 호환성 덕분에 성능과 메모리 최적화가 가능
- 예: 자동차 ECU(Engine Control Unit), IoT 디바이스, 의료 장비
- 금융 시스템
- 초고속 트레이딩 시스템(HFT), 리스크 관리 시스템 등에 활용
- 성능 최적화가 중요한 분야에서 C++의 속도가 강점으로 작용
- 예: Bloomberg Terminal, JP Morgan 금융 소프트웨어
- 운영체제 및 소프트웨어 개발
- Windows, macOS, Linux 커널 일부 C++로 개발
- 데스크톱 애플리케이션, 데이터베이스 엔진(예: MySQL) 등에 사용됨
- 과학 기술 및 머신러닝
- 물리학, 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을 활용할 수 있으며, 고급 개발자에게는 최적화 및 저수준 접근성을 제공한다.
'프로그래밍 언어 > C++' 카테고리의 다른 글
C++ 초급 - 1. C++ 소개 및 개발 환경 설정 (3 - 개발 환경 설정) (0) | 2025.02.12 |
---|---|
C++ 초급 - 1. C++ 소개 및 개발 환경 설정 (2 - C++ 표준 버전 개요) (0) | 2025.02.12 |
데이터 타입 (C++) (0) | 2025.01.04 |
std::is_empty - empty class (C++11~) (0) | 2024.08.04 |
Namespaces (using - namespace의 특정 맴버) (0) | 2024.08.03 |