공부 및 정리/프로그래밍 패턴

    GOF 프로그래밍 패턴 - 경량 패턴

    * 인스턴싱과 관련이 있는 패턴입니다. 예시) 위와 같이 똑같은 나무를 잔뜩 심을 거라고 가정해 봅시다. 나무 객체 데이터 수십, 수백개를 저장한다면 메모리가 터져버리고 말겁니다. class Tree { private: Mesh mesh; Texture leaves; //.... Vector position; }; 위는 일반적인 트리 클래스의 정의입니다. 그러나, 우리는 메시부터 텍스쳐 등의 내용은 모두 동일하고 나무의 위치, 회전 각도 정도만 차이가 있다는 사실을 알 수 있습니다. 이번에는 경량 패턴을 적용해보겠습니다. class Tree { private: Mesh *mesh;//공통 내용은 주소화 Texture *leaves; //.... Vector position; }; 공통 내용이 주소로 변하..

    GOF 프로그래밍 패턴 - 명령 패턴

    * 예를 들어, 어떤 키를 입력받았을 때 위와 같은 명령을 수행한다고 가정합니다. void InputHandler::handleInput() { if(isPressed(BUTTON_X) jump(); else if(isPressed(BUTTON_Y) fireGun(); else if(isPressed(BUTTON_A) swap_weapon(); else if(isPressed(BUTTON_B) lurch(); } 아주 단순하게 코드를 짜면 위와 같이 짤 수 있을 것입니다. 하지만, 사용자가 키설정 바꿀 수 있는 게임이라면 이렇게 코딩하면 안될 것입니다. 따라서, 다음처럼 코드를 바꿔봅시다. class Command { public: virtual void execute() = 0; }; //상속 clas..

    GOF - 싱글톤 패턴

    * 싱글톤은 대체로 득보다 실이 많은 편입니다. * 싱글톤의 장점 1. 런타임 때 초기화 됩니다. -> 사용하지 않으면 초기화하지 않습니다. 2. 어디서나 참조가 가능하기 때문에 매니저 타입 객체에 편리합니다. * 단점 1. 전역변수 : - 타인이 코드를 읽기 힘들게 합니다. - 커플링을 조장합니다. (순환 참조 등) - 멀티 스레딩에 아주 취약합니다. (교착 상태 발생 위험) 2. 느린 초기화 : - 게임에서 언제 초기화 될지 모른다는 것은 위험합니다. - 초기화 할 때 딜레이를 일으킬 수 있습니다. //꼭 싱글톤이 필요한가..? class World { private : World(); ~World(); private: static World* Instance = nullptr; public: sta..