C 언매니지드 프로그래밍
4.5 (104 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.
235 students enrolled

C 언매니지드 프로그래밍

이 강좌는 선수 과목인 '실무 프로그래밍 입문'에서 배운 절차적 프로그래밍 지식을 기반으로 C언어가 언매니지드 언어로서 가지는 기능들에 대해서 알아봅니다
Bestseller
4.5 (104 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.
235 students enrolled
Created by Pope Kim
Last updated 2/2020
Korean
Price: $199.99
30-Day Money-Back Guarantee
This course includes
  • 38 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 342 lectures 37:51:32
+ C언어 기본 문법 1
27 lectures 02:40:37
C89 표준
04:36
Hello World
01:22
#include, stdio.h
09:21
main(void) 함수
15:43
printf() 함수
06:41
주석(comment)
01:41

함수 선언 시 void의 사용 여부와 주석에 대해서 복습해봅니다

복습 퀴즈
3 questions
C언어의 기본 문법
09:44
자료형, unsigned와 signed
04:36
char 형
12:25

char 형에 대해 복습해봅니다.

복습 퀴즈
4 questions
short 형
02:15
영상 퀴즈
1 question
int 형, long 형
10:52

int 형과 long 형에 대해서 복습해봅니다.

복습 퀴즈
1 question
float 형, double 형, long double 형
08:19

float 형, double 형, long double 형에 대해 복습해봅니다.

복습 퀴즈
1 question
코드보기: 기본 자료형
02:47
C언어의 bool 형
10:38
열거형(enum)
05:13
코드보기: 열거형
03:24
변수 선언
02:18

열거형과 변수 선언에 대해 복습해봅니다.

복습 퀴즈
2 questions
연산자
06:59
sizeof 연산자
03:05
size_t
13:22
역 참조 연산자
02:55
구조체/공용체 멤버 접근자
02:39
비교 연산자, 논리 연산자, 조건 연산자
01:00

size_t에 대해 복습해봅니다.

복습 퀴즈
1 question
조건문과 반복문, if 문, switch/case 문
09:00
코드보기: switch/case
01:59
for 문, while 문, do while 문
05:47
코드보기: 조건문/반복문
01:56

switch/case 문에 대해 복습해봅니다.

복습 퀴즈
1 question
+ C언어 기본 문법 2, 빌드 단계
48 lectures 05:24:55
함수
07:37
함수 정의의 문제
01:24
함수 선언
09:08

함수 선언, 함수 정의, 전방 선언에 대해 복습해봅니다.

복습 퀴즈
2 questions
함수 매개변수 평가 순서, 피연산자 평가 순서
20:10
연산자 우선순위와 평가 순서 1
01:02
연산자 우선순위와 평가 순서 2
03:18
영상 퀴즈
1 question
평가 순서를 강제하는 연산자
09:03

연산자 우선순위와 평가 순서에 대해 복습합니다.

복습 퀴즈
1 question
범위(scope)
11:20
코드보기: 전역 변수
03:40

범위, 전역 변수에 대해 복습해봅니다.

복습 퀴즈
3 questions
const 키워드
11:48

const 키워드에 대해 복습해봅니다.

복습 퀴즈
1 question
goto 문
09:00
goto 문은 정말로 악마인가요?
19:38
코드보기: goto 문
05:30

goto 문에 대해 복습해봅니다.

복습 퀴즈
1 question
배열
02:28
코드보기: 배열
02:04
스택 메모리
15:05
스택 메모리에 대해서 간단히 알아보자!
23:58
스택 메모리 안의 배열, 스택 오버플로
10:11
배열의 요소 개수 구하는 방법
08:37
길이가 명시된 매개변수 배열
06:04
매개변수 배열의 길이, 배열 요소의 초기값
08:54
다차원 배열
05:50
코드보기: 다차원 배열
01:20
정리
02:07
소스코드에서 실행파일까지, C 프로그램의 빌드 과정
10:59
.h와 .c 파일
05:48
헤더 파일이 필요한 이유
05:48
#include <>와 #include ""
02:32
빌드 과정: 전처리 단계
05:40
트랜슬레이션 유닛 보는 방법
02:51
빌드 과정: 컴파일 단계
05:03
어셈블리어 코드 보는 방법
05:18
빌드 과정: 어셈블 단계
02:37
오브젝트 코드 보는 방법
03:12
빌드 과정: 링크 단계
04:39
링크 단계가 분리되어 있는 이유
05:32
라이브러리(library), 정적/동적 라이브러리와 링크
07:41
분할 컴파일과 전역 변수
02:58
다른 파일에 있는 전역 변수 사용 시 문제점
04:38
extern 키워드
07:25
코드보기: extern 키워드
04:57
전역 변수의 문제, static 키워드
09:04
코드보기: static 키워드
06:15
.c와 .h 파일 정리, 순환 헤더 인클루드와 해결법
06:17
인클루드 가드 작동법
02:05
인클루드 가드 예제
05:00
C 컴파일러의 종류와 특징
05:12
정리
04:08
+ 포인터
54 lectures 03:29:39
포인터 (pointer)
06:27
주소 연산자 &
06:12

주소 연산자에 대해 복습해봅니다.

복습 퀴즈
1 question
메모리 주소 저장하기
04:53
포인터의 의미
01:14
메모리 주소에 저장된 자료형
03:13
포인터 변수를 선언하는 방법
01:59
포인터 변수를 부르는 방법
06:15
포인터 변수의 실제 메모리 뷰
03:17
포인터의 비유: 현실 세계 예
03:20
다른 포인터의 예
04:49
포인터에 저장된 주소도 바꿀 수 있나요?
01:23

포인터의 의미와 부르는 방법에 대해 복습해봅니다.

복습 퀴즈
2 questions
역 참조 연산자 *
04:06
참조와 역 참조
03:42
역 참조를 이용한 값 변경 예
03:57

포인터를 이용한 값 변경에 대해 복습해봅니다.

복습 퀴즈
1 question
포인터로 두 변수의 값 바꾸기
04:50
값에 의한 전달 vs 참조에 의한 전달
03:58
코드보기: Min, Max 한 번에 구하기
05:02
포인터와 함수 반환 값
03:10
댕글링 포인터(dangling pointer)
04:03
널(NULL) 포인터
04:53
NULL이 가지는 문제들
04:34
널 포인터는 언제 사용하나요?
07:52

포인터와 함수 반환 값에 대해 복습해봅니다.

복습 퀴즈
1 question
포인터의 비교
02:44
포인터의 크기
05:30
포인터와 배열의 비교
00:48
배열 포인터에 대입하기
04:01
배열 속 각 요소의 위치, 각 요소의 위치 계산하기
05:57

배열 요소의 위치 계산에 대해 복습해봅니다.

복습 퀴즈
3 questions
배열 요소에 포인터로 접근하기
03:31
포인터 중간 정리, 포인터의 캐스팅
03:31
영상 퀴즈
1 question
딱 '한' 바이트만 옮기기
02:52
코드보기: int 메모리 뷰어
02:29
코드보기: 두 배열이 겹치는가?
06:22
두 주소 간의 사칙연산
02:47
자바와 C#에서는 모든 것이 포인터다
02:04
포인터를 사용한 안전하지 않은 코드
03:14
포인터와 배열의 차이
08:06

포인터와 배열의 차이에 대해 복습해봅니다.

복습 퀴즈
2 questions
다시 만나는 연산자 결합 법칙
02:41
영상 퀴즈
4 questions
포인터와 연산자 우선순위 및 결합 법칙
04:57
동일한 우선순위를 갖는 연산자들
01:27
조금 더 빠른 배열의 요소 더하기 함수
03:28
왜 *p++이 더 빠르죠?
01:57

포인터와 연산자 우선순위와 결합 법칙에 대해 복습해봅니다.

복습 퀴즈
2 questions
포인터와 const
01:49
주소를 보호하는 const 포인터
03:44
값을 보호하는 const를 가리키는 포인터
04:23
두 const의 정리와 예
01:01
주소와 값 모두 지키는 const
01:07
const 포인터 읽는 방법 정리
01:42

const 포인터에 대해 복습해봅니다.

복습 퀴즈
3 questions
const는 절대 제거하지 말자
03:03
코드보기: 벡터 덧셈
03:09
포인터의 용도
04:02
포인터 배열
04:45
2차원 포인터 배열
06:47
코드보기: 2D 배열을 배열의 배열로 바꾸기
06:50
정리
05:42
+ C 스타일 문자열, 출력
24 lectures 03:05:52
문자열의 표현과 길이
05:15
문자열 관리 시 길이의 문제
02:45
문자열 길이 문제 해결방법 1
05:09
문자열 길이 문제 해결방법 2, C 스타일 문자열
09:02
영상 퀴즈
1 question
C 스타일 문자열의 장단점, 문자열 길이 구하기
19:44
문자열 조작, 두 문자열의 비교
06:53
문자열 비교 알고리듬
01:24
더 효율적인 문자열 비교 함수 작성하기 1
07:11
더 효율적인 문자열 비교 함수 작성하기 2, strcmp()와 strncmp()
03:52

문자열 비교 함수에 대해 복습해봅니다.

복습 퀴즈
1 question
코드보기: 대소문자 구분없는 문자열 비교
05:22
문자열 복사, strcpy(), strncpy()
12:07
문자열 합치기, strcat(), strncat()
06:08
코드보기: 문자열 버퍼를 이용한 출력
08:31

문자열 복사 함수, 문자열 합치기 함수에 대해 복습해봅니다.

복습 퀴즈
2 questions
문자열 찾기
07:01
문자열 찾기 함수가 메모리 주소를 반환하는 이유
04:38
문자열 토큰화
11:10

문자열 토큰화에 대해 복습해봅니다.

복습 퀴즈
1 question
코드보기: 문자열을 대문자 또는 소문자로 바꾸기
12:14
출력, 서식 지정(formatted) 출력, 서식 문자열(format string)
08:01
일반적인 서식 문자열 형식, 서식 지정자(format specifier)
17:55

서식 지정 출력에 대해 복습해봅니다

복습 퀴즈
1 question
코드보기: ASCII 표 그리기
08:05
코드보기: 바이트 단위 변환 표
04:56
서식 문자열이 필요한 이유, fprintf(), stdout, 버퍼링, sprintf()
10:08
출력 함수의 안정성, 기타 출력 함수
04:07
정리
04:14
+ 콘솔 입력, 파일 입출력, 커맨드 라인 인자
26 lectures 03:11:34
입력
06:11
한 글자씩 읽기, 한 글자씩 읽는 알고리듬 1
05:55
getchar()와 EOF 키
05:23
한 글자씩 읽기 알고리듬 2, EOF 키는 어디 있나요?
07:35

EOF 키에 대해 복습해봅니다.

복습 퀴즈
2 questions
코드보기: 공백(whitespace)과 줄 수 세기
03:52
한 줄씩 읽기, gets()
13:45
fgets()로 안전하게 한 줄 읽기
09:36
한 줄씩 읽는 방법이 유용한 경우
01:44

한 줄씩 읽기에 대해 복습해봅니다.

복습 퀴즈
1 question
한 데이터씩 읽기, scanf()
07:48
scanf()의 일반적인 서식 문자열 형식
06:46
scanf() 사용 예
05:25
문자를 읽을 때 scanf()의 문제점과 해결책, clearerr()
09:49
코드보기: 게임 전적 쓰고 읽기
15:42

한 데이터씩 읽기에 대해 복습해봅니다.

복습 퀴즈
1 question
한 블록씩 읽기
05:52
파일 입출력
01:33
파일 열기
07:49
파일에 쓰기/읽기 예, fflush(), 파일에 이어 쓰기 예
08:25
파일 닫기, 파일 오류처리, stderr, strerror(), perror()
14:45

파일 오류처리에 대해 복습해봅니다.

복습 퀴즈
1 question
코드보기: 파일 복사하기
04:46
파일 탐색
14:26
코드보기: 도돌이표
08:17
입출력 리디렉션
09:22
커맨드 라인 인자
05:23

커맨드 라인 인자에 대해 복습해봅니다.

복습 퀴즈
1 question
커맨드 라인 인자 메모리 뷰
03:53
코드보기: 제대로 된 파일복사
03:39
정리
03:53
+ 구조체, 공용체, 함수 포인터
23 lectures 03:45:53
구조체, 구조체의 필요성
13:50
구조체의 선언 및 사용
06:30
typedef 이란?, typedef 사용법
08:00
구조체 변수 초기화 하기
10:04
구조체 매개변수
12:12

구조체에 대해 복습해봅니다.

복습 퀴즈
2 questions
함수 반환값으로서의 구조체, 구조체 배열
08:51
영상 퀴즈
1 question
얕은 복사, 깊은 복사
09:49
구조체 사용 시 포인터 저장의 문제
07:01
구조체를 다른 구조체의 멤버로 사용하기, 바이트 정렬
14:36

바이트 정렬에 대해 복습해봅니다.

복습 퀴즈
1 question
코드보기: 점, 선, 사각형
14:16
비트 필드
08:39
공용체
05:41
코드보기: 색상 표현하기
06:52
메모리 공유만을 위한 공용체의 예
05:38

공용체에 대해 복습해봅니다.

복습 퀴즈
1 question
함수 포인터, 함수를 변수에 저장할 수 있을까?
10:45
함수를 매개변수로 전달할 때 필요한 것들, 함수 포인터 선언
10:40
함수 포인터 읽는 방법, 오른쪽-왼쪽 규칙(Right-Left Rule)
07:12
함수 포인터 쉽게 읽기
04:58

오른쪽-왼쪽 규칙에 대해 복습해봅니다.

복습 퀴즈
3 questions
코드보기: 콜백 함수
14:31
배열의 포인터, 퀵 정렬, void 포인터
15:55
코드보기: 구조체를 사용한 퀵 정렬
10:08
코드보기: 기수(radix) 정렬
11:35
정리
08:10
+ 가변 인자 함수, 올바른 오류 처리 방법
10 lectures 01:38:16
가변 인자 함수
09:15
va_로 시작하는 매크로 함수들
12:30
가변 인자 함수가 인자를 읽어오는 방법
08:52
함수에서 매개변수로 가변 인자만 받을 수 있을까?
08:25
코드보기: 초간단 서식 지정자
11:10
오류 처리
10:09
안 좋은 오류 처리의 예
08:53
버그와 오류의 차이, 올바른 오류 처리 전략
20:43
오류 처리 후에도 발생하는 예외 상황
03:39
정리
04:40
+ 레지스터, 스택 & 힙, 동적 메모리. 다중 포인터
18 lectures 02:55:15
메모리의 종류
09:40
스택 메모리
01:57
레지스터
07:39
어셈블리어로 보는 레지스터
05:55
register 키워드
10:55
힙 메모리
17:23
동적 메모리
06:11
메모리 할당 및 해제 함수, malloc()
03:31
free(), malloc() 사용 예
19:19
동적 메모리 할당 시 문제
11:10

malloc(), free()에 대해 복습해봅니다.

복습 퀴즈
1 question
free()는 몇 바이트를 해제할지 어떻게 알지?, calloc(), memset(), realloc()
13:54
realloc()의 메모리 누수 문제, memcpy()
08:30

realloc() 에 대해 복습해봅니다.

복습 퀴즈
1 question
memcmp(), 정적 vs 동적 메모리
16:13
동적 메모리의 소유권 문제
12:05

동적 메모리의 소유권 문제에 대해 복습해봅니다.

복습 퀴즈
2 questions
다중 포인터, 이중 포인터
10:20
영상 퀴즈
1 question
다중 포인터를 쓰는 이유, 다중 포인터 예
08:59
코드보기: 단어 정렬
05:15

다중 포인터에 대해 복습해봅니다.

복습 퀴즈
3 questions
정리
06:19
+ 자료구조
30 lectures 03:44:18
자료구조 기초
18:55
배열, 배열의 삽입
08:30
배열의 삭제
04:26
배열의 검색, 배열의 접근
03:16

배열의 시간 복잡도에 대해 복습해봅니다.

복습 퀴즈
4 questions
코드보기: 빠른 배열
06:46
스택(stack)
06:53
스택의 삽입
01:56
스택의 제거
02:20
스택의 검색
04:14
스택의 용도
09:00

스택에 대해 복습해봅니다.

복습 퀴즈
2 questions
큐(queue)
05:05
큐의 삽입
03:48
큐의 삭제
02:18
큐의 검색
02:39

큐에 대해 복습해봅니다.

복습 퀴즈
3 questions
연결 리스트, 연결 리스트의 삽입/제거/검색
10:10
연결 리스트: 전체 출력 예 & 노드 메모리 해제 예, 헤드 노드,
09:40
연결 리스트: 삽입하기 예
10:19
연결 리스트: 오름차 순으로 삽입하기 예
08:48
연결 리스트: 노드 삭제
07:14
연결 리스트의 용도
07:16

연결 리스트에 대해 복습해봅니다.

복습 퀴즈
3 questions
해시 테이블
06:48
해시 테이블의 크기는 2배인 소수로
06:09
중복 색인 문제의 해결
17:34
해시란 무엇인가?
11:21
해시 테이블에 문자열 저장하기
09:07
해시 맵
05:13
해시 충돌과 훌륭한 해시 함수
05:39
해시 충돌 방지와 성능 향상
15:27
코드보기: 여러 데이터형과 해시 함수
06:14
정리
07:13
Requirements
  • '실무 프로그래밍 입문(C#)' 과목 수료
  • '컴퓨터 공학용 수학' 과목 수료
Description

본 비디오 강좌는 POCU 아카데미에서 진행하는 COMP2200 수업의 동영상 강의입니다.


C는 가장 널리 사용되는 언매니지드 언어들 중 하나이며, 2019년 7월 기준 전 세계에서 2번째로 많이 사용되는 언어입니다. (출처: TIOBE)

현존하는 프로그래밍 언어는 크게 매니지드(Managed) 언어와 언매니지드(Unmanaged) 언어로 나눠지며, 이 둘의 차이는 프로그래머가 컴퓨터 하드웨어를 직접 제어할 수 있는지의 여부입니다. (예: 프로그래머가 직접 메모리를 관리하는가?) 대표적인 언매니지드 언어인 C는 하드웨어와 매우 가깝다는장점으로 40년이 넘는 세월 동안 살아남았을 뿐만 아니라 아직도 컴파일러, 운영체제, 임베디드 시스템 등 저수준의 제어 및 메모리 절약이 요구되는 곳에 왕성하게 사용되고 있습니다. 그리고 이런 트렌드는 한 동안 바뀌지 않을 전망입니다.

프로그래머의 지속적인 성장에 반드시 필요한 지식 중 하나는 컴퓨터 하드웨어에 대한 이해입니다. C는 대부분의 매니지드 언어와 달리 언매니지드 언어 특유의 기능 (예: 메모리 관리) 들을 포함하고 있기 때문에, 하드웨어의 동작 원리를 공부하고 싶은 분 들, 혹은 컴퓨터를 더 잘 이해하고 싶은 분들에게 좋은 입문용 언매니지드 언어라고 할 수 있겠습니다.

이 강좌는 선수 과목인 '프로그래밍 입문'에서 배운 절차적 프로그래밍 지식을 기반으로 C언어가 언매니지드 언어로서 가지는 기능들에 대해서 알 아봅니다. 이 코스를 성공적으로 마무리한 분들은 하드웨어에 대한 더 넓은 시야를 갖출 수 있을 것입니다.

본 강좌는 첫 주에 '프로그래밍 입문'과목에서 배운 기초 프로그래밍 개념들이 C에 어떻게 적용되는지 살펴 본 뒤 다음과 같이 크게 세 부분으로 나뉘며, 강의 진행도 이 순서를 따릅니다.

  1. ANSI C/C89: C의 기본이 되는 내용과 C로 구현하는 자료 구조들. (~11주 차)

  2. C99: C99 표준에서 추가된 기능들 (12주 차 ~ 13주 차)

  3. C++1x: C11/18 표준에서 추가된 최신 기능들 (14주 차~)

위와 같이 강의를 세 부분으로 나눈 이유는 아직도 많은 C 프로젝트들이 89년도의 표준을 사용하기 때문이며, 이런 트렌드는 바뀌지 않을 전망이기 때문입니다. 따라서 모든 프로젝트에서 쓸 수 있는 C의 지식을 중심으로 배우되 가능할 경우 새로 추가된 기능을 사용할 수 있는 실력을 갖추게 하는 것이 강좌의 목표입니다.

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