본문 바로가기

전체 글

(18)
유니티에서 async/await를 어떻게 쓰면 좋을까? async/await는 비동기? 병렬? C#의 async/await와 Task는 비동기를 표현한 것일까 병렬실행을 표현한 것일까? 이 점을 헷갈려하는 사람들이 아주 많다. 결론부터 말하면 Task는 비동기 작업을 표현하는 클래스이다. 그러나 병렬로 실행되기도 한다. 이 점 때문에 Task를 쓰면 멀티스레드를 사용하여 병렬 작업이 일어난다고 알고 있는 경우가 많다. 그러나 이것은 단순히 .NET에 포함된 Task의 구현이 스레드 풀을 사용하도록 되어 있어서 그렇기 때문이다. Task는 어디서 실행될까? await SomethiingAsync(); async Task SomethingAsync() { Console.WriteLine(Environment.CurrentManagedThreadId); await..
Singleton 패턴을 써야 할까? 들어가며.. 싱글턴 패턴은 항상 많은 의견이 나오는 주제이다. 디자인 패턴 중 가장 쉬운 패턴인 것도 있고 가장 사용빈도가 높은 패턴 중 하나이기도 하다. 또한 안티패턴이다 vs 하나의 패턴일 뿐이다 로 의견이 많이 갈리는 주제이기도 하다. 이 글에서는 약간 다른 방향으로 접근해보려 한다. 전역변수처럼 쓰이는 싱글턴 싱글턴을 간단하게 정의하면 인스턴스가 한개만 존재해야 하는 상황을 모델링한 것이다. 이걸 C#에서는 생성자를 private으로 숨겨서 직접 생성할 수 없게 하고 대신 정적 인스턴스 프로퍼티를 만들어서 접근하는 식으로 구현하곤 한다. // 흔히 사용하는 제네릭 부모 클래스 형태의 싱글턴 public class Singleton where T : class { private static Sing..
Unity에서의 실제 FSM 구현에 대해 들어가며.. 흔히 게임에서 캐릭터를 조종한다던가 할 일이 있을 때 가장 먼저 배우는 것이 유한 상태 기계, FSM이다. FSM에 대해서는 이미 매우 잘 알려져 있고 양질의 정보도 쉽게 접할 수 있으므로 이 글에서 FSM에 대한 상세한 설명은 생략한다. 하지만 FSM이라는 개념에 너무 매몰되어 생각하는 경우 오버엔지니어링이 잔뜩 된 좋지 못한 코드를 쓰는 경우가 종종 있다. 특히 AI의 구현을 FSM으로 구현하려고 할 경우 그렇게 될 가능성이 큰데, 이 글에선 그에 대해 이야기한다. "게임에서의" FSM과 실제 구현에서의 문제 그런데 사실 컴퓨터과학에서 말하는 FSM과 실제로 게임에서 일반적으로 구현하는 FSM은 약간의 차이가 있다. 컴퓨터과학에서 이야기하는 FSM이 어떤 알고리즘을 수학적으로 표현하는 모..