2025/04/22 4

데이터지역성 패턴

이거는 캐시친화적이게 코드를 바꾸는 것인데예를 들어서 포인터로 이루어진 변수들을 일반 배열로 바꾸어서 캐시 미스를 최소화하는 것이다. 이런 방식으로 cpu 동작까지 계산해서 코드 성능을 끌어올리는 것인데 위의 예시로도 수십배가 빨라질 수 있다고 한다.하지만 이것도 오버엔지니어링 될 수 있기 때문에 언제 어떻게 쓸지를 고민해야한다. 고급 프로그래머로 갈길이 먼 것 같다.

서비스 중개자 패턴

이것 역시 모듈간 결합도를 낮춰주는 패턴이다. 싱글턴이랑 비슷한 부분이 많은데, 이 패턴은 다른 모듈에서 audio시스템 등을 들고 있지않고 싱글턴처럼 get함수를 이용해 접근하여 사용한다. 이 점에서는 상당히 비슷한데 이 서비스중개자는 예를들어서 audio라는 인터페이스를 상속하는 playerAudio를 만들고다른 모듈에서는 audio 인터페이스만 노출시킬수 있다. 그리고 인상깊었던 사용법은 로그기능이다.게임을 개발하다보면 로그기능은 반드시 필요한데 이 기능은 시스템별로 껐다켰다 할 수 있다.싱글턴이라면 함수를 두개만들거나 주석으로 일일이 처리해야하지만 audio를 상속받는 playerAudio 와 LogPlayerAudio를 만들어서 서비스 중개자 클래스에 갈아끼우면 된다. logPlayerAud..

이벤트 큐 패턴

이벤트 큐 패턴은 이벤트나 메세지를 즉각적으로 처리하지 않고 큐에 넣었다가 처리하는 방식이다.이 방식은 로직을 분리하여 모듈들을 디커플링하고 프레임 당 처리량을 제한할수도 있다. 정확히 어떻게 써야할지는 모르겠지만예시를 보면 사운드나 통신패킷 등에 사용하는 것 같다. 뭔가 한번에 트래픽이 폭주할때 이를 해결하기 위한 수단으로 쓰는것 같다.이런 문제가 발생했을 때 사용해봐야겠다.

컴포넌트 패턴

컴포넌트 패턴은 유니티에서 사용하고 그 패턴이다. 유니티에서 우리는 이미 만들어져 있는 여러가지 컴포넌트와 스크립트를 통해서 새로운 컴포넌트를 만든다.또한 getcomponent를 통해 다른 컴포넌트와 통신한다. 즉 유니티의 GameObject는 컴포넌트 패턴으로 만들어졌다. 이 패턴은 하나의 클래스의 크기가 아주 커지는 것을 방지하고 유지보수, 확장성을 모두 확보할 수 있게된다. 컨테이너 클래스는 컴포넌트 클래스의 포인터만 가지고 있으면서각 컴포넌트의 update만 실행시켜주면 된다. class Component{ virtual void update()=0;}class physicsComponent : Component{ virtual void update(){}}class renderComponen..