C++
C++
강의 목차
- C++ 소개
- C++이란 무엇인가?
- C++의 특징과 장단점
- C++ 애플리케이션의 예
- C++ 개발 환경 설정
- Visual Studio 설치
- 프로젝트 생성 및 실행
- 코드 작성 및 실행
- C++ 기본 문법
- 주석 처리
- 변수 선언과 초기화
- 연산자
- 조건문과 반복문
- 함수
- 배열과 포인터
- C++ 객체 지향 프로그래밍
- 객체 지향 프로그래밍 개념
- 클래스와 객체
- 멤버 함수와 멤버 변수
- 생성자와 소멸자
- 상속과 다형성
- C++ 템플릿과 STL
- 템플릿 개념
- 함수 템플릿과 클래스 템플릿
- STL (Standard Template Library)
- 컨테이너와 반복자
- 알고리즘
- C++ 예외 처리
- 예외 처리 개념
- try-catch 블록
- throw 문
- 예외 클래스
- C++ 고급 주제
- 스마트 포인터
- C++11 이후 버전의 새로운 기능
- C++17 이후 버전의 새로운 기능
- C++20 이후 버전의 새로운 기능
- C++ 프로젝트 실습
- C++ 프로젝트 구성
- C++ 프로젝트 디자인
- C++ 프로젝트 개발
- C++ 프로젝트 빌드 및 실행
C++ 소개
C++이란 무엇인가?
C++는 범용 프로그래밍 언어로, 1979년에 Bjarne Stroustrup에 의해 개발되었습니다. C++는 C 언어를 기반으로 하며, 객체 지향 프로그래밍, 제네릭 프로그래밍 및 절차 지향 프로그래밍을 지원합니다. 이 언어는 시스템 프로그래밍, 게임 개발, 웹 서버, 데스크톱 애플리케이션, 임베디드 시스템 등 다양한 분야에서 널리 사용됩니다.
C++의 특징과 장단점
특징
- 객체 지향 프로그래밍: C++는 클래스와 객체를 사용하여 코드의 재사용성, 모듈성 및 확장성을 향상시키는 객체 지향 프로그래밍을 지원합니다.
- 제네릭 프로그래밍: C++ 템플릿을 사용하여 유연한 코드를 작성할 수 있으며, 실행 시간이 아닌 컴파일 시간에 타입이 결정되어 효율성이 높습니다.
- 절차 지향 프로그래밍: C++은 C 언어와 호환성을 유지하면서 절차 지향 프로그래밍을 지원하여, 다양한 프로그래밍 스타일에 적합합니다.
- 메모리 관리: C++는 메모리 할당 및 해제를 직접 제어할 수 있는 기능을 제공하여, 개발자가 성능과 메모리 최적화를 진행할 수 있습니다.
장점
- 성능: C++는 저수준 메모리 조작이 가능하며, 높은 수준의 최적화를 지원하여 뛰어난 성능을 제공합니다.
- 표현력: 객체 지향, 제네릭 및 절차 지향 프로그래밍을 모두 지원하여 다양한 문제를 풀 수 있는 강력한 표현력을 가집니다.
- 이식성: C++은 다양한 플랫폼에서 사용할 수 있으며, 표준 라이브러리와 호환성이 높습니다.
단점
- 학습 곡선: C++은 다양한 프로그래밍 패러다임과 복잡한 문법을 가지고 있어, 학습이 어려울 수 있습니다.
C++
버전
아래는 C++ 프로그래밍 언어 버전별 요약 표입니다.
버전 | 출시 연도 | 주요 변경 내용 |
---|---|---|
C++ 1.0 | 1985 | 초기 버전 |
C++ 2.0 | 1989 | 템플릿, 예외 처리, 멤버 함수, 추상 데이터 타입, const 키워드, 참조 타입 등 추가 |
C++ 3.0 | 1991 | 가상 함수 개선, 템플릿 개선, 정적 멤버 함수, 명시적 생성자, 클래스 선언 시 초기화 등 추가 |
C++ 4.0 | 1994 | 예외 처리 개선, 이름 공간, 순수 가상 함수, 임시 객체의 라이프타임 등 추가 |
C++ 4.1 | 1995 | 개선된 예외 처리, 다중 상속의 가상 상속 개선, 열거형 클래스, 디폴트 인자, R-value 레퍼런스 등 추가 |
C++ 4.2 | 1996 | 인라인 함수 개선, 암시적 타입 변환 개선, STL(Standard Template Library) 추가, 명시적 생성자, 생성자 위임 등 추가 |
C++ 5.0 | 1998 | C++ 표준화, 제네릭 프로그래밍, RTTI(Runtime Type Information), bool 타입 추가, 인라인 네임스페이스, 마이너 타입 등 추가 |
C++ 6.0 | 2000 | 복사 생성자, 애드미쉬 멤버 함수, 이름 공간 개선, C99 호환 등 추가 |
C++ 7.0 | 2003 | 복사 생성자, 애드미쉬 멤버 함수 개선, constexpr, 모든 타입의 멤버 변수 초기화, 명시적으로 삭제 및 기본 함수, auto 키워드 등 추가 |
C++ 11 | 2011 | 람다 함수, 동적 초기화, 스마트 포인터, 새로운 타입의 키워드 등 추가 |
C++ 14 | 2014 | 제네릭 람다 함수, 이니셜라이저 리스트 개선, auto 반환 값, 변수 템플릿, constexpr 함수 개선 등 추가 |
C++ 17 | 2017 | std::optional, std::any, std::variant, if constexpr, 인라인 변수 등 추가 |
C++ 23 | 예정 | 여러 가지 개선 예정, 예를 들면 3-way 비교 연산자, newtype 선언 등 |
isocpp.org
isocpp.org는 C++에 대한 공식 정보와 리소스를 제공하는 웹사이트입니다. 이 사이트는 ISO C++ 표준화 위원회가 운영하며, C++ 개발자 커뮤니티와 새로운 C++ 표준에 대한 정보를 공유하는 목적으로 만들어졌습니다.
isocpp.org에서 제공하는 주요 콘텐츠와 기능은 다음과 같습니다:
- C++ 표준: C++ 표준과 관련된 기술 문서, 신규 기능, 개선 사항 등의 정보를 확인할 수 있습니다.
- C++ 뉴스: C++ 관련 뉴스, 이벤트, 학술 논문, 동영상 등의 콘텐츠를 제공합니다.
- 커뮤니티: C++ 개발자 커뮤니티와 소통할 수 있는 포럼, 메일링 리스트, 블로그, 그룹 등을 소개합니다.
- 자료실: C++ 관련 도서, 학습 자료, 프레젠테이션, 동영상 등의 자료를 확인할 수 있습니다.
isocpp.org는 C++ 개발자들에게 중요한 표준화 정보와 개발 리소스를 제공하며, 전 세계 C++ 개발자들이 서로 소통하고 정보를 공유할 수 있는 플랫폼입니다. C++ 프로그래밍을 배우거나 개발에 참여하려는 개발자들에게 유용한 정보와 자료가 가득한 사이트입니다.
cppreference.com
cppreference.com은 C++ 프로그래밍 언어와 관련된 포괄적이고 자세한 문서를 제공하는 웹사이트입니다. 이 사이트는 개발자들이 C++ 표준 라이브러리 및 기본 문법에 대한 정보를 찾을 수 있는 빠르고 정확한 참조 자료를 제공하는 목적으로 만들어졌습니다.
cppreference.com에서 제공하는 주요 콘텐츠와 기능은 다음과 같습니다:
- C++ 라이브러리: C++ 표준 라이브러리의 모든 컴포넌트와 기능에 대한 상세한 문서를 제공합니다.
- C++ 언어: C++ 프로그래밍 언어의 문법, 키워드, 연산자 등에 대한 자세한 설명을 제공합니다.
- 예제: 각 기능과 개념에 대한 실용적인 사용 예제를 제공하여 개발자들이 이해를 높일 수 있게 돕습니다.
- 검색 기능: 웹사이트에는 강력한 검색 기능이 내장되어 있어, 사용자들이 원하는 정보를 쉽게 찾을 수 있습니다.
cppreference.com은 C++ 개발자들에게 유용한 참조 자료와 정보를 제공하는 웹사이트로, 프로그래밍 문제를 해결하거나 C++ 언어 및 라이브러리에 대한 지식을 확장할 때 참고할 수 있는 중요한 리소스입니다.
- C++ 개발 환경 설정
- Visual Studio 설치
- 프로젝트 생성 및 실행
- 코드 작성 및 실행
Compiler Explorer: C++ 학습에 도움되는 웹사이트
Compiler Explorer는 C++ 프로그래밍 언어를 학습하는데 매우 유용한 온라인 도구입니다. 이 웹사이트에서는 코드를 작성하고 컴파일한 결과를 실시간으로 확인할 수 있어서, 학습 과정을 더욱 원활하게 진행할 수 있습니다. Compiler Explorer는 C++뿐만 아니라 여러 프로그래밍 언어를 지원하고 있으며, 다양한 컴파일러와 라이브러리를 사용할 수 있습니다.
주요 기능:
- 실시간으로 소스 코드와 어셈블리 코드를 동시에 확인할 수 있습니다. 이를 통해 컴파일러가 작성한 코드를 어떻게 최적화하는지 이해할 수 있습니다.
- 다양한 컴파일러 버전과 옵션을 사용하여 코드를 컴파일할 수 있습니다. 이를 통해 특정 컴파일러에서 발생하는 문제를 진단하거나 최적화 옵션을 실험해볼 수 있습니다.
- 여러 코드 스니펫을 관리하고 비교할 수 있습니다. 이를 통해 다양한 구현 방법 간의 성능 차이를 비교 분석할 수 있습니다.
- 소스 코드에 주석을 달아 가독성을 높이고, 공유 가능한 URL을 생성하여 다른 사람과 손쉽게 코드를 공유할 수 있습니다.
Compiler Explorer를 사용하면 C++ 학습 과정에서 코드를 작성하고 컴파일하는 방법을 더욱 효과적으로 이해할 수 있습니다. 이 도구는 프로그래머가 코드 최적화 및 컴파일러 동작에 대한 깊은 이해를 얻는 데 도움이 됩니다. 즉, 이 웹사이트는 초보자뿐만 아니라 경험이 많은 개발자에게도 유용한 학습 도구가 될 수 있습니다.
- C++ 기본 문법
주석 처리
변수 선언과 초기화
연산자
관계연산자.cpp
다음은 두 개의 변수를 선언하고, 관계 연산자를 사용하여 그 관계를 판단한 결과를 출력하는 예제 코드입니다.
#include <iostream>
int main() {
int first_num = 3, second_num = 5;
bool greater = first_num > second_num;
bool smaller = first_num < second_num;
std::cout << "first_num = " << first_num << " second_num = " << second_num << " "
<< "first_num > second_num = " << greater << " "
<< "first_num < second_num = " << smaller << std::endl;
return 0;
}
위 코드에서는 먼저 first_num과 second_num 변수를 선언하고, 각각 3과 5의 값을 대입합니다. 그리고 관계 연산자를 사용하여 두 변수 간의 관계를 판단한 후, 그 결과를 Boolean 자료형의 greater와 smaller 변수에 대입합니다. 마지막으로, std::cout 객체를 사용하여 변수들의 값을 출력합니다.
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
first_num = 3 second_num = 5 first_num > second_num = 0 first_num < second_num = 1
결과에서는 first_num 변수의 값이 second_num 변수의 값보다 작으므로, first_num < second_num은 True가 됩니다. 반면, first_num > second_num은 False가 됩니다. 따라서 greater 변수의 값은 False(0), smaller 변수의 값은 True(1)가 됩니다.
조건문과 반복문
조건문과 반복문은 프로그래밍에서 매우 중요한 역할을 하는데, 특정 조건에 따라 코드의 실행 흐름을 제어하거나 반복적인 작업을 처리하는 데 사용됩니다. 이 강의에서는 if
문, switch
문, while
문, do-while
문, for
문 등의 기본적인 조건문과 반복문에 대해 배워보도록 하겠습니다.
- if문: if문은 조건에 따라 코드를 실행하거나 건너뛰는 데 사용됩니다. 주어진 조건이 참인 경우 해당 코드 블록을 실행하고, 거짓인 경우 실행하지 않습니다.
int num = 10;
if (num > 5) {
cout << "num은 5보다 큽니다." << endl;
}
- if-else문: if-else문은 주어진 조건이 참인지 거짓인지에 따라 두 개의 코드 블록 중 하나를 실행합니다.
int num = 3;
if (num % 2 == 0) {
cout << "num은 짝수입니다." << endl;
} else {
cout << "num은 홀수입니다." << endl;
}
- if-else if문: if-else if문은 여러 조건 중 하나가 참인 경우에 해당 코드 블록을 실행합니다.
int num = 75;
if (num >= 90) {
cout << "A" << endl;
} else if (num >= 80) {
cout << "B" << endl;
} else if (num >= 70) {
cout << "C" << endl;
} else {
cout << "D" << endl;
}
- switch문: switch문은 변수의 값에 따라 특정 코드 블록을 실행합니다.
int day = 3;
switch (day) {
case 1:
cout << "Monday" << endl;
break;
case 2:
cout << "Tuesday" << endl;
break;
case 3:
cout << "Wednesday" << endl;
break;
default:
cout << "Invalid day" << endl;
}
- while문: while문은 주어진 조건이 참인 동안 코드 블록을 반복적으로 실행합니다.
int i = 0;
while (i < 5) {
cout << "i: " << i << endl;
i++;
}
- do-while문: do-while문은 코드 블록을 최소한 한 번은 실행한 후, 주어진 조건이 참인 동안 반복적으로 실행합니다.
int i = 0;
do {
cout << "i: " << i << endl;
i++;
} while (i < 5);
- for문: for문은 초기화, 조건, 증감식을 사용하여 코드 블록을 반복적으로 실행합니다. 이는 일정한 횟수만큼 반복을 실행할 때 유용합니다.
for (int i = 0; i < 5; i++) {
cout << "i: " << i << endl;
}
- 범위 기반 for문 (C++11 이상): 범위 기반 for문은 컨테이너의 모든 요소를 순회할 때 사용됩니다. 이는 간결하게 코드를 작성할 수 있게 해줍니다.
vector<int> nums = {1, 2, 3, 4, 5};
for (int num : nums) {
cout << "num: " << num << endl;
}
이상으로 C++ 기본 문법 중 '조건문과 반복문'에 대한 강의를 마치겠습니다. 이러한 조건문과 반복문은 프로그램의 다양한 상황에 대응하고 반복적인 작업을 수행할 때 필수적인 도구입니다. 여러분이 이 강의를 통해 각각의 조건문과 반복문을 어떻게 사용하는지 이해하고, 실제 프로그래밍 과정에서 활용할 수 있기를 바랍니다.
C++ 기본 문법: 함수
함수는 코드를 모듈화하고 재사용성을 높이는 데 도움이 되는 프로그래밍 기법입니다. 함수는 입력을 받아 처리하고, 그 결과를 반환합니다. 이번 아티클에서는 C++에서 함수를 선언하고 정의하는 방법을 배워보겠습니다.
함수 선언
함수를 사용하기 전에, 함수의 원형(prototype)을 선언해야 합니다. 함수 원형은 반환 타입, 함수 이름, 매개변수를 포함합니다.
int add(int a, int b);
함수 정의
함수 정의는 함수 원형과 동일한 형태를 가지지만, 추가로 중괄호 {}
안에 구현 코드를 포함합니다.
int add(int a, int b) {
return a + b;
}
함수 호출
함수를 호출하려면, 함수 이름과 함께 인수(argument)를 전달해야 합니다. 인수는 함수에 전달되는 값으로, 함수의 매개변수와 일치해야 합니다.
int result = add(3, 5);
cout << "3 + 5 = " << result << endl;
기본값 매개변수 (C++11 이상)
함수의 매개변수에 기본값을 지정할 수 있습니다. 이렇게 하면, 함수를 호출할 때 해당 매개변수에 값을 전달하지 않으면 기본값이 사용됩니다.
int add(int a, int b = 0) {
return a + b;
}
이 함수는 다음과 같이 호출할 수 있습니다.
int result = add(3); // 3 + 0
함수를 작성하고 사용하는 방법을 이해하면 코드를 효율적으로 작성하고 유지 관리하기 쉬워집니다. 함수를 활용하여 코드의 중복을 줄이고, 가독성을 높여보세요.
C++ 기본 문법: 배열
배열은 동일한 타입의 여러 개의 데이터를 연속적인 메모리 공간에 저장하는 구조입니다. 배열을 사용하면 여러 개의 변수를 따로 선언하지 않고, 하나의 변수로 관리할 수 있습니다. 이번 아티클에서는 C++에서 배열을 선언하고 사용하는 방법에 대해 알아보겠습니다.
배열 선언
배열을 선언할 때는, 배열의 타입, 이름, 크기를 지정해야 합니다. 배열의 크기는 컴파일 시 상수(constant)로 결정되어야 합니다.
int numbers[5];
배열 초기화
배열을 선언하면서 동시에 초기화할 수 있습니다. 이 경우, 배열의 크기를 생략하고 초기화하려는 값들을 중괄호 {}
안에 나열합니다.
int numbers[] = {1, 2, 3, 4, 5};
배열 요소에 접근하기
배열의 각 요소에 접근할 때는, 배열의 이름과 함께 인덱스를 사용합니다. 인덱스는 0부터 시작하며, 배열의 크기보다 작아야 합니다.
numbers[0] = 10; // 배열의 첫 번째 요소에 10을 할당
int value = numbers[1]; // 배열의 두 번째 요소를 value 변수에 할당
배열의 크기 구하기
배열의 크기를 구하려면, sizeof
연산자를 사용하여 배열의 전체 크기를 구한 뒤, 배열의 타입 크기로 나누면 됩니다.
int arraySize = sizeof(numbers) / sizeof(numbers[0]);
배열을 함수에 전달하기
배열을 함수에 전달할 때는, 배열의 이름과 크기를 함께 전달해야 합니다. 배열의 이름은 배열의 첫 번째 요소의 주소를 나타내므로, 포인터로 전달됩니다.
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
cout << arr[i] << " ";
}
cout << endl;
}
배열을 사용하면, 동일한 타입의 여러 데이터를 효율적으로 관리할 수 있습니다. 배열의 초기화, 접근, 크기 구하기 등의 기본 개념을 숙지하고, 함수와 함께 사용하는 방법을 이해하면 배열을 적절하게 활용할 수 있습니다.
- 배열과 포인터
- C++ 객체 지향 프로그래밍
- 객체 지향 프로그래밍 개념
- 클래스와 객체
- 멤버 함수와 멤버 변수
- 생성자와 소멸자
- 상속과 다형성
- C++ 템플릿과 STL
- 템플릿 개념
- 함수 템플릿과 클래스 템플릿
- STL (Standard Template Library)
- 컨테이너와 반복자
- 알고리즘
- C++ 예외 처리
- 예외 처리 개념
- try-catch 블록
- throw 문
- 예외 클래스
- C++ 고급 주제
- 스마트 포인터
- C++11 이후 버전의 새로운 기능
- C++17 이후 버전의 새로운 기능
- C++20 이후 버전의 새로운 기능
- C++ 프로젝트 실습
- C++ 프로젝트 구성
- C++ 프로젝트 디자인
- C++ 프로젝트 개발
- C++ 프로젝트 빌드 및 실행