목록게임프로그래밍 (83)
bdfgdfg
다형성(Polymorphism) 객체지향 프로그래밍에서의 다형성은 간단히 말해 모습은 같은데 형태는 다른 것을 의미한다. 다형성을 뜻하는 영어 단어인 Polymorphism은 여러 개를 의미하는 'poly'와 모습 및 모양을 뜻하는 그리스어 'morphism'에서 온 단어로 여러 가지 형태라는 의미. C++에서의 다형성은 가상 함수(virtual, 함수, 연산자 오버 로딩, 템플릿 등이 있다. C++과 같은 객체지향 언어에서는 어떤 객체의 포인터 변수에서 자식(파생) 클래스 객체의 포인터 주소 값도 할당이 될 수 있다. 물론 그 반대도 가능하다. (다운 캐스팅, 업 캐스팅) 여기서 부모 클래스의 객체 타입(Type)에서 자식 클래스의 객체가 할당되어있다면 virtual 키워드(가상 함수)를 이용해 부모 ..
Queue Class - 큐 자료구조는 온라인 게임 서버에서 자주 쓰이는 자료구조. - Queue Class도 기본적으로 큐 알고리즘을 바탕으로 Monitor클래스를 상속받아 둘 이상의 쓰레드들이 동시에 접근하지 못하도록 보호. 딱히 어려운게 없으므로 바로 소스코드. #pragma once #include "Monitor.h" template class Queue : public Monitor { public: Queue(int MaxSize = MAX_QUEUESIZE); ~Queue(); public: // 큐에 데이터 삽입 bool PushQueue(T queueItem); // 큐의 크기 감소 void PopQueue(); // 큐가 비었는지 확인 bool IsEmpty(); //데이터 가져오기 ..
캡슐화 및 은닉성 - 캡슐화는 간단히 말해 관련된 데이터와 함수를 묶는 것. - 실제 구현 내용을 외부에 감추어 은닉한다. 절차 지향 언어인 C에서는 이것이 불가능한데 C에서의 구조체는 단순히 관련된 데이터들을 묶어주는 데이터 덩어리. 그렇기에 특정 함수와 관련된 데이터를 추적하기가 어렵다. 객체지향 언어에서는 이러한 캡슐화가 지원되는데 관련된 데이터와 함수들을 클래스 안에서 사용이 가능해짐에 따라 클래스라는 캡슐 속에서 기능들을 캡슐화하는 게 가능해진 것. 리모컨을 생각해보자. 우리는 간단하게 TV를 향해 리모컨을 들고 채널을 바꾸거나 소리를 높이고 낮출 수 있다. 리모컨 내부를 몰라도(은닉) 우리는 버튼 하나만 누르면(캡슐화) 원하는 대로 리모컨의 기능을 사용할 수 있는 것이다. -> 리모컨의 동작원..
Thread Class - Thread 클래스는 사용자가 쉽게 틱(Tick) 쓰레드를 관리하기 위해 만든다. - 틱 쓰레드는 정해진 시간마다 특정 연산을 하기 원할 때 쓰이는데 온라인 게임 서버에서는 꼭 필요한 기능. -> 일반적으로 좀비상태의 클라이언트의 연결처리를 할때 많이 쓰인다고 한다. -> 좀비상태는 사용자가 연결만 있고 아무것도 하지 않는 상태를 의미. -> 이 상태는 클라이언트와 서버간의 연결 상태가 좋지않거나, 특정 사용자가 악의적인 목적으로 이런 상태를 만들 수 있다. -> 그래서 보통 클라이언트에서는 일정 시간마다 패킷을 보내고 서버에서는 일정 시간안에 그 패킷이 도착하지 않으면 클라이언트와의 연결을 끊어버린다. (좀비상태 방지 가능) - 틱 쓰레드는 위의 역할뿐만 아니라 온라인 게임 ..