목록분류 전체보기 (162)
Coding Memo
매개 변수 앞에 한정자를 붙여 전달 방식을 지정할 수 있다. ref 인수 할당 필요, 매개 변수를 다른 개체로 재할당 가능 in 인수 할당 필요, read only out 인수 할당이 필수가 아님, 대신 호출된 메서드에서는 이 매개 변수에 값을 반드시 할당 해야함 params: 매개 변수의 개수를 가변으로 지정 ex) int Add(params int[] nums) out은 Try~~(out ~~) 함수를 생각하면 이해하기 편할 것이다. ex) TryGetValue(), TryGetComponent() … ref는 C의 포인터나 참조로 생각하면 쉽다. out은 C언어 함수에서 값을 할당하는 인자로 생각하면 쉬울거 같은데 값 할당이 필수가 아닌 C와 달리 C#에서는 out 키워드가 있으면 반들시 값을 할당..
변수에 넣는 값을 리터럴이라고 한다. (= 메모리에 저장되는 값) int a = 1; 위 코드에서 리터럴은 1이 된다. C++ 에서의 여러가지 타입에 대한 리터럴 표기법 * 1를 표시한다고 했을 때, 형식 리터럴 int 1 unsigned int 1u long 1l unsigned long 1ul double 1.0 float 1.0f long double 1.0l 이 외에도 2진수, 8진수, 16진수 표기법이 각각 따로 있다. (2진수는 C++11 부터) 형식 접두사 예시 2진수 0b, 0B 0b1110 8진수 0 015 16진수 0x, 0X 0XAABB00 주의: 접두사 이후에 나오는 숫자나 문자는 당연히 해당 형식에 포함된 숫자나 문자여야 한다! (아니면 오류가 날 것이다.) Tip : 조금 긴 숫..
C++에서 자신이 사용할 클래스를 템플릿화 시켜서 코드를 작성했다고 하자. 다음과 같은 코드가 있다. (별 의미가 없는 클래스이다) #pragma once template class MyData { public: int size() { return _data.size(); } void addData(T t) { _data.push_back(t); } vector data() { return _data; } private: vector _data; }; 이 클래스를 main함수가 포함되어 있는 파일에 추가하거나 다음과 같이 헤더파일을 include하여 main에서 사용하면 문제가 없다. 오류 없이 '10'이 제대로 출력되고 프로그램이 종료될 것이다. #include "MyData.h" int main() ..
Rockiss님의 게임 서버 강의에서 학습한 내용과 몇몇 인터넷 검색을 통해 정리하였다. Select WSAAsyncSelect WSAEventSelect Overlapped (event) Overlapped (callback) IOCP Async/Sync IO Sync IO Sync IO Sync IO Async IO Async IO Async IO Select Pros - 윈도우 뿐만 아니라 Linux 계열에서도 사용이 가능함 (이식성 우수) Cons - 호환성이 높은 만큼 성능이 다른 모델 보다 좋지 않음 (매번 fd_set 등록 필요) - 한번에 64개의 소켓까지 사용 가능 (FD_SETSIZE = 64) Methods 1. fd_set 초기화 (FD_ZERO) 2. socket 등록 (FD_SE..
본 포스팅은 인프런에 등록되어 있는 Rockiss 님의 강의를 보고 간단하게 정리한 글입니다. 이전에 나왔던 Select, Overlapped(event), Overlapped(callback)들은 장점도 있었지만 단점도 많은 기능이었다. 일반 비동기 호출: 매우 보기 불편해보이는 중첩 무한 반복문 Select: FD_SET 당 최대 64개 한정, 매번 set을 만들어줘야함, 완전한 비동기 방식이 아님, 성능 좋지 않음 WSAEventSelect: 한번에 소켓 64개 제한 Overlapped(event): 소켓과 이벤트를 1:1로만 대응시킴, 한번에 소켓 64개 한정(overlapped) Overlapped(callback): 매번 Alertable Wait 상태를 만들어야되는 시스템적 부담(OS에 의해..
본 포스팅은 인프런에 등록되어 있는 Rockiss 님의 강의를 보고 간단하게 정리한 글입니다. 지난 번에는 WSASelect 모델을 이용해 Socket IO를 처리했었다. Select와 WSASelect는 결국 모두 Select를 활용하는 방법으로 동기 I/O 느낌이 강하게 든다. 이번에는 Overlapped에서 Event와 Callback 함수를 활용한 진짜 소켓 비동기 I/O 모델을 사용해볼 것이다. Overlapped I/O는 Asynchronous(비동기)처리의 Non-blocking 방식의 모델이다. 비동기+논블로킹의 방식은 callback 방식으로 호출을 하면서 callback의 형태로 다시 결과를 받는 방식이다. (Asynchronous) 물론, 이 때 다른 일을 처리할 수 있다.(non-b..
몇몇 게임을 하다보면, 그리고 게임을 만들려고하면 튜토리얼은 어떻게 구현하는 것일까에 대해 고민을 하게 된다. 내가 생각해낸 2가지 방법은 1. 튜토리얼 레벨을 완전히 따로 제작 2. 실제로 게임 플레이에 사용되는 실제 레벨에서 게임 진행 로직 일부 변경 및 튜토리얼용 UI 사용 이렇다. 3. (추가적으로) 게임 방법에 대한 튜토리얼을 따로 제작하지 않고 (간단한 게임의 경우) 게임 방법을 이미지로만 보여주는 방법(설명서 처럼?) 1번 방법은 특정 레벨이 복잡하거나 규모가 크게 구현이 되어있으면 조금 까다로울 수도 있다. 물론, 기존 레벨을 그대로 복사를 해놓고 일부만 변경해서 사용하는 방법도 있을 것이다. 아니면 게임을 즐기기 전에 매우 간단한 튜토리얼 레벨을 제작해도 될 것같다. 2번 방법은 다른 방..
본 포스팅은 인프런에 등록되어 있는 Rockiss 님의 강의를 보고 간단하게 정리한 글입니다. 지난번에 사용했던 select의 단점으로는 1. 최대 개수가 얼마 안됨(64) 2. 매번 사용할 때마다 리셋하여 새로운 set을 만들어주어야함 이 있었다. 이번에는 WSAEventSelect를 사용하여 두 번째 단점을 해결할 수 있다. 소켓과 관련된 네트워크 이벤트를 이벤트 객체를 통해 감지한다. 먼저 WSAEventSelect 함수를 살펴보자. int WSAAPI WSAEventSelect( [in] SOCKET s, [in] WSAEVENT hEventObject, [in] long lNetworkEvents ); s: 이벤트를 확인할 소켓 hEventObject: 이벤트 오브젝트 (WSAEVENT) lNe..