728x90
1. 싱글턴 패턴 정의
- 오직 한 개의 클래스 인스턴스만을 갖도록 보장하고, 이에 대한 전역적인 접근점을 제공하는 패턴.
2. 싱글턴 구현
class FileSystem
{
public:
static FileSystem& GetInstance()
{
static FileSystem* instance = new FileSystem();
return *instance;
}
private:
// 외부에서 생성자 호출을 허용하지 않기 위해
FileSystem() {}
};
- 오직 한 개의 클래스 인스턴스만 갖도록 보장한다.
- 전역 접근점 제공
- 사용할 때 초기화되므로, 사용하지 않는다면 인스턴스를 생성하지 않는다. ( 런타임 초기화 )
3. 싱글턴 상속을 이용한 예시
class FileSystem
{
public:
static FileSystem& GetInstance();
virtual ~FileSystem();
virtual char* ReadFile( char* InPath ) = 0;
virtual void WriteFile( char* InPath, char* InContents ) = 0;
protected:
FileSystem() {}
};
// Android FileSystem
class AndroidFileSystem : public FileSystem
{
virtual char* ReadFile( char* InPath ) override;
virtual void WriteFile( char* InPath, char* InContents) override;
};
// iOS FileSystem
class iOSFileSystem : public FileSystem
{
virtual char* ReadFile( char* InPath ) override;
virtual void WriteFile( char* InPath, char* InContents) override;
};
FileSystem& FileSystem::GetInstance()
{
#if PLATFORM == PLATFORM_ANDROID
static FileSystem* instance = new AndroidFileSystem();
#elif PLATFORM == PLATFORM_iOS
static FileSystem* instance = new iOSFileSystem();
#endif
return *instance;
}
- #if 전처리기 지시문을 이용해 컴파일러가 시스템에 맞는 파일 시스템 객체를 만들게 할 수 있다.
4. 싱글턴 문제점
- 전역 변수가 접근하는 곳을 모두 확인해야 하므로, 코드를 이해하기 어렵게 한다.
- 인스턴스에 대한 접근 통제가 없으므로, 커플링을 조장한다.
- 다른 스레드가 전역 변수에 어떤 작업을 하는지 모를 때가 있어 데드락이 생기기 쉽다.
반응형
'Design Pattern > 게임 프로그래밍 패턴' 카테고리의 다른 글
[Design Pattern] 게임 루프 패턴 (0) | 2022.07.31 |
---|---|
[Design Pattern] 상태 패턴 (0) | 2022.07.31 |
[Design Pattern] 프로토타입 패턴 (0) | 2022.07.30 |
[Design Pattern] 관찰자 패턴 (0) | 2022.07.30 |
[Design Pattern] 경량 패턴 (0) | 2022.07.29 |