C++ 싱글톤 패턴과 Friend 키워드 예제 (싱글턴 응용)

C++ 싱글톤 패턴과 Friend 키워드 예제 (싱글턴 응용)


일반적으로 전역 변수는 쓰지 않는게 맞습니다. 게다가, 객체지향으로 넘어가면 전역 변수란 개념조차 사라집니다. 그래도, 상황에 따라 전역 변수의 개념과 비슷(?)한 무언가가 필요해지기 마련입니다.


그래서 주로 선택하는 것이 C++ 싱글톤 패턴입니다. (Singleton Pattern, 싱글턴 패턴)


전역이란 개념 자체를 아예 쓰지 않으려 하면 쓸데없이 코드가 길어지고, 불필요한 파일들이 생성되는 일도 종종 벌어집니다. 설계를 제대로 하면 되지 않느냐 반문하신다면........ 지금 당장 답변할만한 건더기는 없네요.


어찌 되었건, C++ 싱글톤 패턴을 사용하게 된다면 friend 키워드를 사용해서, 최소한 데이터의 변경만큼은 제대로 제어해줄 필요가 있습니다. 그래야만 전역 변수가 갖는 동시성, 커플링 문제 등에 대한 최소한의 대처가 가능합니다.

싱글턴 패턴 사용 시, friend 키워드 응용


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class CSingltonMotor {
 
private:
    friend class CTest_CO2Dlg;
 
    CSingltonMotor() 
    {
 
    }
 
    CSingltonMotor(const CSingltonMotor& other);
    static CSingltonMotor* inst;
 
public:
    static CSingltonMotor* getInstance()
    {
        if(inst == 0)
            inst = new CSingltonMotor();
 
        return inst; 
    }
//..... 이하 C++ 싱글톤 패턴 생략
//.....
//.....
//.....
//.....
cs


대게, 싱글턴을 구현하면 위와 같은 모습으로 하는 것이 일반적입니다.


싱글턴 패턴 singleton 싱글톤 friend[C++ 디자인 패턴 종류] 싱글턴 패턴도 좋지만 싱글턴 양주도 괜찮은듯


1
2
3
#define gObjMotor CSingltonMotor::getInstance()
 
CSingltonMotor* CSingltonMotor::inst = NULL;
cs


그리고, 위와 같이 초기화가 이뤄지겠죠.


이때, 위의 C++ 싱글톤 패턴 소스 코드처럼, 중간에 friend 클래스를 하나 선언해 준다면, 싱글턴에 접근해 데이터를 조회할지언정, 수정은 하지 못하도록 캡슐화할 수 있습니다.


단, friend 키워드를 넣어주는 건 최후의 수단입니다. 싱글턴도 그렇고 friend 키워드도 남발하는 건 다음에 어떤 문제를 일으킬지 예상하기 힘듭니다.



ps. 국내외 사이트를 막론하고 Friend 키워드 관련해서 좋은 포스팅을 찾아보기 참 힘들군요.


그나마 나은 외국 사이트의 포스트 소개합니다. C++ 싱글톤 패턴은 예제가 많습니다.



C++ 싱글톤 패턴과 Friend 키워드 예제 (싱글턴 응용)

이 글을 공유하기

댓글(0)

Designed by JB FACTORY