▶ Random
게임 프로그래밍을 할 때 일반적으로 랜덤성이 필요한 경우가 많다.
자주 사용하는 기능들은 공통된 기능을 가진 헤더파일에 선언하고 정의해 사용하는 것이 효율적이다.
◆ rand() 함수
random seed를 시가능로 설정해서 실행 할 때마다 다른 분포의 랜덤값을 만드는 방식.
난수의 범위: 0~0x7FFF
장점: 연산량이 랜덤 디바이스에 비해 낮다.
단점: 0~32767의 값을 리턴하므로 고른 분포의 값을 얻을 수 없다.
◆ 랜덤 디바이스
메르센 트위스터라는 유사난수 생성기를 이용해서 랜덤값을 만들어 낸다.
주기가 2^19937 - 1인 MT19937을 가장 많이 사용하며 64비트 수를 생성하는 MT19337 - 64도 사용된다.
장점: 난수의 범위가 보다 넓게 설정 할 수 있어 고른 분포의 값을 얻을 수 있다.
단점: 일반적으로 수학과 관련된 헤더 파일은 무겁기 때문에 결과의 중요도에 비해 자원을 너무 많이 사용할 수 있다.
▶ Design Pattern: Singleton
객체의 인스턴스가 오직 1개만 생성되는 패턴
장점:
1. 메모리 낭비 방지.
최초의 new 연산자를 통해서 고정된 메모리 영역을 사용하기 때문에.
2. 빠른 속도.
이미 생성된 인스턴스를 활용하므로.
3. 데이터 공유가 쉬움.
싱글톤 인스턴스가 전역으로 사용되는 인스턴스이기 때문에 다른 클래스의 인스턴스들이 접근하여 사용 할 수 있다.
단점:
1. 싱글톤 패턴을 구현하기 위한 코드가 많이 필요 할 수 있다.
2. 테스트의 어려움.
자원을 공유하고 있기 때문에 테스트가 격리된 환경에서 수행되려면 매번 인스턴스의 상태를 초기화 시켜 주어야 한다.
3. 의존 관계 상 클라이언트가 구체 클래스에 의존. (결합도가 올라간다.)
new 키워드를 직접 사용하여 클래스 안에서 객체를 생성하고 있으므로 SOLID 원칙 중 DIP를 위반하게 되고, OCP 원칙 또한 위반 할 가능성이 높다.
'WinAPI' 카테고리의 다른 글
KeyManager (0) | 2023.06.16 |
---|---|
객체 지향 4대 요소, 객체지향 5대 설계원칙, 가상함수 (0) | 2023.06.15 |
매크로 상수/함수, 한정자 (0) | 2023.06.13 |
PCH, Parsing, Character Set (0) | 2023.06.12 |
충돌 개념 (0) | 2023.06.10 |