본 비디오 강좌는 포큐아카데미에서 진행하는C++은 C와 더불어 가장 널리 사용되는 언매니지드 언어일 뿐만 아니라 2018년 7월 기준 전세계에서 3번째로 많이 쓰이는 언어입니다. (출처: TIOBE) 그리고 언매니지드 언어라는 특수성 때문에 한동안 사용률이 떨어지지 않을 전망입니다.
현존하는 프로그래밍 언어를 크게 둘로 나누면 매니지드(Managed) 언어와 언매니지드(Unmanaged) 언어가 있습니다. 이 둘의 차이는 프로그래머가 컴퓨터 하드웨어를 직접 제어할 수 있는지 여부입니다. (예: 프로그래머가 직접 메모리를 관리하는가?)
프로그램의 성능보다 제품을 빨리 개발하는 것이 중요한 분야에서는 C#, Java와 같은 매니지드 언어를 널리 사용합니다. 하지만 운영체제, 비디오 게임, 가상현실, 주식거래소, 머신 러닝 코어, 블록체인 등 성능이 더 중요한 분야에서는 여전히 언매니지드 언어를 사용할 수밖에 없습니다. 따라서 본 강좌는 실제 업계에서 쓰이는 C++ 프로그래밍 기법에 중점을 맞춰 진행합니다.
본 비디오 강좌는 포큐아카데미에서 진행하는C++은 C와 더불어 가장 널리 사용되는 언매니지드 언어일 뿐만 아니라 2018년 7월 기준 전세계에서 3번째로 많이 쓰이는 언어입니다. (출처: TIOBE) 그리고 언매니지드 언어라는 특수성 때문에 한동안 사용률이 떨어지지 않을 전망입니다.
현존하는 프로그래밍 언어를 크게 둘로 나누면 매니지드(Managed) 언어와 언매니지드(Unmanaged) 언어가 있습니다. 이 둘의 차이는 프로그래머가 컴퓨터 하드웨어를 직접 제어할 수 있는지 여부입니다. (예: 프로그래머가 직접 메모리를 관리하는가?)
프로그램의 성능보다 제품을 빨리 개발하는 것이 중요한 분야에서는 C#, Java와 같은 매니지드 언어를 널리 사용합니다. 하지만 운영체제, 비디오 게임, 가상현실, 주식거래소, 머신 러닝 코어, 블록체인 등 성능이 더 중요한 분야에서는 여전히 언매니지드 언어를 사용할 수밖에 없습니다. 따라서 본 강좌는 실제 업계에서 쓰이는 C++ 프로그래밍 기법에 중점을 맞춰 진행합니다.
언매니지드 언어의 장점은 여기서 그치지 않습니다. 프로그래머의 지속적인 성장에 반드시 필요한 지식 중 하나가 컴퓨터 하드웨어에 대한 이해입니다. 탑 레이서라면 자동차의 동작 원리를 잘 알아야 하듯이 탑 프로그래머는 하드웨어의 동작 원리를 잘 이해해야 합니다. 이걸 돕는 언어가 바로 언매니지드 언어입니다.
'COMP2500: Java 개체지향 프로그래밍 및 설계'와 마찬가지로 이 강좌에서도 개체지향 프로그래밍(OOP)에 대해 배웁니다. 하지만 이 코스를 성공적으로 마무리한 분들은 하드웨어 수준에서 개체지향 프로그래밍이 어떻게 작동하는지까지 자세히 이해하실 수 있을 겁니다.
본 강좌는 다음과 같이 크게 세 부분으로 나뉘며, 강의 진행도 이 순서를 따릅니다.
코어 C++: 참조, 클래스, 상속 등 C++의 기본이 되는 내용. C++98 표준 ( ~ 5주 차)
모던 C++: STL 등 C++03 표준에서 추가된 기능 중 업계에서 쓰이는 내용들 (6주 차 ~ 9주 차)
C++1x: C++11/14/17 표준에서 추가된 최신 기능 중 업계에서 쓰이는 내용들 (10주 차 ~ )
위와 같이 강의를 세 부분으로 나눈 이유는 회사에 따라 사용하는 C++ 표준이 다르고, 성능 상의 이유로 일부러 과거의 표준을 여전히 사용하는 곳도 많기 때문입니다. 따라서 최신의 C++ 표준만을 사용하는 프로그래머는 업계에서 원하는 프로그래머가 아닌 경우가 많습니다.
목차
Hello World 출력하기
“Hello World”
std::cout, std::endl
네임스페이스(namespace)
namespace
namespace 예제
using 지시문
using 예제
목차
<< 연산자(operator)
<< 연산자
목표
출력형식 지정(Output Formatting)
16진수 출력 - printf()
16진수 출력 – 조정자(Manipulator)
조정자 (1/5)
조정자 (2/5)
조정자 (3/5)
조정자 (4/5)
#include <iomanip> 안에 있는 조정자
목표
출력형식 지정(Output Formatting)
cout 멤버 메서드 (1/2)
cout 멤버 메서드 (2/2)
setf(), unsetf()
목차
입력 스트림(Input Stream)
키보드에서 읽기
정수형 읽기
부동 소수점형 읽기
왜 scanf()는 위험한가?
그렇다면 이제 cin을 살펴보자...
C에서는 이렇게 했었죠?
C++에서 쓸 수 있는 더 안전한 방법 - setw()
이 변수들에 어떤 값들이 들어 있을까?
cin도 마찬가지
목차
스트림 상태(Stream States)
스트림 상태
예제
목차
입력 버리기(Discarding Input)
입력 버리기 (1/2)
입력 버리기 (2/2)
목차
입력 버리기(Discarding Input)
get()
getline()
목차
초기 C++의 새로운 기능들
C++의 새로운 기능들
Bool 데이터형
bool 데이터형
목차
참조(Reference)
참조
값에 의한 호출 (C/Java/C#)
참조에 의한 호출 (C)
Java는 어떨까?
값에 의한 호출은 모든 타입에 똑같이 동작 (C/C++)
참조에 의한 호출도 마찬가지
목차
참조(Reference)
Java는 어떨까?
왜...
참조
함수 매개변수로서의 참조
목차
참조(Reference)
컴퓨터는 참조가 뭔지 알까?
목차
코딩표준 쪼오금~
코딩표준에 대해 말해 보자
시도 1
시도 2
여전히 완벽하지 않음
시도 3
C#은 이걸 더 잘 고쳤음
목차
문자열(string)
지난번에 본 코드...
std::string 클래스
대입(Assignment)과 덧붙이기(Appending)
문자열 합치기(Concatenation)
비교(Relational)연산자
size(), length(), c_str()
string 속의 한 문자에 접근하기
한 줄 읽기
목차
문자열(string)
<sstream>
C 헤더를 써도 될까요?
그래서 string이 더 낫다는 거죠?
1단계
2단계
3단계
4단계
5단계
6단계
7단계
어우~ 뭐 이리 많아?
c_str() 기억나죠?
목차
파일 입출력(I/O)
파일 입출력 <fstream>
파일 열기
open()
파일 열기 모드의 예
파일 닫기
스트림 상태 확인하기
close(), is_open()
목차
파일 입출력(I/O)
파일에서 문자 하나씩 읽기
get(), getline(), >>
파일에서 한 줄씩 읽기
어떤 결과가 나올까?
빈 파일 읽기
파일에서 한 단어씩 읽기
사례 1 – 문자열 하나와 숫자 하나
사례 2 – 숫자들만 있는 경우
목차
파일 입출력(I/O)
사례 3 – 숫자들과 뉴라인(newline)
사례 4 – 잘못된 입력과 숫자들
목차
파일 입출력(I/O)
시도 1 – 제대로 읽은 것만 출력
시도 2 – 다음 구분 문자까지 건너뛰기
시도 2의 문제
시도 3? 어, 이것도 안돼~
숫자만 읽기 (이 코드는 된다!)
목차
파일 입출력(I/O)
문제가 보이나요?
clear() 전에 잘못된 입력을 무시하면…
목차
파일 입출력(I/O)
EOF 처리는 까다롭다
베스트 프랙티스(Best Practice)
훌륭한 테스트 케이스
목차
파일 입출력(I/O)
파일에 쓰기
put(), <<
바이너리 파일 읽기
(char*)&record는 어떻게 작동할까?
ifstream::read()
바이너리 파일에 쓰기
ofstream::write()
파일 안에서의 탐색
탐색(seek) 유형
파일 쓰기 위치 읽기 및 변경
기타 정보
목차
OOP: Java vs C++
OOP가 뭔지는 다 알고 있죠?
OOP가 뭘까?
목차
하지만 누군가 OOP를 복잡하게 만들었다
걔네들 방식
직관적인 OOP로 돌아가서
목차
클래스(Class)
Vector 클래스를 만들어 보자
멤버 변수의 접근권한
접근 제어자(Access Modifier)
보통 제어자 별로 C++ 멤버들을 그룹 지음
목차
클래스(Class)
개체 생성
Vector a;를 살펴보자
Vector* b = new Vector();를 살펴보자
스택
힙
스택을 다시 살펴보자
힙을 다시 살펴보자
목차
클래스(Class)
개체 배열(Array)
개체 배열 – 메모리를 들여다보자
개체 소멸
new를 사용한 뒤에는 꼭 delete를!
목차
클래스(Class)
X와 Y의 값은?
기본 값
Java가 멤버 변수를 0으로 초기화하는 방법?
목차
클래스(Class)
생성자(Constructor)
초기화 리스트(Initializer List)
더 나은 Vector 클래스를 만들어 보자
목차
클래스(Class)
기본 생성자
컴파일러가 하는 일?
둘 중 컴파일 안 되는 코드는?
목차
클래스(Class)
둘 중 컴파일 안 되는 코드는?
생성자 오버로딩(Overloading)
생성자 오버로딩
소멸자(Destructor)
클래스 안에서의 동적 메모리 할당
다시 말하지만 메모리 해제를 꼭 기억하자!
클래스 안에서의 동적 메모리 할당
목차
클래스(Class)
Vector 클래스의 멤버 함수
const란?
Const 멤버 함수
목차
구조체(Struct) vs 클래스(Class)
구조체에 관한 코딩표준
목차
복사(Copy) 생성자
복사 생성자
암시적(implicit) 복사 생성자
예: ClassRecord 클래스
포인터는 얕은 복사
사용자가 만든 복사 생성자
포인터의 깊은 복사
목차
함수 오버로딩(overloading)
메서드 오버로딩
함수 오버로딩
목차
함수 오버로딩(overloading)
함수 오버로딩
함수 오버로딩 매칭하기
목차
함수 오버로딩(overloading)
함수 오버로딩 매칭하기
함수 매칭 순서
더 자세히 알고 싶다면…
목차
연산자(operator) 오버로딩
연산자
연산자의 종류 – 단항(unary) 연산자
연산자의 종류 – 이항(binary) 연산자
연산자의 종류 – 기타
연산자 오버로딩
멤버 함수를 이용한 연산자 오버로딩
Vector의 operator+() 연산자를 오버로딩해보자
멤버 연산자를 작성하는 법
멤버 아닌 함수를 이용한 연산자 오버로딩
목차
연산자(operator) 오버로딩
Vector의 operator<<() 연산자를 만들어 보자
friend 키워드
friend 클래스
friend 함수
연산자 오버로딩에 필요한 friend 함수
멤버 아닌 연산자 오버로딩을 작성하는 법
Vector를 출력하는 << 연산자
잠… 잠깐만요!
operator<<() 를 고쳐보자
완전히 수정한 operator<<()
목차
연산자(operator) 오버로딩
연산자 오버로딩과 const
연산자 오버로딩에 const를 사용하지 않는 경우
&를 사용하면 무슨 일이 일어나나?
제한사항
목차
연산자(operator) 오버로딩
연산자 오버로딩을 남용하지 말 것
그래서 어쩌라고요?
대입(assignment) 연산자
암시적 operator=
목차
암시적 함수들을 제거하는 법
클래스에 딸려오는 기본 함수들
클래스에 딸려오는 기본 함수들
기본 생성자를 “지우는” 법
기본 생성자를 “지우는” 법
암시적 복사 생성자를 “지우는” 법
암시적 소멸자를 “지우는” 법
암시적 operator=를 “지우는” 법
OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.
Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.
Find this site helpful? Tell a friend about us.
We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.
Your purchases help us maintain our catalog and keep our servers humming without ads.
Thank you for supporting OpenCourser.