이론/일반 5

N번째 난수 값 얻어오기

문제 어떤 난수생성기가 있다고 가정하자. 이 난수 생성기로부터 N번째에 있는 난수를 얻고 싶다. 어떻게 해야 할까? 아니 애초에 위와 같은 상황은 무엇일까? 당신이 랜덤한 스테이지 A,B,C,D를 만든다고 가정하자. 한 스테이지는 1000개의 난수 시퀀스를 필요로 한다. 어떤 난수 생성기가 생성한 1001~2000번째의 난수를 이용해 A스테이지를 만들었다. 그리고 2001에서 3000까지의 난수를 이용해 B스테이지를 만들었다. 이때 B스테이지에 있던 유저가 다시 A스테이지로 돌아갔다고 하자. 아니면 4001에서 5000번째까지의 난수를 필요로 하는 D스테이지로 곧바로 들어간다면? 과거에 생성했던 난수 시퀀스를 어딘가에 저장해 둔다거나 혹은 0번째부터 다시 Next()를 호출하며 목표로 하는 시퀀스까지 도..

이론/일반 2023.06.18

클로저 (Closure)

클로저? 아래 프로그램의 add3, add5는 각각 넘겨받은 숫자에 3,5를 더해서 반환하는 함수이다. using System; public static class Prgoram { public static void Main(string[] args) { var add3 = Adder(3); var add5 = Adder(5); Console.WriteLine(add3(10)); //13을 출력 Console.WriteLine(add5(10)); //15를 출력 } public static Func Adder(int add) { return (int num) => { return num + add; }; } } add3, add5를 생성할 때, Adder메서드에 각각 3과 5를 넘겨주고 add3과 add..

이론/일반 2022.06.25

예외(Exception) 써야할까?

예외처리의 동작방식 우선 예외에는 대안이 있다. 바로 에러 코드를 함수에서 리턴하는 것이다. 즉, 예외를 쓰려면 에러 코드를 리턴하는 것보다 더 좋아야 한다. 그렇다면 예외가 어떻게 동작하는지 간단히 보자. void bar() { throw std::runtime_error("some exception"); } void foo() { bar(); } int main() { try { foo(); } catch(...) { } } 처음에 main함수에 대한 스택 프레임이 올라가고, 그다음 foo 스택 프레임이 올라가고, 그다음에 bar 함수에 대한 스택 프레임이 올라간다. bar함수에서 예외가 던져지면 exception 객체가 힙에 생성되고 bar함수의 스택 프레임은 스택에서 pop이 된다. 이어서 foo..

이론/일반 2022.06.19

멀티플레이 게임과 동기화

CAP 이론 개요 CAP 이론이란 분산 시스템 선택에 도움을 주는 정리이다. Consistency(일관성) : 시스템에 접근하는 누구나 같은 결과를 봄 Availablity(가용성) : 누구나 언제든지 시스템에 접근(읽기/쓰기) 가능 => lock 거는 일이 없다. Partition Tolerance (분할 용인) : 시스템을 분할할 수 있음 (병렬 처리, 멀티쓰레딩) 이며 CAP를 모두 충족하는 시스템은 없다는 것이 핵심이다. 멀티 플레이와 CAP 멀티플레이 게임은 기본적으로 'P'를 충족해야 한다고 볼 수 있다. 그러면 멀티플레이 동기화에 있어서 선택지는 두 개가 남는다. 'A'를 택할 것인지, 'C'를 택할것인지 멀티플레이의 동기화 방식 1. 비동기형 Clash of Clans 같은 게임이 해당된다..

이론/일반 2020.10.11