26일 차 교육 내용 메모를 옮겨 본다.
지난 교육에 이어서 클래스와 복사에 대한 교육이 이루어졌나 보다.
클래스 friend 선언
- 접근 지정을 파괴하는 아무 곳에서나 사용할 수 있도록 지원하는 키워드
- 함수 / class 지원
- 하지만 쓸 이유는 별로 없다.
함수의 반환되는 자료형에 따라 &, * 등에 대한 저장 되는 데이터의 규약을 신경 써야 한다.
- 반환이 필요한 것이면 &
- 전달하는 것이면 *
- 어떤 형식을 사용할 것인지 잘 판단 해야 한다.
메모한 내용이 이게 다다.
실습 위주로 교육된 하루 인지, 당일 메모를 부실하게 한 것인지 모르겠다.
아마도 전날 교육에 이어서 클래스 변수 복사를 통한 예제 위주로 진행됐을 거 같다.
2019년 4월 1일 월요일
2019년 3월 30일 토요일
국비 교육 : 게임 프로그래밍 025일
25일 차 교육 메모를 옮겨본다.
클래스에 대한 내용으로 메모가 작성되어 있다.
클래스 선언은 header로 뺄 수 있다.
클래스 함수는 선언과 함수가 같이 관리 되어야 한다.
클래스. 멤버 함수 선언 멤버 함수 작성을 여러 파일에 나누어 작성할 수 있다.
- 클래스 본체는 header에 멤버 함수 내용은 cpp에 분리해 관리
얇은 복사
- 클래스는 객체 간 기본 대입 연산자(=)를 지원한다.
- 지원되는 연산자로 객체 간 정보를 대입하는 행위를 의미한다.
- 단, 동적 할당한 포인터 변수의 경우 문제가 생긴다. (메모리 누수)
- 생성자, 소멸자를 이용해 동적 할당의 선언과 해제를 관리해야 한다.
- 방지법
1) 멤버 변수에 동적할당을 안 쓴다.
2) 문법적 객체 간 복사를 방지한다.
깊은 복사
- 대입 연산자와 복사 생성자를 오버로딩 한다.
- 초기화 및 대입에 대한 연산자 오버로딩을 구현한다.
- 동적 할당할 개체 → 신규 개체로 1:1 값 복사를 진행한다.
메모 내용을 이렇게 옮겨 적어 보니, 아주 어정쩡한 내용으로 작성됐다.
파일 관리 및 선언에 대한 내용과 함께 클래스에 대한 설명, 변수 복사와 관련된 내용이 교육된 거 같은데 정리된 내용으로는 아주 부실해 보인다.
클래스에 대한 내용으로 메모가 작성되어 있다.
클래스 선언은 header로 뺄 수 있다.
클래스 함수는 선언과 함수가 같이 관리 되어야 한다.
클래스. 멤버 함수 선언 멤버 함수 작성을 여러 파일에 나누어 작성할 수 있다.
- 클래스 본체는 header에 멤버 함수 내용은 cpp에 분리해 관리
얇은 복사
- 클래스는 객체 간 기본 대입 연산자(=)를 지원한다.
- 지원되는 연산자로 객체 간 정보를 대입하는 행위를 의미한다.
- 단, 동적 할당한 포인터 변수의 경우 문제가 생긴다. (메모리 누수)
- 생성자, 소멸자를 이용해 동적 할당의 선언과 해제를 관리해야 한다.
- 방지법
1) 멤버 변수에 동적할당을 안 쓴다.
2) 문법적 객체 간 복사를 방지한다.
깊은 복사
- 대입 연산자와 복사 생성자를 오버로딩 한다.
- 초기화 및 대입에 대한 연산자 오버로딩을 구현한다.
- 동적 할당할 개체 → 신규 개체로 1:1 값 복사를 진행한다.
메모 내용을 이렇게 옮겨 적어 보니, 아주 어정쩡한 내용으로 작성됐다.
파일 관리 및 선언에 대한 내용과 함께 클래스에 대한 설명, 변수 복사와 관련된 내용이 교육된 거 같은데 정리된 내용으로는 아주 부실해 보인다.
2019년 3월 28일 목요일
국비 교육 : 게임 프로그래밍 024일
24일 차 교육 내용 메모를 옮겨 적어 본다.
멤버 연산자와 연산자 오버로드에 대한 내용이 무지무지 간략히 작성되어 있다.
멤버 연산자
- 클래스의 연산을 위해 지원되지 않는 연산자를 제작할 수 있다.
연산자 오버로드
- 연산자로 지원하지 않는 멤버(클래스)의 연산을 위해 연산 기호 처리를 할 수 있도록 지원해 주는 함수 기능
여기까지가 메모 내용의 끝이다.
멤버 연산자를 제작해 클래스 변수들을 이용한 연산자 처리에 대한 내용이 강의 되지 않았나 생각 든다.
예를 들어 vector2 클래스를 제작하고 vector2 클래스 변수 간의 연산을 기호로 처리할 수 있도록 하는 프로그래밍을 하지 않았나 싶다.
멤버 연산자와 연산자 오버로드에 대한 내용이 무지무지 간략히 작성되어 있다.
멤버 연산자
- 클래스의 연산을 위해 지원되지 않는 연산자를 제작할 수 있다.
연산자 오버로드
- 연산자로 지원하지 않는 멤버(클래스)의 연산을 위해 연산 기호 처리를 할 수 있도록 지원해 주는 함수 기능
여기까지가 메모 내용의 끝이다.
멤버 연산자를 제작해 클래스 변수들을 이용한 연산자 처리에 대한 내용이 강의 되지 않았나 생각 든다.
예를 들어 vector2 클래스를 제작하고 vector2 클래스 변수 간의 연산을 기호로 처리할 수 있도록 하는 프로그래밍을 하지 않았나 싶다.
2019년 3월 27일 수요일
국비 교육 : 게임 프로그래밍 023일
23일 차 교육 내용 메모를 옮겨 본다.
클래스에 대한 내용이 메모로 작성되어 있다.
절차 지향 프로그래밍
- 위에서 아래로(절차식) 코드를 작성해 나간다.
개체 지향 프로그래밍
- 모든 데이터를 객체 단위로 처리하는 프로그래밍 방식
- 객체 : 데이터 + 기능
클래스 란.
- 사용자 정의 자료형
- 구조체의 확장형
- 데이터 + 기능
접근 제어 지정자
- private : 클래스 내부 접근
- protected : 상속한 클래스 접근
- public : 외부 사용 가능
this 포인터
- 멤버 함수 내에 존재한다.
- 호출한 변수의 주소를 저장하고 있는 상수 포인터
생성자 함수(생성자)
- 객체 생성 후 바로 자동으로 호출되는 함수
- 함수 오버로딩이 가능
- 반환 자료형이 없음
소멸자
- 객체가 소멸하기 직전에 자동 호출되는 함수
- 함수 오버로딩이 불가능
멤버 이니셜라이저
- 멤버변수 초기화 문법
- 일반 멤버 변수, const 상수 , 레퍼런스 변수
- 상속 관계에서의 부모의 생성자
- 자신의 다른 생성자(생성자 위임)
이상과 같이 기본적인 클래스의 선언 및 사용과 관련되어 필요한 문법적 내용이 작성되어있다.
클래스에 대한 내용이 메모로 작성되어 있다.
절차 지향 프로그래밍
- 위에서 아래로(절차식) 코드를 작성해 나간다.
개체 지향 프로그래밍
- 모든 데이터를 객체 단위로 처리하는 프로그래밍 방식
- 객체 : 데이터 + 기능
클래스 란.
- 사용자 정의 자료형
- 구조체의 확장형
- 데이터 + 기능
접근 제어 지정자
- private : 클래스 내부 접근
- protected : 상속한 클래스 접근
- public : 외부 사용 가능
this 포인터
- 멤버 함수 내에 존재한다.
- 호출한 변수의 주소를 저장하고 있는 상수 포인터
생성자 함수(생성자)
- 객체 생성 후 바로 자동으로 호출되는 함수
- 함수 오버로딩이 가능
- 반환 자료형이 없음
소멸자
- 객체가 소멸하기 직전에 자동 호출되는 함수
- 함수 오버로딩이 불가능
멤버 이니셜라이저
- 멤버변수 초기화 문법
- 일반 멤버 변수, const 상수 , 레퍼런스 변수
- 상속 관계에서의 부모의 생성자
- 자신의 다른 생성자(생성자 위임)
이상과 같이 기본적인 클래스의 선언 및 사용과 관련되어 필요한 문법적 내용이 작성되어있다.
국비 교육 : 게임 프로그래밍 022일
22일차 교육 시 작성된 메모를 작성해 본다.
표준 입출력과 파일 입출력에 대한 내용이 작성되어 있다.
표준 입출력
- cout → 출력 버퍼 → 모니터
- 키보드 → 입력 버퍼 → cin
- 이 때 버퍼를 stream 이라고 호칭한다.
파일 입출력
- 소스 코드 → 파일 버퍼 → 파일 : SAVE, 저장, 출력
- 파일 → 파일 버퍼 → 소스 코드 : LOAD, 불러오기, 입력
- 이 때 파일 버퍼를 fstream 이라 호칭 한다.
- #include<fstream> 을 포함
- ofstream 클래스 : 내보내는데 사용
- ifstream 클래스 : 들여오는데 사용
이런 입출력 구조를 가지고 Save/Load 되는 프로그램 작성 실습을 한 것으로 보인다.
이렇게 다시 정리해 보는데 교육 순서가 평범한 C++ 강의는 아닌 것 같다.
표준 입출력과 파일 입출력에 대한 내용이 작성되어 있다.
표준 입출력
- cout → 출력 버퍼 → 모니터
- 키보드 → 입력 버퍼 → cin
- 이 때 버퍼를 stream 이라고 호칭한다.
파일 입출력
- 소스 코드 → 파일 버퍼 → 파일 : SAVE, 저장, 출력
- 파일 → 파일 버퍼 → 소스 코드 : LOAD, 불러오기, 입력
- 이 때 파일 버퍼를 fstream 이라 호칭 한다.
- #include<fstream> 을 포함
- ofstream 클래스 : 내보내는데 사용
- ifstream 클래스 : 들여오는데 사용
이런 입출력 구조를 가지고 Save/Load 되는 프로그램 작성 실습을 한 것으로 보인다.
이렇게 다시 정리해 보는데 교육 순서가 평범한 C++ 강의는 아닌 것 같다.
국비 교육 : 게임 프로그래밍 021일
21일 차 교육 시 정리된 메모를 옮겨본다.
작성된 내용이 전처리기와 사용자 정의 타입에 관해서 설명되어 있다.
전처리기
- #if , #define 등에 대한 내용을 확인해 보도록 한다.
사용자 정의 타입
- struct { } , enum { } , union { } 등에 대한 내용을 확인해 보도록 한다.
구조체
- struct 이름 { }; 형태로 작성됨
- 패킹으로 인해 가장 큰 크기의 자료형으로 구조체의 크기가 선언된다.
- 이 때 사용되지 않은 빈 공간을 패딩 비트라 부른다.
이렇게 전처리기와 사용자 정의 타입에 대한 교육이 진행된 것 같다.
교육이 책에 작성된 내용 위주로 진행됐는지 메모 내용은 매우 적다.
작성된 내용이 전처리기와 사용자 정의 타입에 관해서 설명되어 있다.
전처리기
- #if , #define 등에 대한 내용을 확인해 보도록 한다.
사용자 정의 타입
- struct { } , enum { } , union { } 등에 대한 내용을 확인해 보도록 한다.
구조체
- struct 이름 { }; 형태로 작성됨
- 패킹으로 인해 가장 큰 크기의 자료형으로 구조체의 크기가 선언된다.
- 이 때 사용되지 않은 빈 공간을 패딩 비트라 부른다.
struct dataA
{
int index; ← 4 byte
double appValue; ← 8 byte
int count; ← 4 byte
};
struct dataB
{
int index; ← 4 byte
char rank; ← 1 byte (index의 남은 4 byte 영역으로 붙음)
double appValue; ← 8 byte
int count; ← 4 byte
};
dataA , dataB 구조체 모두 크기는 24 byte 다.이렇게 전처리기와 사용자 정의 타입에 대한 교육이 진행된 것 같다.
교육이 책에 작성된 내용 위주로 진행됐는지 메모 내용은 매우 적다.
2019년 3월 26일 화요일
국비 교육 : 게임 프로그래밍 020일
20일 차 교육 내용 메모를 옮겨본다.
저번 교육에 이어서 동적 할당에 대한 내용이 계속 교육되었다. 그리고 디버깅과 파일 분할 방식에 대한 내용이 교육되었다.
데이터를 정확히 제어하기 위해서는 소멸, 해제 등에 신경을 써야 한다.
동적 배열은 주소화 함께 길이 정보를 같이 알고 있기에 해제하면 관련된 메모리 영역이 초기화된다.
delete[] values;
values = nullptr;
항상 변수를 null로 초기화하는 습관을 들여야 한다.
버그
- 논리 오류 또는 코드적 오류
디버그
- 소스 코드의 버그를 찾는 행위
디버깅
- 디버그를 하는 행위
디버그 시작 → 단계별 코드 실행 → 중단점 BreakPoint
- VS에서 디버그의 라인별 실행은 F10을 주로 사용한다.
- F11은 내부정의까지 훑고 진행한다.
조사식
- VS에서 지정한 변수를 입력해서 디버깅 시 값을 확인할 수 있는 기능
파일 분할
- 여러 CPP 파일을 사용하는 것을 의미한다.
- 빌드하면 컴파일된 모든 파일은 1개의 파일로 합쳐진다.
- 컴파일되서 한자리에 모인 뒤 링킹을 진행한다.
- 이를 위해 전방선언(프로토타입)이 되어 있어야 한다.
전역 변수
- 두 파일에 동일한 전역 변수가 있을 경우 에러가 발생한다.
- 주 : 선언 , 부 : extern 선언의 방식으로 사용해야 한다.
정적 전역 변수는 해당 cpp 에서만 사용할 수 있다.
다른 cpp에서 선언해 사용할 수 없다.
전처리기(선행 처리기)
- 컴파일 이전에 실행되는 문법
- #이 붙어 선언
- 뒤에 ';'이 붙지 않음
- 한 줄에 하나의 전처리만 가능
- \기호를 사용해 하나의 전처리를 여러 줄에 선언하는 것이 가능
빌드 단계
- 코드 작성 → 컴파일 시작 → 전처리 → 컴파일 → 링킹 → 빌드
#include ○○○○
- < > 로 선언할 경우 지정된 VC++ 설정된 경로 기준
- " " 로 선언할 경우 현재 프로젝트의 경로를 기준
상대 경로
- 실행 파일이 있는 경로 기준
- data/abc.jpg
절대 경로
- 볼륨명(드라이브명)부터 시작하는 경로
- c:/data/abc.jpg
인텔리센스단축키 : ctrl + space bar
헤더 파일
- include를 하기 위한 목적 파일
- 함수 프로토타입을 정의
- define 이나 다른 전처리기를 모아둠
아마도 이날까지 한 개의 cpp 파일로 구현을 해왔고, 이를 헤더와 별개 cpp로 분할해 구현하는 방식이 교육된 것 같다.
저번 교육에 이어서 동적 할당에 대한 내용이 계속 교육되었다. 그리고 디버깅과 파일 분할 방식에 대한 내용이 교육되었다.
데이터를 정확히 제어하기 위해서는 소멸, 해제 등에 신경을 써야 한다.
동적 배열은 주소화 함께 길이 정보를 같이 알고 있기에 해제하면 관련된 메모리 영역이 초기화된다.
delete[] values;
values = nullptr;
항상 변수를 null로 초기화하는 습관을 들여야 한다.
버그
- 논리 오류 또는 코드적 오류
디버그
- 소스 코드의 버그를 찾는 행위
디버깅
- 디버그를 하는 행위
디버그 시작 → 단계별 코드 실행 → 중단점 BreakPoint
- VS에서 디버그의 라인별 실행은 F10을 주로 사용한다.
- F11은 내부정의까지 훑고 진행한다.
조사식
- VS에서 지정한 변수를 입력해서 디버깅 시 값을 확인할 수 있는 기능
파일 분할
- 여러 CPP 파일을 사용하는 것을 의미한다.
- 빌드하면 컴파일된 모든 파일은 1개의 파일로 합쳐진다.
- 컴파일되서 한자리에 모인 뒤 링킹을 진행한다.
- 이를 위해 전방선언(프로토타입)이 되어 있어야 한다.
전역 변수
- 두 파일에 동일한 전역 변수가 있을 경우 에러가 발생한다.
- 주 : 선언 , 부 : extern 선언의 방식으로 사용해야 한다.
정적 전역 변수는 해당 cpp 에서만 사용할 수 있다.
다른 cpp에서 선언해 사용할 수 없다.
전처리기(선행 처리기)
- 컴파일 이전에 실행되는 문법
- #이 붙어 선언
- 뒤에 ';'이 붙지 않음
- 한 줄에 하나의 전처리만 가능
- \기호를 사용해 하나의 전처리를 여러 줄에 선언하는 것이 가능
빌드 단계
- 코드 작성 → 컴파일 시작 → 전처리 → 컴파일 → 링킹 → 빌드
#include ○○○○
- < > 로 선언할 경우 지정된 VC++ 설정된 경로 기준
- " " 로 선언할 경우 현재 프로젝트의 경로를 기준
상대 경로
- 실행 파일이 있는 경로 기준
- data/abc.jpg
절대 경로
- 볼륨명(드라이브명)부터 시작하는 경로
- c:/data/abc.jpg
인텔리센스단축키 : ctrl + space bar
헤더 파일
- include를 하기 위한 목적 파일
- 함수 프로토타입을 정의
- define 이나 다른 전처리기를 모아둠
아마도 이날까지 한 개의 cpp 파일로 구현을 해왔고, 이를 헤더와 별개 cpp로 분할해 구현하는 방식이 교육된 것 같다.
피드 구독하기:
글 (Atom)
Unity - Firebase 연동 (Analytics, AdMob)
버전 : firebase_unity_sdk_6.5.0.zip 게임에서 통계 측정 및 광고 추적을 위해 Firebase 을 연동한다. 앞서 [Unity - GPGS 와 Admob 연동 및 배포 준비 작업] 연동 이후에 작업을 진행 한다. 유니...