C++ 언매니지드 프로그래밍
4.6 (490 ratings)
Course Ratings are calculated from individual students’ ratings and a variety of other signals, like age of rating and reliability, to ensure that they reflect course quality fairly and accurately.
872 students enrolled

C++ 언매니지드 프로그래밍

실제 업계에서 쓰이는 C++ 프로그래밍의 기본기
4.6 (490 ratings)
Course Ratings are calculated from individual students’ ratings and a variety of other signals, like age of rating and reliability, to ensure that they reflect course quality fairly and accurately.
872 students enrolled
Created by Pope Kim
Last updated 1/2020
Korean
Price: $199.99
30-Day Money-Back Guarantee
This course includes
  • 25.5 hours on-demand video
  • Full lifetime access
  • Access on mobile and TV
  • Certificate of Completion
Training 5 or more people?

Get your team access to 4,000+ top Udemy courses anytime, anywhere.

Try Udemy for Business
What you'll learn
  • C++ 언어 사용법
  • 올바른 프로그래밍 습관
  • C++ 언어가 내부적으로 어떻게 도는지에 대한 이해
Course content
Expand all 235 lectures 25:28:53
+ 출력(Output)
8 lectures 40:52

목차

Hello World 출력하기

  • “Hello World”

  • std::cout, std::endl

네임스페이스(namespace)

  • namespace

  • namespace 예제

  • using 지시문

  • using 예제

Hello World 출력하기, 네임스페이스(namespace)
10:31
코드보기: using / namespace
04:07
복습 퀴즈
1 question

목차

<< 연산자(operator)

  • << 연산자

<< 연산자(operator)
02:16
코드보기: 모든걸 출력해 보자!
02:07
복습 퀴즈
1 question

목표

출력형식 지정(Output Formatting)

  • 16진수 출력 - printf()

  • 16진수 출력 – 조정자(Manipulator)

  • 조정자 (1/5)

  • 조정자 (2/5)

  • 조정자 (3/5)

  • 조정자 (4/5)

  • #include <iomanip> 안에 있는 조정자

출력형식 지정(Output Formatting) 1
13:18
코드보기: 조정자
04:52
복습 퀴즈
2 questions

목표

출력형식 지정(Output Formatting)

  • cout 멤버 메서드 (1/2)

  • cout 멤버 메서드 (2/2)

  • setf(), unsetf()

출력형식 지정(Output Formatting) 2
02:10
정리
01:31
+ 입력(Input)
6 lectures 33:09

목차

입력 스트림(Input Stream)

  • 키보드에서 읽기 

  • 정수형 읽기

  • 부동 소수점형 읽기

  • 왜 scanf()는 위험한가?

  • 그렇다면 이제 cin을 살펴보자...

  • C에서는 이렇게 했었죠?

  • C++에서 쓸 수 있는 더 안전한 방법 - setw()

  • 이 변수들에 어떤 값들이 들어 있을까?

  • cin도 마찬가지

입력 스트림(Input Stream)
10:05
복습 퀴즈
1 question

목차

스트림 상태(Stream States)

  • 스트림 상태

  • 예제

스트림 상태(Stream States)
07:09

목차

입력 버리기(Discarding Input)

  • 입력 버리기 (1/2)

  • 입력 버리기 (2/2)

입력 버리기(Discarding Input): clear(), ignore()
04:47
복습 퀴즈
1 question

목차

입력 버리기(Discarding Input)

  • get()

  • getline()

입력 버리기: get(), getline()
02:23
코드보기: 정수의 합 구하기, getline()
06:50
복습 퀴즈
1 question
정리
01:55
+ 일부 새로운 C++ 기능
7 lectures 54:28

목차

  • 초기 C++의 새로운 기능들 

  • C++의 새로운 기능들

Bool 데이터형

  • bool 데이터형

Bool 데이터형
08:47

목차

참조(Reference)

  • 참조

  • 값에 의한 호출 (C/Java/C#)

  • 참조에 의한 호출 (C)

  • Java는 어떨까?

  • 값에 의한 호출은 모든 타입에 똑같이 동작 (C/C++)

  • 참조에 의한 호출도 마찬가지

참조(Reference) 1
13:53
복습 퀴즈
2 questions

목차

참조(Reference)

  • Java는 어떨까?

  • 왜...

  • 참조

  • 함수 매개변수로서의 참조

참조 2
12:26

목차

참조(Reference)

  • 컴퓨터는 참조가 뭔지 알까?

Preview 04:25
코드보기: 참조
02:54
복습 퀴즈
1 question

목차

코딩표준 쪼오금~

  • 코딩표준에 대해 말해 보자

  • 시도 1

  • 시도 2

  • 여전히 완벽하지 않음

  • 시도 3

  • C#은 이걸 더 잘 고쳤음

코딩표준 쪼오금~
10:00
정리
02:03
+ 문자열(string)
3 lectures 32:00

목차

문자열(string)

  • 지난번에 본 코드...

  • std::string 클래스

  • 대입(Assignment)과 덧붙이기(Appending)

  • 문자열 합치기(Concatenation)

  • 비교(Relational)연산자

  • size(), length(), c_str()

  • string 속의 한 문자에 접근하기

  • 한 줄 읽기

std::string 클래스
14:36
복습 퀴즈
1 question

목차

문자열(string)

  • <sstream>

  • C 헤더를 써도 될까요?

  • 그래서 string이 더 낫다는 거죠?

  • 1단계

  • 2단계

  • 3단계

  • 4단계

  • 5단계

  • 6단계

  • 7단계

  • 어우~ 뭐 이리 많아?

  • c_str() 기억나죠?

std::string이 좋은가요?
14:46
코드보기: 문자열 뒤집어 덧붙이기
02:38
복습 퀴즈
1 question
+ 파일 입출력(I/O)
9 lectures 01:03:09

목차

파일 입출력(I/O)

  • 파일 입출력 <fstream>

  • 파일 열기

  • open()

  • 파일 열기 모드의 예

  • 파일 닫기

  • 스트림 상태 확인하기

  • close(), is_open()

파일 열기와 닫기
09:47

목차

파일 입출력(I/O)

  • 파일에서 문자 하나씩 읽기

  • get(), getline(), >>

  • 파일에서 한 줄씩 읽기

  • 어떤 결과가 나올까?

  • 빈 파일 읽기

  • 파일에서 한 단어씩 읽기

  • 사례 1 – 문자열 하나와 숫자 하나

  • 사례 2 – 숫자들만 있는 경우

한 문자, 한 줄, 한 단어 읽기
10:35

목차

파일 입출력(I/O)

  • 사례 3 – 숫자들과 뉴라인(newline)

  • 사례 4 – 잘못된 입력과 숫자들

잘못된 입력이 있는 경우
04:59

목차

파일 입출력(I/O)

  • 시도 1 – 제대로 읽은 것만 출력

  • 시도 2 – 다음 구분 문자까지 건너뛰기

  • 시도 2의 문제

  • 시도 3? 어, 이것도 안돼~

  • 숫자만 읽기 (이 코드는 된다!)

잘못된 입력을 어떻게 처리하지?
06:28

목차

파일 입출력(I/O)

  • 문제가 보이나요?

  • clear() 전에 잘못된 입력을 무시하면…

또 다른 문제...
02:59

목차

파일 입출력(I/O)

  • EOF 처리는 까다롭다

  • 베스트 프랙티스(Best Practice)

  • 훌륭한 테스트 케이스

파일 읽기의 베스트 프랙티스(Best Practice)
03:42
복습 퀴즈
1 question

목차

파일 입출력(I/O)

  • 파일에 쓰기

  • put(), <<

  • 바이너리 파일 읽기

  • (char*)&record는 어떻게 작동할까?

  • ifstream::read()

  • 바이너리 파일에 쓰기

  • ofstream::write()

  • 파일 안에서의 탐색

  • 탐색(seek) 유형

  • 파일 쓰기 위치 읽기 및 변경

  • 기타 정보

파일 쓰기, 바이너리 파일 읽기/쓰기, 파일 안에서의 탐색(seek)
13:48
코드보기: 파일 입출력
08:12
복습 퀴즈
1 question
정리
02:39
+ 개체지향 프로그래밍 (Object-Oriented Programming) 1
15 lectures 01:48:12

목차

  • OOP: Java vs C++

  • OOP가 뭔지는 다 알고 있죠?

  • OOP가 뭘까?

OOP란?
15:19

목차

  • 하지만 누군가 OOP를 복잡하게 만들었다

  • 걔네들 방식

  • 직관적인 OOP로 돌아가서

OOP가 복잡해졌다!
09:07

목차

클래스(Class)

  • Vector 클래스를 만들어 보자

  • 멤버 변수의 접근권한

  • 접근 제어자(Access Modifier)

  • 보통 제어자 별로 C++ 멤버들을 그룹 지음

접근 제어자(Access Modifier)
06:00
복습 퀴즈
1 question

목차

클래스(Class)

  • 개체 생성

  • Vector a;를 살펴보자

  • Vector* b = new Vector();를 살펴보자

  • 스택

  • 스택을 다시 살펴보자

  • 힙을 다시 살펴보자

Preview 17:11

목차

클래스(Class)

  • 개체 배열(Array)

  • 개체 배열 – 메모리를 들여다보자

  • 개체 소멸

  • new를 사용한 뒤에는 꼭 delete를!

개체 배열 생성, 개체 소멸
08:39

목차

클래스(Class)

  • X와 Y의 값은?

  • 기본 값

  • Java가 멤버 변수를 0으로 초기화하는 방법?

멤버 변수 초기화
05:59
복습 퀴즈
1 question
생각할 거리: new/delete와 malloc()/free()의 차이
01:07

목차

클래스(Class)

  • 생성자(Constructor)

  • 초기화 리스트(Initializer List)

  • 더 나은 Vector 클래스를 만들어 보자

생성자(Constructor), 초기화 리스트(Initializer List)
08:34
코드보기: Vector 클래스의 헤더 및 cpp 파일
03:06

목차

클래스(Class)

  • 기본 생성자

  • 컴파일러가 하는 일?

  • 둘 중 컴파일 안 되는 코드는?

기본 생성자, 컴파일러가 하는 일
03:01
영상 퀴즈: 둘 중 컴파일 안 되는 코드는?
1 question
둘 중 컴파일 안 되는 코드는?
01:27
영상 퀴즈: 둘 중 컴파일 안 되는 코드는?
1 question

목차

클래스(Class)

  • 둘 중 컴파일 안 되는 코드는?

  • 생성자 오버로딩(Overloading)

  • 생성자 오버로딩

  • 소멸자(Destructor)

  • 클래스 안에서의 동적 메모리 할당

  • 다시 말하지만 메모리 해제를 꼭 기억하자!

  • 클래스 안에서의 동적 메모리 할당

생성자 오버로딩(Overloading), 소멸자(Destructor)
09:40
복습 퀴즈
1 question

목차

클래스(Class)

  • Vector 클래스의 멤버 함수

  • const란?

  • Const 멤버 함수

const 멤버 함수
06:02
코드보기: Vector 클래스
02:14

목차

  • 구조체(Struct) vs 클래스(Class)

  • 구조체에 관한 코딩표준

구조체(Struct) vs 클래스(Class)
10:46
+ 개체지향 프로그래밍 2
13 lectures 01:30:17

목차

복사(Copy) 생성자

  • 복사 생성자

  • 암시적(implicit) 복사 생성자

  • 예: ClassRecord 클래스

  • 포인터는 얕은 복사

  • 사용자가 만든 복사 생성자

  • 포인터의 깊은 복사

복사(Copy) 생성자
15:26
코드보기: char 배열과 복사 생성자
02:23

목차

함수 오버로딩(overloading)

  • 메서드 오버로딩

  • 함수 오버로딩

함수 오버로딩(overloading)
02:07
영상 퀴즈
1 question

목차

함수 오버로딩(overloading)

  • 함수 오버로딩

  • 함수 오버로딩 매칭하기

함수 오버로딩 매칭하기
02:58
영상 퀴즈
4 questions

목차

함수 오버로딩(overloading)

  • 함수 오버로딩 매칭하기

  • 함수 매칭 순서

  • 더 자세히 알고 싶다면…

함수 매칭 순서
04:12
코드보기: 함수 오버로딩과 Vector 클래스
04:13

목차

연산자(operator) 오버로딩

  • 연산자

  • 연산자의 종류 – 단항(unary) 연산자

  • 연산자의 종류 – 이항(binary) 연산자

  • 연산자의 종류 – 기타

  • 연산자 오버로딩

  • 멤버 함수를 이용한 연산자 오버로딩

  • Vector의 operator+() 연산자를 오버로딩해보자

  • 멤버 연산자를 작성하는 법

  • 멤버 아닌 함수를 이용한 연산자 오버로딩

연산자(operator) 오버로딩
13:18

목차

연산자(operator) 오버로딩

  • Vector의 operator<<() 연산자를 만들어 보자

  • friend 키워드

  • friend 클래스

  • friend 함수

  • 연산자 오버로딩에 필요한 friend 함수

  • 멤버 아닌 연산자 오버로딩을 작성하는 법

  • Vector를 출력하는 << 연산자

  • 잠… 잠깐만요!

  • operator<<() 를 고쳐보자

  • 완전히 수정한 operator<<()

friend 키워드
13:55

목차

연산자(operator) 오버로딩

  • 연산자 오버로딩과 const

  • 연산자 오버로딩에 const를 사용하지 않는 경우

  • &를 사용하면 무슨 일이 일어나나?

  • 제한사항

연산자 오버로딩과 const
14:20
코드보기: Vector 클래스에서 연산자 오버로딩하기
03:19
복습 퀴즈
1 question

목차

연산자(operator) 오버로딩

  • 연산자 오버로딩을 남용하지 말 것

  • 그래서 어쩌라고요?

  • 대입(assignment) 연산자

  • 암시적 operator=

연산자 오버로딩을 남용하지 말 것
06:45

목차

암시적 함수들을 제거하는 법

  • 클래스에 딸려오는 기본 함수들

  • 클래스에 딸려오는 기본 함수들

  • 기본 생성자를 “지우는” 법

  • 기본 생성자를 “지우는” 법

  • 암시적 복사 생성자를 “지우는” 법

  • 암시적 소멸자를 “지우는” 법

  • 암시적 operator=를 “지우는” 법

암시적 함수들을 제거하는 법
05:17
복습 퀴즈
1 question
정리
02:04
+ 개체치향 프로그래밍 3
15 lectures 01:41:35

목차

상속

  • 상속

  • 상속이란?

  • Java와 C++의 차이

  • 파생 클래스를 정의하는 법

  • 파생 클래스의 접근 제어자

  • 예: public 상속과 private 상속

  • Java와 C++의 차이점

  • 메모리를 보자

상속
18:32

목차

상속

  • 생성자 호출순서

  • 암시적으로 부모 클래스의 생성자 호출하기

  • 사례 1: 매개변수 없는 생성자가 있는 베이스 클래스

  • 사례 2: 매개변수 없는 생성자가 없는 베이스 클래스

  • 자식 개체 지우기

  • 소멸자 호출순서

생성자 호출 순서, 소멸자 호출 순서
05:22
코드보기: Animal, Cat, Dog 클래스
02:54
복습 퀴즈
1 question
정리
01:29

목차

다형성(Polymorphism)

  • 다형성(polymorphism)을 배우기 전에…

  • 멤버 함수의 메모리

  • 저수준 뷰

  • 함수 오버라이딩

  • 뭐가 출력될까?

  • Java & C++ 상속

다형성(Polymorphism)
14:45

목차

다형성(Polymorphism)

  • 정적 바인딩 – 멤버 변수

  • 정적 바인딩 – 멤버 함수

정적 바인딩
02:52

목차

다형성(Polymorphism)

  • 가상(virtual) 함수 (다형성의 핵심)

  • Java & C++ 상속

  • Java는 모든 것이 기본적으로 가상함수

  • 가상함수

  • 가상 테이블

  • 동적 바인딩 – 가상 멤버함수

동적 바인딩
12:00
복습 퀴즈
1 question

목차

다형성(Polymorphism)

  • 문제 있는 코드. 뭔지 보이나요?

  • 이러면 어떤 일이 일어날까?

  • 이번에는?

  • 비 가상 소멸자

  • 가상 소멸자

  • 가상함수에 대해 한가지 유의점

가상 소멸자
07:21
코드보기: Animal, Cat, Dog의 가상함수
04:47
복습 퀴즈
1 question
정리
05:55

목차

다중(multiple) 상속

  • 다중 상속

  • 어느 부모의 생성자가 먼저 호출될까?

  • 이 질문 기억나나요?

  • 문제점 1 – 어떤 함수가 호출되나?

  • 해결책?

  • 문제점 2 – 다이아몬드 문제

  • 가상 베이스 클래스

다중(multiple) 상속
10:16

목차

추상(abstract) 클래스

  • 추상 클래스

  • 순수(pure) 가상함수

  • 순수 가상함수

  • 순수 가상함수를 선언하는 법

  • 추상 클래스

추상(abstract) 클래스
05:38
영상 퀴즈
4 questions

목차

추상(abstract) 클래스

  • 추상 클래스

  • “인터페이스”

"인터페이스"
06:18
코드보기: IFlyable, IWalkable, Bat, Cat 클래스
01:45
정리
01:41
+ 캐스팅(형변환, Casting)
9 lectures 01:00:11

목차

캐스팅(형변환, Casting)

  • 암시적(Implicit) 캐스팅

  • 명시적(Explicit) 캐스팅

  • C 스타일의 캐스팅을 기억하나요?

  • C 스타일 캐스팅

  • 정적 캐스팅(Static Casting)

  • 리인터프리트(Reinterpret) 캐스팅

  • 컨스트(Const) 캐스팅

  • 동적(Dynamic) 캐스팅

C 스타일 캐스팅
11:46

목차

캐스팅(형변환, Casting)

  • static_cast

  • static_cast 사용법

static_cast
07:35
코드보기: static_cast으로 값 변환하기
01:54
코드보기: static_cast으로 개체 포인터 변환하기
05:17

목차

캐스팅(형변환, Casting)

  • reinterpret_cast

  • 메모리를 보자!

  • static_cast vs reinterpret_cast

  • reinterpret_cast 사용법

reinterpret_cast
08:15
코드보기: Tiger 개체의 주소 저장하기
03:58
복습 퀴즈
4 questions

목차

캐스팅(형변환, Casting)

  • const_cast

  • const_cast 사용할 때는?

  • const_cast 사용법

const_cast
07:26

목차

캐스팅(형변환, Casting)

  • dynamic_cast

  • C 스타일 vs dynamic_cast

  • static_cast vs dynamic_cast

  • dynamic_cast

  • 꽤 괜찮아 보이죠?

  • 동적 캐스팅

  • dynamic_cast 사용법

  • 아 C~, 뭐 이리 많아?

  • 캐스팅 규칙

dynamic_cast
12:01
복습 퀴즈
1 question
정리
01:59
Requirements
  • "C 언매니지드 프로그래밍" 수료
  • "개체지향 프로그래밍 및 설계" 수료
Description

본 비디오 강좌는 포큐아카데미에서 진행하는 COMP3200 수업의 비디오 강좌입니다.

C++은 C와 더불어 가장 널리 사용되는 언매니지드 언어일 뿐만 아니라 2018년 7월 기준 전세계에서 3번째로 많이 쓰이는 언어입니다. (출처: TIOBE) 그리고 언매니지드 언어라는 특수성 때문에 한동안 사용률이 떨어지지 않을 전망입니다.

현존하는 프로그래밍 언어를 크게 둘로 나누면 매니지드(Managed) 언어와 언매니지드(Unmanaged) 언어가 있습니다. 이 둘의 차이는 프로그래머가 컴퓨터 하드웨어를 직접 제어할 수 있는지 여부입니다. (예: 프로그래머가 직접 메모리를 관리하는가?)

프로그램의 성능보다 제품을 빨리 개발하는 것이 중요한 분야에서는 C#, Java와 같은 매니지드 언어를 널리 사용합니다. 하지만 운영체제, 비디오 게임, 가상현실, 주식거래소, 머신 러닝 코어, 블록체인 등 성능이 더 중요한 분야에서는 여전히 언매니지드 언어를 사용할 수밖에 없습니다. 따라서 본 강좌는 실제 업계에서 쓰이는 C++ 프로그래밍 기법에 중점을 맞춰 진행합니다.

언매니지드 언어의 장점은 여기서 그치지 않습니다. 프로그래머의 지속적인 성장에 반드시 필요한 지식 중 하나가 컴퓨터 하드웨어에 대한 이해입니다. 탑 레이서라면 자동차의 동작 원리를 잘 알아야 하듯이 탑 프로그래머는 하드웨어의 동작 원리를 잘 이해해야 합니다. 이걸 돕는 언어가 바로 언매니지드 언어입니다.

'COMP2500: Java 개체지향 프로그래밍 및 설계'와 마찬가지로 이 강좌에서도 개체지향 프로그래밍(OOP)에 대해 배웁니다. 하지만 이 코스를 성공적으로 마무리한 분들은 하드웨어 수준에서 개체지향 프로그래밍이 어떻게 작동하는지까지 자세히 이해하실 수 있을 겁니다.

본 강좌는 다음과 같이 크게 세 부분으로 나뉘며, 강의 진행도 이 순서를 따릅니다.

  1. 코어 C++: 참조, 클래스, 상속 등 C++의 기본이 되는 내용. C++98 표준 ( ~ 5주 차)

  2. 모던 C++: STL 등 C++03 표준에서 추가된 기능 중 업계에서 쓰이는 내용들 (6주 차 ~ 9주 차)

  3. C++1x: C++11/14/17 표준에서 추가된 최신 기능 중 업계에서 쓰이는 내용들 (10주 차 ~ )

위와 같이 강의를 세 부분으로 나눈 이유는 회사에 따라 사용하는 C++ 표준이 다르고, 성능 상의 이유로 일부러 과거의 표준을 여전히 사용하는 곳도 많기 때문입니다. 따라서 최신의 C++ 표준만을 사용하는 프로그래머는 업계에서 원하는 프로그래머가 아닌 경우가 많습니다.

Who this course is for:
  • 컴퓨터 공학의 기본기를 배우고 싶은 분들
  • 프로그래머로서 평생 커리어를 꿈꾸는 분들