본문 바로가기

Category

TED - 세상 위에 존재하는 게임 레이어 View Subtitles 클릭 후 Korean 더보기
Garbage Collection (가비지 컬렉션) 가비지 컬렉션Garbage Collection이란, 시스템에서 더 이상 사용하지 않는 동적 할당된 메모리 블럭 혹은 개체를 찾아 자동적으로 다시 사용 가능한 자원으로 회수하는 것을 말한다. 시스템에서 가비지 컬렉션을 수행하는 부분을 가비지 컬렉터Garbage Collector라고 하며, 최초의 가비지 컬렉터는 1958년에 존 매카시(John McCarthy)에 의해 리습(Lisp) 언어의 일부로 구현되었다. 일반적인 가비지 컬렉터 알고리즘(Algorithm)은 다음과 같이 동작한다. 1. 더 이상 프로그램에서 사용하지 않을 Object를 찾아낸다. 2. 해당 개체가 사용하는 리소스를 회수한다. 그러나 실제로 어떤 Object가 마지막으로 사용되었고, 따라서 더 이상 사용되지 않을 것이란 사실을 알아내기는.. 더보기
연결 리스트(Linked List) 연결 리스트의 종류 : 연결 리스트에는 단일 연결 리스트(singly-linked list), 이중 연결 리스트(doubly-linked list), 원형 연결 리스트(circularly-linked list) 이렇게 세가지 기본 유형이 있다. 단일 연결 리스트 : 단일 연결 리스트는 각각 다음 원소를 가리키는 next 포인터 또는 레퍼런스(연결 링크)가 들어있는 데이터 원소들로 구성된다. 리스트의 마지막 원소에는 빈 링크 또는 널 링크가 들어간다. 아래와 같이 구현 될 수 있겠다 typedef struct IntElement{ struct IntElement *next; int data; } intElement; next 포인터를 구조체나 클래스의 맨 앞 쪽에 넣어두면 그 원소에 어떤 데이터가 들어가든.. 더보기
토런트 사용법 - 따라만 하자!! 다운받기 토런트란? 비트토렌트(BitTorrent)는 P2P(peer-to-peer) 파일 전송 프로토콜의 이름이자 그것을 이용하는 응용 소프트웨어의 이름이다. 비트토런트를 이용하면 파일을 인터넷 상에 분산하여 저장하여 놓고 다수의 접속을 사용하여 여러 곳에서 동시에 파일을 가져오게 되어 전송 속도가 빨라진다. 비트토런트 프로토콜은 프로그래머 브램 코헨이 창안하였으며, 2001년 4월부터 설계되어 최초의 구현이 2001년 7월 2일 발표되였다. 현재는 코헨이 창립한 회사인 비트토런트 Inc.가 이것을 유지보수하고 있다. [1] 본래 비트토런트 프로그램은 분산 해시 테이블을 활용하여 파이썬으로 작성되었으며 오픈 소스 저작권하에서 배포되고 있다. 그 외에도 비트토런트 프로토콜과 호환되는 각종 비트토런트 클라이언트가 .. 더보기
STL - 변경 불가 시퀀스 알고리즘 변경불가 시퀀스 알고리즘은 대상 컨테이너를 직접 수정 할 수 없는 알고리즘입니다. 이러한 알고리즘에는 시퀀스를 검색하여 원하는 원소를 찾아내는 알고리즘은 find, 상등 여부를 검사하는 equal, 그리고 시퀀스에 담긴 원소의 원소 개수를 세는 count 같은 알고리즘 등이 있습니다. 일단 우리가 알아볼 변경불가 시퀀스 알고리즘에는 find, adjacent_find, find_if, count,count_if, for_each, mismatch, equal, search 이렇게 여러 알고리즘이 있는데, 여기 에서 언급된 변경불가 시퀀스들의 시간복잡도는 선형적입니다. (선형은 무엇인가? 아래 표를 한번 참고해 보시죠) find : 우선은 find 알고리즘에 관해서 알아 보겠습니다. find 알고리즘은 시.. 더보기
Irrlicht를 이용한 3D 슈팅게임 (Flight In Space) 1. 개발 환경 - CPU : Intel Core 2 Duo E6300 1.8GHz - RAM : 2GB - 그래픽 카드 : Geforce 7600GT - 운영체제 : Windows 7 Ultimate - 개발 툴 : Visual Studio 2010 2. 사용 엔진 및 라이브러리 - 3D 랜더링 : Irrlicht 1.71 - 소리 재생 : Irrkalng 1.3 3. 제작 기간 : 2010년 8월 10 ~ 2010년 8월 25일 4. 장르 : 3D 슈팅 게임 5. 조작키 - 화살표 방향키 : 유저 비행기 기체 이동 - A 키 : 미사일 발사 - S 키 : 폭탄 발사 - F9 키 : 체력 회복 - F8 키 : 초기 폭탄보유개수 재 탑재 6. 구조 ▷ 기본 구조 ▷ 사용 디자인 패턴  FSM : 유한상.. 더보기
항목 13. 자원 관리에는 객체가 그만! (shared_ptr, auto_ptr) #include using namespace std; class Widget{ public: Widget(){cout 더보기
항목 12. 객체의 모든 부분을 빠짐없이 복사하자. 우선 예를 통해서 왜 객체의 모든 부분을 빠짐없이 복사해야 하는지 그 이유를 알아 봅시다. #include using namespace std; class Customer{ char* name; public: Customer():name(0){} Customer(char * _name) { name = new char[strlen(_name) +1]; strcpy(name, _name); } Customer(const Customer& c) { name = new char[strlen(c.name) +1]; strcpy(name, c.name); } ~Customer(){delete[] name;} Customer& operator=(const Customer& c) { //자기대입을 위해 swap함수 .. 더보기
항목 11. operator=에서는 자기대입에 대한 처리가 빠지지 않도록 하자. 자기대입(self assignment) 자기대입(self assignment)이란, 어떤 객체가 자기 자신에 대해 대입 연산자를 적용하는 것을 말합니다. #include using namespace std; class Widget{}; void main() { Widget w; w = w; //자기대입 } 문제는 무엇인가? 같은 타입으로 만들어진 객체 여러 개를 참조자 혹은 포인터로 물어 놓고 동작하는 코드를 작성할 때는 같은 객체가 사용될 가능성을 고려하는 것이 일반적으로 바람직한 자세라고 할 수 있겠습니다. 사실, 같은 클래스 계통에서 만들어진 객체라 해도 굳이 똑같은 타입으로 선언할 필요까지는 없습니다. 파생 클래스 타입의 객체를 참조 하거나 가리키는 용도로 기본 클래스의 참조자나 포인터를 사용하면.. 더보기
항목 10. 대입 연산자는 *this의 참조자를 반환하게 하자. Effective C++의 이번 항목 내용은 관례(Convention)에 대한 이야기 입니다. C++의 대입연산은 여러 개가 사슬처럼 엮일 수 있는 성질을 갖고 있습니다. 아래와 같이 말입니다. int x,y,z; x = y = z = 15; 대입 연산이 가진 또 하나의 재미있는 특성은 바로 우측 연관(Right-associative) 연산이라는 점입니다. 즉, 위의 대입 연산 사슬은 다음과 같이 분석이 됩니다. x = (y = (z = 15))); 위 소스코드를 보면, 15가 z에 대입되고, 그 대입 연산의 결과가 y에 대입된후에, y에 대한 대입 연산의 결과가 x에 대입이 됩니다. 이렇게 대입 연산이 사슬처럼 엮일려면 대입 연산자가 좌변 인자에 대한 참조자를 반환하도록 구현되어 있기 때문일 것입니다... 더보기