3월, 2011의 게시물 표시

세상에나 D 언어가 실존하고 있었네요!?

이미지
이번에 회사에서 도서 구입 좀!? 하라고 해서 살 책들 리서칭 중 무려 Game Engine Gems1 권이 번역되서 예판중이더라구요. 바로 구입 리스트에 추가했는데요, 심심해서 책 제목으로 구글링을 해보고 류광님 번역 사이트에 가보고 놀랐습니다. 'The D Programming Language' 책의 번역이 이미 완료가 되었다고 하더군요!!


불과 몇년전에는 인터넷에서 D언어가 나올까요? 라는 식으로 토론이 벌어졌던 때도 있었습니다. B언어부터 시작해서 C, C++로 발전 했던 역사가 있기 때문이었죠. 제가 소식을 너무 늦게 접한 것도 없지않아 있는데요, D언어에 대해 구글링을 하니 역시나 2005년 정도부터 몇몇분들이 많이 언급들 하셨네요.

Computer Languages History 보기


이름에서 알 수 있듯이 C/C++의 후속인 것 같습니다. 그걸 증명이라도 하듯 C/C++ 하위 호환이 됩니다! 그 외에도 GC(가비지컬렉터) 기능도 추가 되었네요. 한마다리 C/C++의 강력함은 그대로 유지하고 C#이나 Java들 같은 최근 언어들의 트렌드를 가져와서 C/C++의 약점이었던 부분들을 해결 해놨다고 볼 수 있습니다. 드디어 C/C++에서 가려웠던 부분이 긁어진 것이죠.


C/C++ 하위 호환성 유지.언어 차원의 단위테스트, 연관배열, 배열쪼개기 지원.람다 지원.템플릿 강화.언어 차원의 병렬 프로그래밍.계약 프로그래밍.다중 서브타이핑.
간단히 D언어 기능에 대해 추가 해봤습니다. 저도 모르는 부분이 태반이라 자세한 것은 아래 참고 포스팅 3개를 확인해보시면 됩니다.
D언어 참고 포스팅 1 D언어 참고 포스팅 2 D언어 참고 포스팅 3


무려 D언어로 만든 게임도 있네요! 이름은 Titanion인데요 GP2X에 있던 노이즈2? 라는 슈팅게임 같네요. 무수히 많은 탄환이 나오는 무한탄막 슈팅게임입니다.
Titanion 다운받으러 가기

기존 C/C++은 게임이나 시스템 프로그래밍에 Java나 C#등에 비해 발군의 성능을 발휘하고 있죠. 다른 언어들 보단 저수…

클라이언트 게임 개발자가 게임 서버 프로그래밍도 해야 하는 길

구글링 중 우연치 않게 지인의 블로그가 검색이 되었고 거기서 괜찮은 글을 찾았습니다. 다름아닌 게임서버프로그래머가 되는 길이라는 제목의 포스팅인데요, 그에 대한 느끼고 생각한 것을 간단히 정리해 봅니다.

원문보기

일단 원문을 보고 간단히 정리 해보겠습니다. 서버이외에 클라이언트도 마찬가지겠지만 일단 사전 기초 공부( 20% ) + 신규 프로젝트 개발( 30% ) + OBT 이후 유지보수 서비스( 50% )라고 하셨는데 저도 동감합니다. 이는 기초 지식이 있어야 개발이 가능하고 그 개발했던 것이 잘 작동하는지 등에 대한 완성도를 높이기 위해서는 유지보수 서비스도 해봐야 만든 서버 모듈 또는 프레임워크가 검증이 되는 것이겠죠.

원문을 보고 느낀점을 뭐랄까 원문과는 살짝 다른... 게임 서버 프로그래머가 되는 길보다도 게임 서버 프로그래밍도 해야 하는 길이 제목에 더 맞을듯 싶어 저는 포스팅 제목을 그렇게 했습니다. 원문은 신입이 서버 프로그래머로 시작하는 것에 관한 것에 비해 제가 현재 처한 상황은 클라이언트 개발자에서 서버도 해야하는 상황이기 때문이죠. 이제 제목대로 제 입장에 대한 이야기를 풀어가고자 합니다.

현재 진행하는 프로젝트 상황이 그닥 좋지만은 않습니다. 서버 개발자 멘토도 없고 저 또한 서버 개발 관련 지식이 전무합니다. 단지 약간의 희망이 있다면 서버 엔진이 있다는 것 정도...

일단 저는 서버 엔진을 가지고 시작할 것이기 때문에 네트워크 기본지식을 건너뛰고 DB 관련 공부를 먼저 해볼까 합니다. 네트워크 관련 기본 지식을 알면 좋지만 모르고 써도 될만큼 엔진딴이 구현이 되어있으니까요.

하지만 엔진이 현재 2개가 컨텍이 되었는데, 엔진 선택에 있어서 또한 머리를 아프게 하네요. 클라이언트 개발자가 잠깐 보고 엔진을 선택하는게 과연 옳을지? 아니면 지인과 인맥을 통한 선택을 해야할지? 아주 그냥 딱!!하고 골라서 개발해 나갈지!? 머리 아프네요 ㅎ;

아무튼 이렇게 저렇게 해서 어느정도 캐릭터가 붙어 이동도 하고 공격도 하게 된다면, 컨텐츠도 붙게 된…

당신의 엔진을 뜨겁게 달궈라

이미지
당신이 가지고 있는 자동차 엔진을 뜨겁게 달구라는게 아닙니다 ^^; 마음속 꿈과 욕망의 엔진을 뜨겁게 달구라는 것이죠~

사실 이 책을 접했던 이유는 다름아닌 예전에도 그랬고 지금도? 마찬가지인 눈보라(블리자드) 에 팍! 파묻히고 싶은 마음에 눈보라 엔터테인먼트에 입사하신 분에 대한 이야기가 마냥 궁금해서 책을 사게 되었습니다. 사실 눈보라에 어떻게 입사하셨을까에 대한 것이 제일 궁금했습니다. 그런데 아이너리 하게도 눈보라는 저를 게임계로 이끌었던 서쪽나무(WestWood)와 적대? 까진 아니고 경쟁 업체였다죠. 지금은 뭐 눈보라가 훨씬 잘 나가지만요. 그래도 소실쩍엔 StarCraft거 나오기 전 WarCraft2 대회도 나가던 경험도 있고 뭐 그렇게 싫어하는 회사는 아니었습니다 ^^;

다시 책 이야기로 돌아와서 내용은 이렇습니다. 저자가 어렸을 적부터 눈보라에 입사하기까지의 삶에 대한 역경과 고뇌, 충고, 도전, 실패, 성공 등에 대한 이야기를 풀어나가고 있습니다. 마치 저자의 일기를 읽는다는 생각도 들 수 있는 그런 내용들이었습니다. 일단 자신의 경험을 바탕으로 이야기를 시작해서 챕터 마지막에 요점을 정리를 하고 있습니다. 경험과 요점들을 통해 읽는 독자로 하여금 어디로 가시라는 내비게이션 직선 안내 역활보다는 어떻게 하라는 방법을 제시해 줍니다. 이럴땐 이렇게 저럴땐 저렇게 말이죠. 이 모든게 다 고스란히 저자가 경험하고 느꼈던 것을 바탕으로 이야기를 풀어나가서 더 공감이 가는 부분들이 많습니다.

개인적으로 '하루에 1%씩은 1년에 3,778%' 챕터와 '쪼개 쓰고, 늘여 쓰고, 밀도 있게 쓰기' 챕터가 기억에 남네요. 제목만 봐도 대충 무슨 내용인지 아시겠죠? 좋은~ 습관에 관한 이야기였습니다.
반대로 딱하나 그닥 제 생각과는 다른 챕터도 있었는데요. '경험 못지않게 중요한 숫자' 바로 이 챕터입니다. 간단히 이 말을 인용하면 되겠는데요, '행복은 성적순이 아니잖아요?' 다들 아시는 말이죠? …

error LNK2001: "public: virtual void __thiscall a::b::FrameMove(void)" (?FrameMove@b@a@@UAEXXZ) 외부 기호를 확인할 수 없습니다.

컴파일 에러와 마찬가지로 귀찮은 녀석이 링크에러죠.

error LNK2001: "public: virtual void __thiscall a::b::FrameMove(void)" (?FrameMove@b@a@@UAEXXZ) 외부 기호를 확인할 수 없습니다.

위와 같은 에러는 다른 모듈에 있는 b라는 녀석의 멤버 함수가 선언은 되어있지만 정의가 안 되어있을 때 발생하는 에러입니다.

선언이 잘 못이면 h파일에서 선언을 지우시고 정의를 안했다면 cpp에 함수 정의를 하면 되겠습니다.

error C2259: 'x::x' : 추상 클래스를 인스턴스화할 수 없습니다.

error C2259: 'x::x' : 추상 클래스를 인스턴스화할 수 없습니다.
1>        다음 멤버가 원인입니다.
1>        'void a::a::FrameMove(void)' : abstract입니다.
'a::a::FrameMove' 선언을 참조하십시오.

이런 에러의 경우 부모의 메소드 선언이 가상함수로 되어 있을 때 발생합니다.
virtual void FrameMove() = 0;
위처럼 말이죠. 보통 자식에게 선언과 정의를 강제 할때 가상함수를 쓰는데요, 자식 클레스가 해당 가상 함수를 선언하지 않아 발생하는 에러입니다.
해결은 자식 클래스에 가상함수를 선언해 주면 됩니다.

warning C4150: 불완전한 형식 'x::x'에 대한 포인터를 삭제했습니다. 소멸자가 호출되지 않습니다.

delete x;
어떤 객체를 delete해주는데 있어서 위와 같은 warning가 뜬다면 해당 cpp에서 삭제하는 객체의 정의를 모를 때 발생하는 것입니다.
해결은 간단합니다.
#include "x.h"
해주면 됩니다.