소스코드(*.cpp, *.h)와 실행결과 캡처파일 제출 · 매주 토요일 23:59까지 · 기한 이후 감점
03
강의 목차
15주 전체 커리큘럼
📅
전체 강의 일정
1주차 ~ 15주차
주차
내용
주차
내용
1주
강의 소개
9주
배열
2주
프로그래밍 개요 (데이터, 자료형, 상수와 변수)
10주
포인터
3주
식과 연산자
11주
포인터와 배열의 완성
4주
조건문
12주
구조체
5주
반복문
13주
파일입출력
6주
함수 1
14주
메모리관리
7주
함수 2
15주
기말고사
8주
중간고사
04
절차지향 vs 객체지향
C와 C++의 차이
⚔️
C vs C++ 비교
두 패러다임의 특징
🔄 절차지향 (C)
1970년대 AT&T 벨연구소에서 Ken Thompson, Dennis Ritchie가 UNIX용으로 개발
고급언어지만 저급언어 특성도 보유 → 매우 효율적
실행 순서 고정 → 코드 순서 변경시 동일 결과 보장 어려움
디버깅이 어려움 · 유지보수 어려움
🏗️ 객체지향 (C++)
1983년경 Bjarne Stroustrup이 C의 장점을 유지하며 약점 보완
코드 재활용성이 높음
구조화 → 오류 수정 쉬움
이식성이 좋고 유연함
단점: 상대적으로 속도가 느림
🏪 자판기 예시로 보는 차이
절차지향 분석
고객은 돈을 자판기에 넣는다
↓
자판기는 돈을 검사하여 제품과 잔돈을 꺼내준다
↓
고객은 잔돈과 제품을 받는다
객체지향 분석
👤 고객 (객체)
돈을 넣는다 잔돈을 받는다 제품을 받는다
🏧 자판기 (객체)
돈을 받는다 돈을 검사한다 제품을 준다 잔돈을 준다
📌 핵심 차이
절차지향은 함수(순서)를 중심으로 설계하고, 객체지향은 객체(데이터+행동)를 중심으로 설계한다. 객체지향은 현실 세계의 사물을 그대로 모델링하는 방식이다.
객체지향프로그래밍기초 · Week 02
C++ 시작하기
프로그래밍 언어의 개념, Visual Studio 프로젝트 생성, 기본 프로그램 구조와 오류 처리.
컴파일러main()coutnamespace디버깅
01
프로그래밍 언어
사람과 컴퓨터의 대화 수단
🔄
소스코드 → 실행파일 변환 과정
컴파일 · 링크 · 빌드
컴퓨터는 0과 1로 된 기계어만 이해하고, 사람은 기계어를 이해하기 힘들다. 그래서 사람은 이해하기 쉬운 프로그래밍 언어로 작성하고, 컴파일러가 기계어로 번역한다.
소스파일
파일명.cpp
사람이 작성한 코드
→ compile →
목적파일
파일명.obj
기계어로 번역됨
→ link →
실행파일
파일명.exe
라이브러리와 결합
📌 빌드(Build)란?
코딩 → 컴파일 → 링크 → 실행파일 생성의 전체 과정을 빌드라고 한다. Visual Studio에서 Ctrl + Shift + B로 빌드, Ctrl + F5로 실행(디버그 없이 시작).
02
Visual Studio 프로젝트
통합 개발 환경(IDE) 사용법
🛠️
프로젝트 생성 순서
콘솔 앱 · C++ · Windows
STEP 1
새 프로젝트
콘솔 앱 선택 (C++/Windows/콘솔)
→
STEP 2
프로젝트 구성
프로젝트 이름과 저장 위치 설정
→
STEP 3
소스 파일 추가
소스 파일 폴더 → 우클릭 → 추가 → 새 항목
→
STEP 4
빌드 & 실행
Ctrl+Shift+B → Ctrl+F5
⌨️ 주요 단축키
Ctrl+Shift+B
빌드(컴파일)
Ctrl+F5
디버그 없이 실행
F5
디버깅 시작
F9
중단점 설정/해제
F10
한 줄씩 실행
Shift+F5
디버깅 종료
🐛 Debug vs Release 모드
DEBUG 모드
디버깅 정보 포함 → 파일 크기 크고 실행 느림. 개발 중에 사용.
RELEASE 모드
코드 최적화 → 파일 크기 작고 빠름. 배포용.
03
프로그램 기본 구조
Hello World 해부하기
📝
C++ 프로그램의 구성 요소
전처리기 · main() · cout · namespace
// myfirst.cpp – 메시지를 출력하는 프로그램#include<iostream>// 전처리기 지시자using namespacestd; // std:: 접두어 생략intmain() // 프로그램 시작점
{ // 함수 시작
cout << "Hello World!\n"; // 출력문 (;로 마무리)
cout << "C++ 세상에 온 것을 환영합니다.";
return0; // 함수 종료
} // 함수 끝
#include <iostream>
전처리기 지시자. 컴파일 전에 iostream 파일 내용을 프로그램에 추가하도록 지시. C++의 입출력 기능(cout, cin)이 여기 정의됨.
int main()
프로그램이 처음 시작될 때 호출되는 함수. {로 시작해서 }로 끝남. 문장은 위→아래 순서로 실행.
cout << "출력내용"
화면에 출력하는 객체. << 연산자로 데이터를 전달. endl 또는 \n으로 줄바꿈.
using namespace std;
C++ 표준 라이브러리는 std 네임스페이스에 있음. 이 선언으로 std::cout 대신 cout만 써도 됨.
🔤 제어 문자열 (Escape Sequence)
문자
의미
문자
의미
\n
줄바꿈 (개행)
\t
탭 문자
\\
역슬래시
\'
작은따옴표
\"
큰따옴표
📌 프로그램 작성 규칙
① 한 행에 하나의 구문 ② 세미콜론(;)은 절대 빠트리지 말 것 ③ 중괄호 {} 각각 별도 행 ④ 함수 내부는 들여쓰기
04
오류와 디버깅
버그를 찾고 고치는 방법
🐞
프로그램 오류의 종류
컴파일 오류 · 런타임 오류 · 로직 오류
① 컴파일 오류
프로그램의 문법적 오류. 컴파일 자체가 안 됨. 예: 세미콜론 누락, 괄호 불일치
cout << "hello" ← ; 없음!
② 런타임 오류
문법은 맞지만 실행 중 오류 발생. 예: 메모리 참조 오류, 배열 범위 초과
③ 로직 오류
컴파일·실행은 되지만 원하는 결과가 나오지 않는 경우. 가장 찾기 어려움
🔍 디버깅 방법 3가지
① 중단점(Break Point)
F9로 설정. 특정 줄에서 실행을 멈추고 변수값 확인
② 코드 이동
F10(한 줄씩), F11(프로시저 단위), F5(다음 중단점까지)
③ Watch 창
변수의 현재 값을 실시간으로 확인. Debug 모드에서만 동작
객체지향프로그래밍기초 · Week 03
데이터 처리
변수와 메모리, 다양한 자료형, 문자와 ASCII 코드, 표준 입출력(cin/cout).
변수int/float/charASCIIcinconst
01
변수와 메모리
정보를 저장하는 방법
💾
변수 선언과 메모리 할당
위치 · 종류 · 값
정보를 저장하려면 프로그램은 3가지를 알아야 한다: (1) 어디에 저장(메모리 위치)되는가, (2) 어떤 종류(자료형)의 정보인가, (3) 어떤 값이 저장되는가. 이 세 가지를 지정하는 것이 변수 선언이다.
int count; // 정수형 변수 선언 → 메모리 4바이트 할당
count = 5; // 값 5를 저장
&count; // count가 저장된 메모리 주소char ch = 'A'; // 문자형 변수, 선언과 동시에 초기화double rnum = 3.14;
📛 변수 이름 규칙
✅ 유효한 이름
result Hong_gil_dong
_p_g_ Year2017
kor_score_
❌ 무효한 이름
1996Birth_year ← 숫자로 시작
Gil-dong ← - 사용 불가
Doctor Kim ← 공백 불가
double ← 키워드
Dollor# ← # 사용 불가
📌 네이밍 관례
두 단어 조합: 밑줄 사용 my_apple 또는 카멜케이스 myAppleOrange
02
자료형 (Data Type)
데이터의 종류와 메모리 크기
📊
C++ 기본 자료형 총정리
정수형 · 실수형 · 문자형 · bool
분류
자료형
크기
범위
정수형
short
2 byte
-32,768 ~ 32,767
int
4 byte
-2,147,483,648 ~ 2,147,483,647
long
4 or 8 byte
최소 32bit
실수형
float
4 byte
1.2e-38 ~ 3.4e38
double
8 byte
2.2e-308 ~ 1.8e308
문자형
char
1 byte
-128 ~ 127
부울형
bool
1 byte
true / false
⚠️ 정수 오버플로우
short 최대값(32767)에 1을 더하면 -32768로 순환된다. 자료형의 표현 범위를 벗어나면 예상치 못한 결과가 발생!
# 3. 결과 출력 print("캐릭터 이름:", name) print("현재 공격력:", damage) # 결과: 캐릭터 이름: 아서스 # 결과: 현재 공격력: 192.5
📌 2주차 과제 (Mission) — 나만의 아이템 강화 시뮬레이터
아이템 이름/수치를 변수로 저장 → 강화 시 수치 +1 되게 계산 → "X검이 +1 강화되어 +2가 됨!" 출력
다음 주 수업 전까지 제출!
🔒 3주차 조건문 (if / elif / else) — 업데이트 대기 중
🔒 4주차 반복문 (for / while) — 업데이트 대기 중
🔒 5주차 함수 — 업데이트 대기 중
홈/게임프로그램구조/2주차
2 / 13 주차 완료
게임프로그램구조 · Week 01 · Orientation
강의 소개 (OT)
과목 목표, 게임 프로그래머에게 필요한 기초, 그리고 한 학기 강의 전체 목차.
컴퓨터 구조운영체제이산수학알고리즘
01
과목 소개 & 학습 목표
이 과목이 무엇을 다루는가
🎯
과목 소개
게임 프로그래밍 기초 지식 학습
📌 과목 대상
게임 제작에 관심을 가지고 있는 학생을 대상으로 게임 프로그래밍 분야에서 필요한 지식 학습을 위해 개설된 과목
🎓 학습 목표
프로그래머로서 갖추어야 할 기초 사항인 컴퓨터 구조, 운영체제, 이산수학, 알고리즘 등의 기본 개념 이해
📊 평가 기준
20%
출석
35%
중간고사
35%
기말고사
10%
과제
02
왜 배워야 하는가?
게임 프로그래머에게 기초가 중요한 이유
🧱
기초가 튼튼해야 한다
좋은 게임 프로그래머가 되려면?
프로그래밍 언어와 기술은 수시로 생기고 없어지지만, 기초는 변하지 않아요.
❌ 틀린 생각
프로그래밍 언어를 잘하고 스킬만 잘 익히면 된다
✅ 올바른 방향
기초가 튼튼해야 한다 — 공부하는 방법과 문제해결을 위한 논리적 사고를 익히는 것이 중요
🎮 게임의 기초는 무엇인가?
수학 / 물리컴퓨터 구조자료구조알고리즘운영체제네트워크
🖥️
컴퓨터 구조를 배워야 하는 이유
성능 · 비용 · 용량
🔍 이유 1
개발자 PC에서는 작동하는데 사용자 PC에서는 안 되는 경우 → 프로그램 오류가 아닌 컴퓨터 환경 차이 문제. 해결하려면 컴퓨터 구조 이해 필수
💰 이유 2
"내 프로그램 실행에 어느 정도 성능/용량이 필요한가? 비용은?" → 개발자가 결정해야 할 핵심 과제. 성능 / 비용 / 용량을 고려한 개발이 중요
💡 핵심 메시지
소스 코드만 입력하는 개발자가 아니라, 컴퓨터를 이해하고 이에 맞는 프로그래밍을 할 수 있는 개발자가 되어야 한다.
⚙️
운영체제 & 이산수학을 배워야 하는 이유
자원 관리와 논리적 사고
🗂️ 운영체제
프로그램 실행에는 자원(메모리, I/O, CPU)이 필요
부품들이 알아서 동작하지 않음
운영체제 = 개발자가 필요로 하는 자원이 잘 작동되도록 하는 근원적인 프로그램
📐 이산수학
수학적 지식보다 수학적 사고가 중요
컴퓨터의 모든 명령어는 0과 1로 구성된 로직 & 알고리즘
수학을 통해 얻는 논리적 사고가 핵심
03
한 학기 강의 목차
전체 15주 커리큘럼
📋
전체 강의 일정
1주차 ~ 15주차
전반기
주차
주제
01
Orientation ✓
02
컴퓨터 구조 ✓
03
데이터의 표현 (정수)
04
데이터의 표현 (실수)
05
인공지능 기초
06
머신러닝
07
딥러닝과 생성형 AI
08
중간고사
후반기
주차
주제
09
집합론
10
논리와 부울대수
11
행렬과 벡터
12
확률의 기초
13
그래프와 트리
14
복습
15
기말고사
📚 참고도서
혼자 공부하는 컴퓨터 구조+운영체제 — 한빛미디어
프로그래밍 관점에서 바라보는 컴퓨터 구조 — 연두에디션
알기쉬운 운영체제론 — 연두에디션
컴퓨팅 사고력을 키우는 이산수학 — 한빛아카데미
Week 02
컴퓨터 구조
게임프로그램구조 · Week 02 · Computer Architecture
컴퓨터 구조
컴퓨터가 정보를 이해하고 명령어를 실행하는 방법 — CPU, 메모리, 버스의 역할과 동작 원리.
CPUALU · 레지스터 · CURAM · 캐시버스 (BUS)명령어 실행
01
컴퓨터가 이해하는 정보
데이터와 명령어 — 모든 건 0과 1로 표현된다
💾
데이터 vs 명령어
컴퓨터가 처리하는 두 가지 정보
컴퓨터는 0과 1만 이해해요. 우리가 작성한 코드는 컴파일러를 통해 이진수로 변환되어 실행됩니다.
💾 데이터 (Data)
숫자, 문자, 이미지, 동영상 등
정적인 정보 — 명령어를 위한 재료
예: 'Hello World'
⚡ 명령어 (Instruction)
컴퓨터를 실질적으로 움직임
동적인 정보 — 데이터를 가공하는 동작
예: 1과 2를 더하라
02
CPU (중앙처리장치)
컴퓨터의 두뇌 — ALU, 레지스터, 제어장치
🧠
CPU 내부 구조
세 가지 핵심 모듈
CPU는 메모리에 저장된 명령어를 읽고 → 해석하고 → 실행하는 컴퓨터의 핵심 부품이에요.
🔢 ALU
실제 계산 담당. 산술(+−×÷)과 논리(AND OR XOR NOT) 연산 수행
📋 레지스터
PC : 다음 명령어 주소
IR : 현재 실행 명령어
MAR : 메모리 주소
MBR : 메모리 데이터
🎛️ 제어장치 (CU)
모든 명령의 출발점. 명령어 해석 후 ALU·메모리·I/O에 제어신호 전송
💡 논리연산이 산술연산보다 빠른 이유
4 * 2 → 메모리에서 CPU로 데이터 로드 후 연산 4 << 1 → 레지스터 내에서 비트 이동만 수행 (훨씬 빠름)
4 = 0000 0100 4<<1 = 0000 1000 → 8
03
메모리
ROM · RAM · 캐시 — 데이터를 저장하는 방법
🗄️
메모리 종류 비교
ROM / RAM / 캐시
종류
전원 OFF 시
읽기/쓰기
용도
ROM
데이터 유지
읽기 전용
부팅 펌웨어 등
RAM
데이터 소멸
읽기 + 쓰기
현재 실행 중인 프로그램/데이터
캐시
데이터 소멸
자동 관리
CPU ↔ RAM 속도 차이 완충
⚡
캐시 메모리와 지역성 원칙
왜 캐시가 빠른가?
캐시는 지역성의 원칙을 활용해요. 한 번 쓴 데이터 근처가 또 쓰일 가능성이 높다는 원리입니다.
⏱️ 시간적 지역성
한 번 사용한 데이터는 곧 다시 사용될 가능성이 높다
a = a + 1; a = a * 10; // a 반복 사용
📐 공간적 지역성
사용된 데이터 근처 영역이 다시 사용될 가능성이 높다
for (i=0; i<10; i++) myArray[i]++; // 연속 접근
📌 2D 배열 최적화 팁
메모리는 행-우선(row-major)으로 저장됨 → 열 순서보다 행 순서 접근이 캐시 히트율이 높아 빠르다!
04
버스 (BUS)
부품 간 데이터를 주고받는 통로
🚌
버스의 세 종류
데이터 · 주소 · 제어 버스
📦 데이터 버스
실제 데이터(값)가 이동하는 경로. CPU ↔ 메모리 ↔ I/O 장치
📍 주소 버스
CPU가 읽고 싶은 메모리 주소가 이동하는 경로. 단방향
🎛️ 제어 버스
읽기/쓰기 신호, 인터럽트, 클럭 신호 등 제어 명령이 이동
05
명령어 실행 과정
CPU가 명령어를 어떻게 처리하는가
⚙️
Fetch → Decode → Execute → Write Back
명령어 실행 사이클
STEP 1
Fetch
메모리에서 명령어 읽기
→
STEP 2
Decode
CU가 명령어 해석
→
STEP 3
Execute
ALU가 연산 수행
→
STEP 4
Write Back
결과를 메모리/레지스터에 저장
예시: 더하라, 3번지와 4번지를
① CU → 메모리에 메모리읽기 신호 전송 ② 메모리 1번지 명령어 → 레지스터에 저장 ③ CU 해석: "3번지(120)와 4번지(100) 데이터가 필요" ④ 데이터 읽기 → 각각 다른 레지스터에 저장 ⑤ ALU 연산: 120 + 100 = 220 ⑥ CU → 메모리에 메모리쓰기 신호 + 220 저장 ✓