SlideShare une entreprise Scribd logo
1  sur  58
초보 게임프로그래머를 위한 C++ 돼지고기(구경원) 데브루키6.18
개요
참조
참조 ,[object Object]
참조에 수행되는 작업은 원본 개체에 직접 영향을 준다.int A = 10; int& B = A;	   //B는 A의 참조다 B = 300;		   //A와 B는 모두 300이다.
참조와 포인터 ,[object Object],참조를 통한 접근은 . 을 이용한다. ,[object Object],참조는 선언된 직후 반드시 초기화 해야한다. ,[object Object],참조는 처음 한번만 초기화 될 수 있다. ,[object Object],참조는 NUU이 될 수 없다.
참조 이용의 이점 ,[object Object],int A = *(Entity->GetCount()); int A = Entity.GetCount(); ,[object Object],참조는 선언과 동시에 초기화가 되여지기 때문에 포인터보다 잘못된 값을 가져올 확률이 낮다.
참조 이용의 시기 ,[object Object],const 참조를 이용한 전달 ,[object Object],포인터를 이용한 전달
초기화리스트
대입과 초기화 A::A(const 		 string& _STR) { 	AA = 0; 	STR = _STR; } class A { int      AA; 	string STR; 	A(); 	~A(); }; 초기화 된것이 아니라 대입 되어짐. 복사 대입 연사자 호출.
대입과 초기화 A::A(const 		 string& _STR) : AA(0) , STR(_STR) { } class A { int      AA; 	string STR; 	A(); 	~A(); }; 초기화 리스트를 사용한 초기화. 복사 생성자 호출.
사용 시기 ,[object Object],const 상수변수는 선언과 동시에 초기화가 이루어 져야 한다. ,[object Object],레퍼런스는 선언과 동시에 가르키는 대상이 있어야 한다. ,[object Object],포함된 개체의 생성자를 호출과 동시에 초기화 시켜주어야 할때.
인라인
인라인 함수 ,[object Object],변수에 직접 접근하는 것과 같은 효과를 제공 한다. 함수 호출을 제거하고 함수 코드를 추가하는 일은 컴파일러가 수행. 함수 호출과 관련된 성능 저하 문제가 완벽히 해결된다.
주의점 ,[object Object],인라인 될 함수는 헤더파일 내에 정의되어야 한다. 인라인 함수로 정의했다고 해서 100% 인라인이 된다는 보장이 없다. (컴파일러가 결정) ,[object Object],컴파일 시간의 증가. 소스파일의 크기가 증가. 프로그램 수행 속도의 저하.
사용시기 ,[object Object],초기 개발 단계에서는 인라인 함수의 사용을 피하자. 어느 정도의 개발이 진척이 있으면 자주 호출되는  몇줄안되는 함수에 대해서 인라인화 시킨다.
TIP 무분별한 인라인 함수의 사용은 오히려 독. 컴파일러가 계속해서 인라인 적용을 거부하 는 경우도 있다. 그러므로 필요에 따라서 인 라인 함수와 비슷한 매크로 함수를 사용하자.
Define토큰
#define 토큰 C/C++ 에선 #define 의 사용의 빈도를 자 제하도록 권고하고 있지만, 잘 사용할 경우  많은 코드상의 이득을 볼 수 있다.
#define 토큰종류 - ‘##’   분리되어 있는 2개의 토큰을 하나로 합쳐준다. ,[object Object],매크로 인자를 문자열로 만들어 준다.
## #define AA(n)     printf(“Game= %d”, Game##n) int Game9 = 1004; AA(9) Game = 1004;
# #define Game(x)  printf(#x “”) Game(WorldOfWarcraft); Printf(“WorldOfWarcraft”);
캐시메모리
[object Object],하루가 다르게 발전하고 있다. ,[object Object],CPU의 속도발전에 비해 상대적으로 발전이 느리다. 이러한 격차의 조율문제는 개발자의 몫!
[object Object],메모리 캐시 활용
캐시메모리 ,[object Object],자주 이용되는 데이터와 코드를 임시로 저장하는데 이용되는 작지만 매우 빠른 메모리 이다. 모든 데이터를 메모리 캐시에 보관 할 수 없다. - 좋은 상황 CPU가 필요로 하는 데이터가 캐시내에 보관되어 있는 상태. ,[object Object],캐시내에 데이터가 없어서 캐시미스 발생하며 메인 메모리가 준비될 때 까지 실행을 멈추고 기다리는 상태.
캐시라인 ,[object Object],독립적으로 들어오고 나갈 수 있는 가장 작은 메모리 단위. 대부분의 PC에서 32바이트 크기이다. (최대 128바이트) 데이터의 크기를 32바이트의 배수로 만들어 사용하면 효율적.
맴버 변수의 위치 ,[object Object],자주 이용되는 클래스 맴버 변수의 선언위치를 위쪽으로 옮기는 것만으로도 성능상의 이익을 얻을 수 있다. 가상함수 vatable를 가진다. Vatable 는 객체의 시작부분에 위치하는 하나의 포인터이다. 즉 개체의 처음 32바이트를 캐시에 올리는 효과를 가진다.
TIP 메모리 내의 맴버 변수 순서? 클래스 선언에서 정의된 순서와 일치.
플러그인
플러그인의 필요성 확장의 연속 확장 확장 확장 도구 확장 확장 확장 확장
플러그인의 로딩 - 런타임시 로딩 프로그램의 일부가 되어서는 안 된다. - Win32 가장 쉬운 Win32 함수를 이용한 DLL 로딩.
사용 방법 - extern “C” 컴파일러로 하여금 함수의 이름을 일반적인 C++ 방식으로 만들지 말고 C함수와 같이 꾸미지 않은 상태로 유지하도록 하는 기능이 있다. - _declspec(dllexport) 실행파일의 익스포트테이블에 함수를 넣어준다.
사용 방법 - 플러그인 로딩 HMODULE hDLL= ::LoadLibrary(“파일이름”); - 함수 사용 GetProcAddress(hDLL, “함수이름”); ,[object Object],FreeLibrary(“핸들명” );
단점 - 플러그인 간의 의존성에 문제점이 있다. ,[object Object],[object Object]
Find 시퀀스 내의 모든 항목 사이를 반복하면서  원하는 항목을 찾는 알고리즘. Find(Name.begin(), Name.end(), WantName)
TIP 시퀀스 내의 요소들이 정렬되어 있지 않거나 요소들 사이의 규칙성이 없는 상황에서만 알 고리즘을 사용하는 것이 좋다.
For_each 시퀀스 내의 각 요소에 대하여 특정한 함수를 실행 하는 알고리즘. for(itr = Entity.begin(); it != Entity.end(); ++itr) 	(*itr).Update(); For_each(Entity.begin(), Entity.end(), Update); For_each(Entity.begin(), Entity.end(), mem_fun_ref(::Update));
[object Object],많은 사람들이 쉽게 이해 할 수 있는 구조를 가지고 있다. ,[object Object],코드가 간결해지고 오류가 생길 여지가 적다. 다른 반복문에 비해서 반복루프시 속도가 빠르다.
TIP 우선 순회를 시작하면 멈출 수가 없다. 그러므로 컨테이너 전체를 순회해야 하는 상 황에서만 사용하자.
Count 특정한 조건에 맞는 요소만을 세는 기능이  있는 알고리즘. intnCount = count( Entity.begin(), Entity.end(), 0); intnCount = count_if( Entity.begin(), Entity.end(), EntityCheck());
TIP 편리한 기능을 제공하는 알고리즘 이기는 이 지만 많은 요소에 대한 검사는 성능상의 문 제를 가져올 수도 있다.
Include가드
#include 전처리기에 의해 처리된다. //Game.h #define MAX_PLAYER 10 //Game.cpp #include “Game.h” stPlayer  player[MAX_PLAYER ]; #define MAX_PLAYER 10 stPlayer  player[MAX_PLAYER ];
//GameState.h #include “Game.h” //Game.cpp #include “Game.h” #include “GameState.h” Player  player[MAX_PLAYER]; 쉽게 범할 수 있는 오류.
#include 가드 동일한 컴파일 단위에 같은 파일이 두 번 이 상 포함되는 것을 막아준다. //Game.h #ifndef GAME_H_ #define GAME_H_ //소스부분 #endif
#include 가드 동일한 파일을 두 번 이상 포함되는 것을 막 아주면서 파일을 두 번 이상 여는것도 막아 준다.
- #pragma once 컴파일 속도가 앞의 가드보다 빠르다. C++ 표준에 포함되여 있지 않다. 지원해주지 않는 컴파일러도 있다.
스마트포인터
스마트포인터 C++ 전문가들이 만든 차세대 메모리 관리자. boost 라이브러리에 포함되여 있다. std::auto_ptr//c++표준 boost::shared_ptr//앞으로 표준
메모리누수 Void main() { 	Game* pp = new Game; 	//수많은 예외발생 	//예> return; 존재. 	delete pp;	 } 프로젝트가 커질수록 수많은 예상외의 상황 이 발생하고, 그로 인해 메모리 누수가 발생할  수 밖에 없다.
auto_ptr #include <memory> 헤더안에포함되여 있는 스마트 포인터이다.  std::auto_ptr<Game> p(new Game);   자기 객체가 사라질때소멸자에서 자동으로 delete를 적용 시켜준다. 하지만 생성된 객체의 소유권은 오직 하나만 존재 한다.
shared_ptr 참조 카운팅 방식의 스마트포인터로 C++의  새로운 표준인 tr1에 포함되여있다. std::tr1::shared_ptr<Game> p(new Game);   std::tr1::shared_ptr<Game> p2(p);   자원의 참조 개수를 체크한다. 소유권이 여러 개 존재할 수 있다.
컴파일 속도
멀티코어 사용 VisualStudio 2005, 2008에서 컴파일과 정에는 멀티코어CPU를 지원하지 않는다. 프로젝트 속성 -> C/C++ ->명령줄-> 추가옵션 -> /MP 입력. 멀티코어CPU를 지원한다.
컴파일된 헤더 사용 전반적으로 사용되어지며, 소스수정이 크게 없는  헤더파일을 미리 컴파일 해두고, 다음에 빌드때마 다 다시 컴파일 하지 않고 사용 하는 방법. 프로젝트 설정. 프로젝트 속성 -> C/C++ ->미리컴파일된 헤더 ->미리컴파일 된 헤더 사용 CPP설정 CPP의 속성창에서 위와같이 설정. 컴파일 속도 증가.
증분링크 사용 Obj파일을 합치는 과정에서 메모리배치, 함수 순 서, 코드, 데이터영역 등을 계산하는 시간이 포함 되여 있다. 그래서 매번 수정된 것만을 재계산 하 게 하는 방법이다. 프로젝트 속성->링커->일반 ->증분링크사용 링크속도 증가.
끝

Contenu connexe

Tendances

[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기CONNECT FOUNDATION
 
Node.js 팀 스터디 발표자료.
Node.js 팀 스터디 발표자료.Node.js 팀 스터디 발표자료.
Node.js 팀 스터디 발표자료.SeungWoo Lee
 
Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012Daum DNA
 
Beejei node.js & web service
Beejei   node.js & web serviceBeejei   node.js & web service
Beejei node.js & web serviceBumjin Kim
 
[부스트캠프 Tech Talk] 이정현_Github Workflow 활용하기
[부스트캠프 Tech Talk] 이정현_Github Workflow 활용하기[부스트캠프 Tech Talk] 이정현_Github Workflow 활용하기
[부스트캠프 Tech Talk] 이정현_Github Workflow 활용하기CONNECT FOUNDATION
 
Ryan Dahl의 Node.js 소개 동영상 해설 by doortts
Ryan Dahl의 Node.js 소개 동영상 해설 by doorttsRyan Dahl의 Node.js 소개 동영상 해설 by doortts
Ryan Dahl의 Node.js 소개 동영상 해설 by doorttsSuwon Chae
 
Leadweb Nodejs
Leadweb NodejsLeadweb Nodejs
Leadweb Nodejs근호 최
 
[120316] node.js 프로그래밍 5장
[120316] node.js 프로그래밍 5장[120316] node.js 프로그래밍 5장
[120316] node.js 프로그래밍 5장sung ki choi
 
Node.js + Websocket 삽질기
Node.js + Websocket 삽질기Node.js + Websocket 삽질기
Node.js + Websocket 삽질기Paprikhan
 
[DS Meetup] iPad로 가벼운 분석환경 구축해보기
[DS Meetup] iPad로 가벼운 분석환경 구축해보기[DS Meetup] iPad로 가벼운 분석환경 구축해보기
[DS Meetup] iPad로 가벼운 분석환경 구축해보기Minho Lee
 
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발흥배 최
 
Project anarchy로 3d 게임 만들기 part_2_vforge피하기
Project anarchy로 3d 게임 만들기 part_2_vforge피하기Project anarchy로 3d 게임 만들기 part_2_vforge피하기
Project anarchy로 3d 게임 만들기 part_2_vforge피하기Dong Chan Shin
 
온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기Seungjae Lee
 
Rb vs wp 로드타임 성능비교
Rb vs wp 로드타임 성능비교Rb vs wp 로드타임 성능비교
Rb vs wp 로드타임 성능비교Gitaek kwon
 
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계Sungkyun Kim
 
C++ GUI 라이브러리 소개: Qt & Nana
C++ GUI 라이브러리 소개: Qt & NanaC++ GUI 라이브러리 소개: Qt & Nana
C++ GUI 라이브러리 소개: Qt & NanaLazy Ahasil
 

Tendances (20)

[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
 
Node.js in Flitto
Node.js in FlittoNode.js in Flitto
Node.js in Flitto
 
Node.js 팀 스터디 발표자료.
Node.js 팀 스터디 발표자료.Node.js 팀 스터디 발표자료.
Node.js 팀 스터디 발표자료.
 
Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012
 
Beejei node.js & web service
Beejei   node.js & web serviceBeejei   node.js & web service
Beejei node.js & web service
 
[부스트캠프 Tech Talk] 이정현_Github Workflow 활용하기
[부스트캠프 Tech Talk] 이정현_Github Workflow 활용하기[부스트캠프 Tech Talk] 이정현_Github Workflow 활용하기
[부스트캠프 Tech Talk] 이정현_Github Workflow 활용하기
 
Ryan Dahl의 Node.js 소개 동영상 해설 by doortts
Ryan Dahl의 Node.js 소개 동영상 해설 by doorttsRyan Dahl의 Node.js 소개 동영상 해설 by doortts
Ryan Dahl의 Node.js 소개 동영상 해설 by doortts
 
Leadweb Nodejs
Leadweb NodejsLeadweb Nodejs
Leadweb Nodejs
 
[120316] node.js 프로그래밍 5장
[120316] node.js 프로그래밍 5장[120316] node.js 프로그래밍 5장
[120316] node.js 프로그래밍 5장
 
Node.js + Websocket 삽질기
Node.js + Websocket 삽질기Node.js + Websocket 삽질기
Node.js + Websocket 삽질기
 
Ninja
NinjaNinja
Ninja
 
[DS Meetup] iPad로 가벼운 분석환경 구축해보기
[DS Meetup] iPad로 가벼운 분석환경 구축해보기[DS Meetup] iPad로 가벼운 분석환경 구축해보기
[DS Meetup] iPad로 가벼운 분석환경 구축해보기
 
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
 
Project anarchy로 3d 게임 만들기 part_2_vforge피하기
Project anarchy로 3d 게임 만들기 part_2_vforge피하기Project anarchy로 3d 게임 만들기 part_2_vforge피하기
Project anarchy로 3d 게임 만들기 part_2_vforge피하기
 
Node.js intro
Node.js introNode.js intro
Node.js intro
 
온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기
 
Node.js at OKJSP
Node.js at OKJSPNode.js at OKJSP
Node.js at OKJSP
 
Rb vs wp 로드타임 성능비교
Rb vs wp 로드타임 성능비교Rb vs wp 로드타임 성능비교
Rb vs wp 로드타임 성능비교
 
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
 
C++ GUI 라이브러리 소개: Qt & Nana
C++ GUI 라이브러리 소개: Qt & NanaC++ GUI 라이브러리 소개: Qt & Nana
C++ GUI 라이브러리 소개: Qt & Nana
 

En vedette

게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법Chris Ohk
 
상속 관련 이것저것
상속 관련 이것저것상속 관련 이것저것
상속 관련 이것저것EG Lim
 
[Gpg2권]4.7 인쇄해상도의 스크린샷 만들기
[Gpg2권]4.7 인쇄해상도의 스크린샷 만들기[Gpg2권]4.7 인쇄해상도의 스크린샷 만들기
[Gpg2권]4.7 인쇄해상도의 스크린샷 만들기KyeongWon Koo
 
[페차쿠차] 3월 19일 아이디어에 미쳐보자!
[페차쿠차] 3월 19일 아이디어에 미쳐보자![페차쿠차] 3월 19일 아이디어에 미쳐보자!
[페차쿠차] 3월 19일 아이디어에 미쳐보자!KyeongWon Koo
 
[Gpg2권 구경원] 3.1 ai전략
[Gpg2권 구경원] 3.1 ai전략[Gpg2권 구경원] 3.1 ai전략
[Gpg2권 구경원] 3.1 ai전략KyeongWon Koo
 
제5장 스태틱 메쉬
제5장 스태틱 메쉬제5장 스태틱 메쉬
제5장 스태틱 메쉬KyeongWon Koo
 
선형연립방정식 가우스소거법
선형연립방정식 가우스소거법선형연립방정식 가우스소거법
선형연립방정식 가우스소거법KyeongWon Koo
 
세션 하이재킹
세션 하이재킹세션 하이재킹
세션 하이재킹Yu Yongwoo
 
[Gpg2권 구경원] 3.4 rts 게임의 명령 큐잉을 위한 기반 구조
[Gpg2권 구경원] 3.4 rts 게임의 명령 큐잉을 위한 기반 구조[Gpg2권 구경원] 3.4 rts 게임의 명령 큐잉을 위한 기반 구조
[Gpg2권 구경원] 3.4 rts 게임의 명령 큐잉을 위한 기반 구조KyeongWon Koo
 
NDC14 창업을결정하기전3가지자기검증
NDC14 창업을결정하기전3가지자기검증NDC14 창업을결정하기전3가지자기검증
NDC14 창업을결정하기전3가지자기검증Byunglim Park
 
NDC2014 코인박스@NDC 치킨럽포스트모템
NDC2014 코인박스@NDC 치킨럽포스트모템NDC2014 코인박스@NDC 치킨럽포스트모템
NDC2014 코인박스@NDC 치킨럽포스트모템gon
 
역동적인 애니메이션 Ik
역동적인 애니메이션 Ik역동적인 애니메이션 Ik
역동적인 애니메이션 IkKyeongWon Koo
 
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기Miyu Park
 
[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬KyeongWon Koo
 
NDC 2014) 별바람의 기묘한 모험 1991-2014
NDC 2014) 별바람의 기묘한 모험 1991-2014NDC 2014) 별바람의 기묘한 모험 1991-2014
NDC 2014) 별바람의 기묘한 모험 1991-2014KwangSam Kim
 
C언어 종결 세미나 1
C언어 종결 세미나 1C언어 종결 세미나 1
C언어 종결 세미나 1Jong Hyuck Lim
 
[NDC 14] '미쿠미쿠하게 해줄게' - MMD MV 제작 사례와 매력적인 캐릭터 애니메이션
[NDC 14] '미쿠미쿠하게 해줄게' - MMD MV 제작 사례와 매력적인 캐릭터 애니메이션[NDC 14] '미쿠미쿠하게 해줄게' - MMD MV 제작 사례와 매력적인 캐릭터 애니메이션
[NDC 14] '미쿠미쿠하게 해줄게' - MMD MV 제작 사례와 매력적인 캐릭터 애니메이션Nexon Korea
 
[NDC14] A Mass of Dead 스팀 입성 성공기
[NDC14] A Mass of Dead 스팀 입성 성공기[NDC14] A Mass of Dead 스팀 입성 성공기
[NDC14] A Mass of Dead 스팀 입성 성공기Mingu Heo
 

En vedette (20)

게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법
 
상속 관련 이것저것
상속 관련 이것저것상속 관련 이것저것
상속 관련 이것저것
 
[Gpg2권]4.7 인쇄해상도의 스크린샷 만들기
[Gpg2권]4.7 인쇄해상도의 스크린샷 만들기[Gpg2권]4.7 인쇄해상도의 스크린샷 만들기
[Gpg2권]4.7 인쇄해상도의 스크린샷 만들기
 
[페차쿠차] 3월 19일 아이디어에 미쳐보자!
[페차쿠차] 3월 19일 아이디어에 미쳐보자![페차쿠차] 3월 19일 아이디어에 미쳐보자!
[페차쿠차] 3월 19일 아이디어에 미쳐보자!
 
[Gpg2권 구경원] 3.1 ai전략
[Gpg2권 구경원] 3.1 ai전략[Gpg2권 구경원] 3.1 ai전략
[Gpg2권 구경원] 3.1 ai전략
 
[데브루키] FOG
[데브루키] FOG[데브루키] FOG
[데브루키] FOG
 
제5장 스태틱 메쉬
제5장 스태틱 메쉬제5장 스태틱 메쉬
제5장 스태틱 메쉬
 
선형연립방정식 가우스소거법
선형연립방정식 가우스소거법선형연립방정식 가우스소거법
선형연립방정식 가우스소거법
 
세션 하이재킹
세션 하이재킹세션 하이재킹
세션 하이재킹
 
[Gpg2권 구경원] 3.4 rts 게임의 명령 큐잉을 위한 기반 구조
[Gpg2권 구경원] 3.4 rts 게임의 명령 큐잉을 위한 기반 구조[Gpg2권 구경원] 3.4 rts 게임의 명령 큐잉을 위한 기반 구조
[Gpg2권 구경원] 3.4 rts 게임의 명령 큐잉을 위한 기반 구조
 
NDC14 창업을결정하기전3가지자기검증
NDC14 창업을결정하기전3가지자기검증NDC14 창업을결정하기전3가지자기검증
NDC14 창업을결정하기전3가지자기검증
 
NDC2014 코인박스@NDC 치킨럽포스트모템
NDC2014 코인박스@NDC 치킨럽포스트모템NDC2014 코인박스@NDC 치킨럽포스트모템
NDC2014 코인박스@NDC 치킨럽포스트모템
 
역동적인 애니메이션 Ik
역동적인 애니메이션 Ik역동적인 애니메이션 Ik
역동적인 애니메이션 Ik
 
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
 
[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬
 
NDC 2014) 별바람의 기묘한 모험 1991-2014
NDC 2014) 별바람의 기묘한 모험 1991-2014NDC 2014) 별바람의 기묘한 모험 1991-2014
NDC 2014) 별바람의 기묘한 모험 1991-2014
 
PHP 기초 문법
PHP 기초 문법PHP 기초 문법
PHP 기초 문법
 
C언어 종결 세미나 1
C언어 종결 세미나 1C언어 종결 세미나 1
C언어 종결 세미나 1
 
[NDC 14] '미쿠미쿠하게 해줄게' - MMD MV 제작 사례와 매력적인 캐릭터 애니메이션
[NDC 14] '미쿠미쿠하게 해줄게' - MMD MV 제작 사례와 매력적인 캐릭터 애니메이션[NDC 14] '미쿠미쿠하게 해줄게' - MMD MV 제작 사례와 매력적인 캐릭터 애니메이션
[NDC 14] '미쿠미쿠하게 해줄게' - MMD MV 제작 사례와 매력적인 캐릭터 애니메이션
 
[NDC14] A Mass of Dead 스팀 입성 성공기
[NDC14] A Mass of Dead 스팀 입성 성공기[NDC14] A Mass of Dead 스팀 입성 성공기
[NDC14] A Mass of Dead 스팀 입성 성공기
 

Similaire à [0618구경원]초보 게임프로그래머를 위한 c++

카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.Ryan Park
 
About Visual C++ 10
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10흥배 최
 
당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니Lusain Kim
 
ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자Sewon Ann
 
Effective C++ Chapter 1 Summary
Effective C++ Chapter 1 SummaryEffective C++ Chapter 1 Summary
Effective C++ Chapter 1 SummarySeungYeonChoi10
 
Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1Dong Chan Shin
 
Effective c++ 1~8장
Effective c++ 1~8장 Effective c++ 1~8장
Effective c++ 1~8장 Shin heemin
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심흥배 최
 
빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)YEONG-CHEON YOU
 
Boost 라이브리와 C++11
Boost 라이브리와 C++11Boost 라이브리와 C++11
Boost 라이브리와 C++11OnGameServer
 
3D 모델러 ADDIN 개발과정 요약
3D 모델러 ADDIN 개발과정 요약3D 모델러 ADDIN 개발과정 요약
3D 모델러 ADDIN 개발과정 요약Tae wook kang
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Ryan Park
 
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기Chanwoong Kim
 
김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법성훈 김
 
Effective c++ Chapter1,2
Effective c++ Chapter1,2Effective c++ Chapter1,2
Effective c++ Chapter1,2문익 장
 
Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Nam Hyeonuk
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기Jaeseung Ha
 
오픈세미나 플러그인만들기(한번더)
오픈세미나 플러그인만들기(한번더)오픈세미나 플러그인만들기(한번더)
오픈세미나 플러그인만들기(한번더)승훈 오
 
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법복연 이
 

Similaire à [0618구경원]초보 게임프로그래머를 위한 c++ (20)

카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.
 
About Visual C++ 10
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10
 
당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니
 
ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자
 
Effective C++ Chapter 1 Summary
Effective C++ Chapter 1 SummaryEffective C++ Chapter 1 Summary
Effective C++ Chapter 1 Summary
 
Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1
 
Effective c++ 1~8장
Effective c++ 1~8장 Effective c++ 1~8장
Effective c++ 1~8장
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심
 
빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)
 
Boost 라이브리와 C++11
Boost 라이브리와 C++11Boost 라이브리와 C++11
Boost 라이브리와 C++11
 
3D 모델러 ADDIN 개발과정 요약
3D 모델러 ADDIN 개발과정 요약3D 모델러 ADDIN 개발과정 요약
3D 모델러 ADDIN 개발과정 요약
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005
 
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
 
김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법
 
Effective c++ Chapter1,2
Effective c++ Chapter1,2Effective c++ Chapter1,2
Effective c++ Chapter1,2
 
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
 
Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
 
오픈세미나 플러그인만들기(한번더)
오픈세미나 플러그인만들기(한번더)오픈세미나 플러그인만들기(한번더)
오픈세미나 플러그인만들기(한번더)
 
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
 

[0618구경원]초보 게임프로그래머를 위한 c++

  • 1. 초보 게임프로그래머를 위한 C++ 돼지고기(구경원) 데브루키6.18
  • 4.
  • 5. 참조에 수행되는 작업은 원본 개체에 직접 영향을 준다.int A = 10; int& B = A; //B는 A의 참조다 B = 300; //A와 B는 모두 300이다.
  • 6.
  • 7.
  • 8.
  • 10. 대입과 초기화 A::A(const string& _STR) { AA = 0; STR = _STR; } class A { int AA; string STR; A(); ~A(); }; 초기화 된것이 아니라 대입 되어짐. 복사 대입 연사자 호출.
  • 11. 대입과 초기화 A::A(const string& _STR) : AA(0) , STR(_STR) { } class A { int AA; string STR; A(); ~A(); }; 초기화 리스트를 사용한 초기화. 복사 생성자 호출.
  • 12.
  • 14.
  • 15.
  • 16.
  • 17. TIP 무분별한 인라인 함수의 사용은 오히려 독. 컴파일러가 계속해서 인라인 적용을 거부하 는 경우도 있다. 그러므로 필요에 따라서 인 라인 함수와 비슷한 매크로 함수를 사용하자.
  • 19. #define 토큰 C/C++ 에선 #define 의 사용의 빈도를 자 제하도록 권고하고 있지만, 잘 사용할 경우 많은 코드상의 이득을 볼 수 있다.
  • 20.
  • 21. ## #define AA(n) printf(“Game= %d”, Game##n) int Game9 = 1004; AA(9) Game = 1004;
  • 22. # #define Game(x) printf(#x “”) Game(WorldOfWarcraft); Printf(“WorldOfWarcraft”);
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29. TIP 메모리 내의 맴버 변수 순서? 클래스 선언에서 정의된 순서와 일치.
  • 31. 플러그인의 필요성 확장의 연속 확장 확장 확장 도구 확장 확장 확장 확장
  • 32. 플러그인의 로딩 - 런타임시 로딩 프로그램의 일부가 되어서는 안 된다. - Win32 가장 쉬운 Win32 함수를 이용한 DLL 로딩.
  • 33. 사용 방법 - extern “C” 컴파일러로 하여금 함수의 이름을 일반적인 C++ 방식으로 만들지 말고 C함수와 같이 꾸미지 않은 상태로 유지하도록 하는 기능이 있다. - _declspec(dllexport) 실행파일의 익스포트테이블에 함수를 넣어준다.
  • 34.
  • 35.
  • 36. Find 시퀀스 내의 모든 항목 사이를 반복하면서 원하는 항목을 찾는 알고리즘. Find(Name.begin(), Name.end(), WantName)
  • 37. TIP 시퀀스 내의 요소들이 정렬되어 있지 않거나 요소들 사이의 규칙성이 없는 상황에서만 알 고리즘을 사용하는 것이 좋다.
  • 38. For_each 시퀀스 내의 각 요소에 대하여 특정한 함수를 실행 하는 알고리즘. for(itr = Entity.begin(); it != Entity.end(); ++itr) (*itr).Update(); For_each(Entity.begin(), Entity.end(), Update); For_each(Entity.begin(), Entity.end(), mem_fun_ref(::Update));
  • 39.
  • 40. TIP 우선 순회를 시작하면 멈출 수가 없다. 그러므로 컨테이너 전체를 순회해야 하는 상 황에서만 사용하자.
  • 41. Count 특정한 조건에 맞는 요소만을 세는 기능이 있는 알고리즘. intnCount = count( Entity.begin(), Entity.end(), 0); intnCount = count_if( Entity.begin(), Entity.end(), EntityCheck());
  • 42. TIP 편리한 기능을 제공하는 알고리즘 이기는 이 지만 많은 요소에 대한 검사는 성능상의 문 제를 가져올 수도 있다.
  • 44. #include 전처리기에 의해 처리된다. //Game.h #define MAX_PLAYER 10 //Game.cpp #include “Game.h” stPlayer player[MAX_PLAYER ]; #define MAX_PLAYER 10 stPlayer player[MAX_PLAYER ];
  • 45. //GameState.h #include “Game.h” //Game.cpp #include “Game.h” #include “GameState.h” Player player[MAX_PLAYER]; 쉽게 범할 수 있는 오류.
  • 46. #include 가드 동일한 컴파일 단위에 같은 파일이 두 번 이 상 포함되는 것을 막아준다. //Game.h #ifndef GAME_H_ #define GAME_H_ //소스부분 #endif
  • 47. #include 가드 동일한 파일을 두 번 이상 포함되는 것을 막 아주면서 파일을 두 번 이상 여는것도 막아 준다.
  • 48. - #pragma once 컴파일 속도가 앞의 가드보다 빠르다. C++ 표준에 포함되여 있지 않다. 지원해주지 않는 컴파일러도 있다.
  • 50. 스마트포인터 C++ 전문가들이 만든 차세대 메모리 관리자. boost 라이브러리에 포함되여 있다. std::auto_ptr//c++표준 boost::shared_ptr//앞으로 표준
  • 51. 메모리누수 Void main() { Game* pp = new Game; //수많은 예외발생 //예> return; 존재. delete pp; } 프로젝트가 커질수록 수많은 예상외의 상황 이 발생하고, 그로 인해 메모리 누수가 발생할 수 밖에 없다.
  • 52. auto_ptr #include <memory> 헤더안에포함되여 있는 스마트 포인터이다. std::auto_ptr<Game> p(new Game); 자기 객체가 사라질때소멸자에서 자동으로 delete를 적용 시켜준다. 하지만 생성된 객체의 소유권은 오직 하나만 존재 한다.
  • 53. shared_ptr 참조 카운팅 방식의 스마트포인터로 C++의 새로운 표준인 tr1에 포함되여있다. std::tr1::shared_ptr<Game> p(new Game); std::tr1::shared_ptr<Game> p2(p); 자원의 참조 개수를 체크한다. 소유권이 여러 개 존재할 수 있다.
  • 55. 멀티코어 사용 VisualStudio 2005, 2008에서 컴파일과 정에는 멀티코어CPU를 지원하지 않는다. 프로젝트 속성 -> C/C++ ->명령줄-> 추가옵션 -> /MP 입력. 멀티코어CPU를 지원한다.
  • 56. 컴파일된 헤더 사용 전반적으로 사용되어지며, 소스수정이 크게 없는 헤더파일을 미리 컴파일 해두고, 다음에 빌드때마 다 다시 컴파일 하지 않고 사용 하는 방법. 프로젝트 설정. 프로젝트 속성 -> C/C++ ->미리컴파일된 헤더 ->미리컴파일 된 헤더 사용 CPP설정 CPP의 속성창에서 위와같이 설정. 컴파일 속도 증가.
  • 57. 증분링크 사용 Obj파일을 합치는 과정에서 메모리배치, 함수 순 서, 코드, 데이터영역 등을 계산하는 시간이 포함 되여 있다. 그래서 매번 수정된 것만을 재계산 하 게 하는 방법이다. 프로젝트 속성->링커->일반 ->증분링크사용 링크속도 증가.
  • 58.